Compare commits

..
Author SHA1 Message Date
Clifford Yapp fa98b6b94c Work merged into trunk under BRLCAD_ENABLE_BINARY_ATTRIBUTES option - close branch. (svn branch delete)
svn:revision:68290
svn:branch:binary-attributes
svn:account:starseeker
2016-07-14 00:23:08 +00:00
Clifford Yapp 1d2eb7a8d2 Update libbson to 1.3.5, strip it down to essentials
svn:revision:68285
svn:branch:binary-attributes
svn:account:starseeker
2016-07-13 23:02:45 +00:00
Clifford Yapp fa65627150 Fix some syncing issues with trunk
svn:revision:68283
svn:branch:binary-attributes
svn:account:starseeker
2016-07-13 22:41:01 +00:00
Clifford Yapp 0e293b57b8 Sync with trunk thru r68279
svn:revision:68281
svn:branch:binary-attributes
svn:account:starseeker
2016-07-13 22:13:25 +00:00
Thomas Browder 954cd02724 remove unneeded __cplusplus macros
svn:revision:66756
svn:branch:binary-attributes
svn:account:tbrowder2
2015-12-09 16:21:57 +00:00
Thomas Browder cd42d5a38b merged trunk r66743 into binary-attributes branch
svn:revision:66744
svn:branch:binary-attributes
svn:account:tbrowder2
2015-12-07 12:34:12 +00:00
Thomas Browder 32cc34b0d5 merging trunk into branch
svn:revision:66743
svn:branch:binary-attributes
svn:account:tbrowder2
2015-12-05 14:26:09 +00:00
Thomas Browder cbc533dd63 try to use libbson headers
svn:revision:66742
svn:branch:binary-attributes
svn:account:tbrowder2
2015-12-05 14:24:07 +00:00
Thomas Browder 997f87303e need bson.h
svn:revision:66741
svn:branch:binary-attributes
svn:account:tbrowder2
2015-12-05 14:23:30 +00:00
Thomas Browder bb4bca56fb update tests section and BA representation info
svn:revision:66712
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-29 13:08:31 +00:00
Thomas Browder 1c07710e8e save work
svn:revision:66671
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-24 14:03:20 +00:00
Clifford Yapp b1f370cd56 Temporarily add BSON to the reporting list for binary-attributes branch.
svn:revision:66667
svn:branch:binary-attributes
svn:account:starseeker
2015-11-24 02:07:49 +00:00
Thomas Browder 3e500e64bf save work on mged attr command
svn:revision:66666
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-24 00:35:03 +00:00
Clifford Yapp 2d5c52acd5 Don't require BRLCAD_ENABLE_BSON to turn on libbson build.
svn:revision:66661
svn:branch:binary-attributes
svn:account:starseeker
2015-11-23 17:19:02 +00:00
Thomas Browder 658ddb53f2 update info with more details of a working scheme for handling binary attributes as BSON objects
svn:revision:66660
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-23 14:37:19 +00:00
Thomas Browder 3172c8ff23 commit merge of rev 66658
svn:revision:66659
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-23 14:05:57 +00:00
Clifford Yapp 2c00eb0c44 updates, fixes
svn:revision:66656
svn:branch:binary-attributes
svn:account:starseeker
2015-11-23 04:42:59 +00:00
Clifford Yapp cb4a92bd4b Remove autotools build files
svn:revision:66655
svn:branch:binary-attributes
svn:account:starseeker
2015-11-23 04:13:30 +00:00
Clifford Yapp 5f31ee7019 Use relative directories for sources, make a few other tweaks. Untested as yet.
svn:revision:66654
svn:branch:binary-attributes
svn:account:starseeker
2015-11-23 04:12:26 +00:00
Clifford Yapp 49d91518ae Put toplevel configure and install back.
svn:revision:66653
svn:branch:binary-attributes
svn:account:starseeker
2015-11-23 04:10:09 +00:00
Thomas Browder e6dea62c32 ignore auto-generated files
svn:revision:66652
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-23 01:42:32 +00:00
Thomas Browder f29077d926 remove auto-generated file fron version control
svn:revision:66651
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-23 01:05:11 +00:00
Thomas Browder 24ebfae73b remove auto-generated file
svn:revision:66650
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-23 00:19:39 +00:00
Thomas Browder 5bddbc5008 rename per error instructions
svn:revision:66649
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 23:39:15 +00:00
Thomas Browder f06ce5a58e weird changes--looks like these files should all be ignored, i.e., they are artifatcs of the build process
svn:revision:66648
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 23:29:57 +00:00
Thomas Browder 81bd4b0237 add files from orig source
svn:revision:66647
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 23:12:23 +00:00
Thomas Browder 8f9ad51172 initial whack at a cmakefile
svn:revision:66646
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 23:04:11 +00:00
Thomas Browder 8ded925717 updated info
svn:revision:66645
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 23:02:52 +00:00
Thomas Browder c1453e09a4 add libbson source release 'libbson-1.3.0-beta0'
svn:revision:66644
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 21:28:57 +00:00
Thomas Browder 859c8282ea prepare to add libbson as an external required source for binary attributes
svn:revision:66643
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 19:52:47 +00:00
Thomas Browder c17ceea043 bring new 'binary-attributes' branch up-to-date with changes in the old 'attr-extension-mods' branch
svn:revision:66641
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 18:06:51 +00:00
Thomas Browder 791eec9d8c Creating a new private branch of the trunk for work on binary
attributes to replace the old 'attr-extensions-mod' branch.

svn:revision:66640
svn:branch:binary-attributes
svn:account:tbrowder2
2015-11-22 13:21:58 +00:00
15103 changed files with 6724966 additions and 1427558 deletions
-2
View File
@@ -1,2 +0,0 @@
# Try to tell GitHub how to handle .asc files
*.asc linguist-language=Tcl
-768
View File
@@ -1,768 +0,0 @@
# BRL-CAD's primary distcheck target runs too long and does too much work to
# be suitable as a CI target, even occasionally. To achieve essentially the
# same result, we define individual jobs for each distcheck sub-target and
# run them in singletons. To avoid the list of targets going stale, we
# define this header and then autogenerate the actual build target jobs
# to append to it from the CMake logic.
name: Distcheck
on:
workflow_dispatch:
schedule:
- cron: '30 3 * * 5'
jobs:
bext:
name: Prepare bext (cached)
runs-on: ubuntu-latest
env:
DEBIAN_FRONTEND: noninteractive
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
# Install X/OpenGL dev pkgs
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
# Install tools
sudo apt-get install astyle re2c
# Install dependency dev pkgs
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-xrm-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
- name: Clone bext
run: git clone https://github.com/BRL-CAD/bext.git
- name: Get bext commit SHA
id: bext-sha
run: |
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Compute bext cache discriminator
id: cachekey
shell: bash
run: |
info="${{ steps.bext-sha.outputs.sha }}-$(uname -s)-$(uname -r)-$(gcc --version | head -n 1)"
echo "hash=$(echo -n "$info" | sha1sum | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.cachekey.outputs.hash }}
- name: Build bext (if cache miss)
if: steps.cache-bext.outputs.cache-hit != 'true'
run: |
cmake -E make_directory bext_build
cmake -S bext -B bext_build -DCMAKE_BUILD_TYPE=Release -DENABLE_ALL=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/bext_output
cmake --build bext_build --config Release -j 2
cmake -E rm -rf bext
cmake -E rm -rf bext_build
distcheck-default_build_type:
name: distcheck-default_build_type
runs-on: ubuntu-latest
needs: [bext]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-default_build_type
- name: Configure
run: cmake -S brlcad -B build_distcheck-default_build_type -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-default_build_type --config Release --target distcheck-default_build_type
- name: Log
if: always()
run: cat build_distcheck-default_build_type/distcheck-default_build_type.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-debug:
name: distcheck-debug
runs-on: ubuntu-latest
needs: [distcheck-default_build_type]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-debug
- name: Configure
run: cmake -S brlcad -B build_distcheck-debug -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-debug --config Release --target distcheck-debug
- name: Log
if: always()
run: cat build_distcheck-debug/distcheck-debug.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-release:
name: distcheck-release
runs-on: ubuntu-latest
needs: [distcheck-debug]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-release
- name: Configure
run: cmake -S brlcad -B build_distcheck-release -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-release --config Release --target distcheck-release
- name: Log
if: always()
run: cat build_distcheck-release/distcheck-release.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-enableall_debug:
name: distcheck-enableall_debug
runs-on: ubuntu-latest
needs: [distcheck-release]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-enableall_debug
- name: Configure
run: cmake -S brlcad -B build_distcheck-enableall_debug -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-enableall_debug --config Release --target distcheck-enableall_debug
- name: Log
if: always()
run: cat build_distcheck-enableall_debug/distcheck-enableall_debug.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-enableall_release:
name: distcheck-enableall_release
runs-on: ubuntu-latest
needs: [distcheck-enableall_debug]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-enableall_release
- name: Configure
run: cmake -S brlcad -B build_distcheck-enableall_release -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-enableall_release --config Release --target distcheck-enableall_release
- name: Log
if: always()
run: cat build_distcheck-enableall_release/distcheck-enableall_release.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-prepared_debug:
name: distcheck-prepared_debug
runs-on: ubuntu-latest
needs: [distcheck-enableall_release]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-prepared_debug
- name: Configure
run: cmake -S brlcad -B build_distcheck-prepared_debug -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-prepared_debug --config Release --target distcheck-prepared_debug
- name: Log
if: always()
run: cat build_distcheck-prepared_debug/distcheck-prepared_debug.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-prepared_release:
name: distcheck-prepared_release
runs-on: ubuntu-latest
needs: [distcheck-prepared_debug]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-prepared_release
- name: Configure
run: cmake -S brlcad -B build_distcheck-prepared_release -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-prepared_release --config Release --target distcheck-prepared_release
- name: Log
if: always()
run: cat build_distcheck-prepared_release/distcheck-prepared_release.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-no_tcl:
name: distcheck-no_tcl
runs-on: ubuntu-latest
needs: [distcheck-prepared_release]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-no_tcl
- name: Configure
run: cmake -S brlcad -B build_distcheck-no_tcl -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-no_tcl --config Release --target distcheck-no_tcl
- name: Log
if: always()
run: cat build_distcheck-no_tcl/distcheck-no_tcl.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-no_tk:
name: distcheck-no_tk
runs-on: ubuntu-latest
needs: [distcheck-no_tcl]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-no_tk
- name: Configure
run: cmake -S brlcad -B build_distcheck-no_tk -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-no_tk --config Release --target distcheck-no_tk
- name: Log
if: always()
run: cat build_distcheck-no_tk/distcheck-no_tk.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-no_strict:
name: distcheck-no_strict
runs-on: ubuntu-latest
needs: [distcheck-no_tk]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-no_strict
- name: Configure
run: cmake -S brlcad -B build_distcheck-no_strict -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-no_strict --config Release --target distcheck-no_strict
- name: Log
if: always()
run: cat build_distcheck-no_strict/distcheck-no_strict.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-no_object:
name: distcheck-no_object
runs-on: ubuntu-latest
needs: [distcheck-no_strict]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-no_object
- name: Configure
run: cmake -S brlcad -B build_distcheck-no_object -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-no_object --config Release --target distcheck-no_object
- name: Log
if: always()
run: cat build_distcheck-no_object/distcheck-no_object.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-odd_pathnames:
name: distcheck-odd_pathnames
runs-on: ubuntu-latest
needs: [distcheck-no_object]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-odd_pathnames
- name: Configure
run: cmake -S brlcad -B build_distcheck-odd_pathnames -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-odd_pathnames --config Release --target distcheck-odd_pathnames
- name: Log
if: always()
run: cat build_distcheck-odd_pathnames/distcheck-odd_pathnames.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
distcheck-in_src_dir:
name: distcheck-in_src_dir
runs-on: ubuntu-latest
needs: [distcheck-odd_pathnames]
env:
DEBIAN_FRONTEND: noninteractive
if: github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Install apt dependencies
run: |
sudo apt-get update
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
sudo apt-get install astyle re2c
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev libgl-dev libinput-dev
- name: Setup - bext
run: |
git clone https://github.com/BRL-CAD/bext.git
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
cd ..
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.bext-sha.outputs.sha }}
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: cmake -E make_directory build_distcheck-in_src_dir
- name: Configure
run: cmake -S brlcad -B build_distcheck-in_src_dir -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
- name: Build
run: cmake --build build_distcheck-in_src_dir --config Release --target distcheck-in_src_dir
- name: Log
if: always()
run: cat build_distcheck-in_src_dir/distcheck-in_src_dir.log
- name: Debug if failure
if: failure()
uses: mxschmitt/action-tmate@v3
-85
View File
@@ -1,85 +0,0 @@
# The purpose of this particular test definition is to support on-demand
# interactive command shells. We sometimes see problems that occur only in the
# Github Runner environments, and in order to explore what is happening we need
# an interactive prompt (the alternative is hours-per-cycle submit and test
# loops, which doesn't scale at all.)
#
# Unlike the other BRL-CAD tests, this one is started manually from the Github
# website. For more information see https://mxschmitt.github.io/action-tmate/
#
# The "recommended" way to use this action is for the dev to make a fork of
# the repository, alter the configure and/or build logic below for their
# particular use case (the example below is a libged-only build used to zero
# in on a specific libged behavior) before running.
name: BRL-CAD Linux Interactive Debugging
on:
workflow_dispatch:
inputs:
debug_enabled:
type: boolean
description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
required: false
default: false
jobs:
linux:
name: Ubuntu Latest GCC
runs-on: ubuntu-latest
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Setup - System
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
# Install X/OpenGL dev pkgs
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
# Install tools
sudo apt-get install astyle re2c xsltproc libxml2-utils liblief-dev
# Install dependency dev pkgs
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev
# Cleanup (we want to avoid wasting disk space)
sudo apt-get clean
- name: Setup - System Qt Build Requirements
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
sudo apt-get clean
- name: Checkout
uses: actions/checkout@v4
- name: Build Directory setup
run: |
cmake -E make_directory ./build_linux
- name: Configure
run: |
export PATH=$ENV{GITHUB_WORKSPACE}:$PATH
cmake -S . -G Ninja -B build_linux -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_COMPONENTS=libged -DBRLCAD_EXTRADOCS=OFF
- name: Build
run: |
export PATH=$ENV{GITHUB_WORKSPACE}:$PATH
cmake --build build_linux --config Release --target check
- name: Debugging - tmate session
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}
uses: mxschmitt/action-tmate@v3
with:
limit-access-to-actor: true
-519
View File
@@ -1,519 +0,0 @@
# This file defines Continuous Integration (CI) tests for BRL-CAD using the
# Github Actions framework that are executed each time a commit is pushed.
# Currently it defines configurations for Windows, Linux and OSX.
#
# For more information about available platforms for testing, see:
#
# https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners
#
# The general rule when building in CI is to go more verbose in output settings
# rather than less, since iterative debugging isn't practical. We also want to
# avoid parallel building - while that will sometimes catch dependency issues,
# it also makes the outputs far harder to interpret when there is a problem.
# Better to do parallel build debugging in an environment were more interactive
# and iterative debugging is available while preserving the readability of the
# CI outputs for other issues.
name: Per-push
on:
push:
jobs:
linux:
name: Ubuntu GCC
runs-on: ubuntu-latest
strategy:
fail-fast: true
env:
DEBIAN_FRONTEND: noninteractive
if: github.event_name == 'push'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
# Cache apt package downloads (not installed pkgs)
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/push.yml') }}
# Install system dependencies
- name: Install apt dependencies
run: |
sudo apt-get update
# Install X/OpenGL dev pkgs
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
# Install tools
sudo apt-get install astyle re2c xsltproc libxml2-utils
# Install dependency dev pkgs
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-xrm-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
# Prepare bext cache key
- name: Clone bext
run: git clone https://github.com/BRL-CAD/bext.git
- name: Get bext commit SHA
id: bext-sha
run: |
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Compute bext cache discriminator
id: cachekey
shell: bash
run: |
info="${{ steps.bext-sha.outputs.sha }}-$(uname -s)-$(uname -r)-$(gcc --version | head -n 1)"
echo "hash=$(echo -n "$info" | sha1sum | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.cachekey.outputs.hash }}
- name: Build bext (if cache miss)
if: steps.cache-bext.outputs.cache-hit != 'true'
run: |
cmake -E make_directory bext_build
cmake -S bext -B bext_build -DCMAKE_BUILD_TYPE=Release -DENABLE_ALL=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/bext_output
cmake --build bext_build --config Release -j 2
cmake -E rm -rf bext
cmake -E rm -rf bext_build
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: |
cmake -E make_directory ./build_linux
cmake -E make_directory $HOME/.cache
cmake -E make_directory $HOME/.cache/BRL-CAD
- name: Configure
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake -S brlcad -B build_linux -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output -DBRLCAD_ENABLE_QT=ON
- name: Build
id: build_parallel
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake --build build_linux --config Release --target check -j2
cmake --build build_linux --config Release --target package -j2
continue-on-error: true
- name: Build (serial for diagnostics)
if: steps.build_parallel.outcome == 'failure'
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake --build build_linux --config Release --target check
cmake --build build_linux --config Release --target package
# A full distcheck is too expensive for the runners, but we can run the
# repository integrity check and make sure we can build source archives.
archives:
name: Source Archives
runs-on: ubuntu-latest
needs: [linux]
strategy:
fail-fast: true
env:
DEBIAN_FRONTEND: noninteractive
if: github.event_name == 'push'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/push.yml') }}
# Install system dependencies - we do the full setup here, even though
# source archives isn't intended to build the main BRL-CAD, in case
# this check is the one where the bext dependency cache check gets a miss.
# In that case, this check will have to build bext to proceed - and it will
# need the bext environment set up to do so.
- name: Install apt dependencies
run: |
sudo apt-get update
# Install X/OpenGL dev pkgs
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
# Install tools
sudo apt-get install astyle re2c xsltproc libxml2-utils
# Install dependency dev pkgs
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-xrm-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
- name: Clone bext
run: git clone https://github.com/BRL-CAD/bext.git
- name: Get bext commit SHA
id: bext-sha
run: |
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Compute bext cache discriminator
id: cachekey
shell: bash
run: |
info="${{ steps.bext-sha.outputs.sha }}-$(uname -s)-$(uname -r)-$(gcc --version | head -n 1)"
echo "hash=$(echo -n "$info" | sha1sum | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.cachekey.outputs.hash }}
- name: Build bext (if cache miss)
if: steps.cache-bext.outputs.cache-hit != 'true'
run: |
cmake -E make_directory bext_build
cmake -S bext -B bext_build -DCMAKE_BUILD_TYPE=Release -DENABLE_ALL=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/bext_output
cmake --build bext_build --config Release -j2
rm -rf bext
rm -rf bext_build
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Build
run: |
cmake -E make_directory build_archives
cmake -S brlcad -B build_archives -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output
cmake --build build_archives --config Release --target distcheck-source_archives
windows:
name: MSVC - Ninja
runs-on: windows-latest
strategy:
fail-fast: true
if: github.event_name == 'push'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Add cl.exe to PATH
uses: ilammy/msvc-dev-cmd@v1
- name: Add github workspace to path
shell: pwsh
run: Add-Content -Path $env:GITHUB_PATH -Value $env:GITHUB_WORKSPACE
- name: Clone bext
# Note - this will not check out any of the submodules unless we need
# them for building, so it should be a very small disk space hit.
# Consequently, we don't worry about deleting it unless we end up
# having to build it. The bext source directory is not one of the
# cached directories, so a straight git clone is fine - no need to
# worry about colliding with a previous clone.
run: git clone https://github.com/BRL-CAD/bext.git
- name: Get bext commit SHA
id: bext-sha
shell: powershell
run: |
cd bext
echo "sha=$(git rev-parse HEAD)" >> $env:GITHUB_OUTPUT
- name: Compute bext cache discriminator
id: cachekey
shell: bash
run: |
clver=""
if command -v cl.exe &> /dev/null; then
clver="$(cl.exe 2>&1 | head -n 1)"
fi
info="${{ steps.bext-sha.outputs.sha }}-$(uname -s)-$(uname -r)-$clver"
echo "hash=$(echo -n "$info" | sha1sum | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}\bext_output
key: windows-bext-${{ steps.cachekey.outputs.hash }}
- name: Build bext (if cache miss)
if: steps.cache-bext.outputs.cache-hit != 'true'
shell: powershell
run: |
cmake -E make_directory bext_build
cmake -S bext -B bext_build -DCMAKE_BUILD_TYPE=Release -DENABLE_ALL=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}\bext_output
cmake --build bext_build --config Release -j2
# If we have had to build, the submodules are populated and the build
# directory will have a lot in it. We only need the build ouputs
# (bext_output) after this point, so clean up to save space for the
# main BRL-CAD build.
cmake -E rm -rf bext
cmake -E rm -rf bext_build
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Build Directory setup
run: cmake -E make_directory ./build_winninja
- name: Configure
shell: powershell
run: |
cmake -S brlcad -B build_winninja -G Ninja -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" -DBRLCAD_EXT_DIR=${{ github.workspace }}\bext_output -DCMAKE_BUILD_TYPE=Release -DBRLCAD_ENABLE_QT=ON
- name: Build
id: build_parallel
shell: powershell
run: |
ninja
working-directory: ${{ github.workspace }}/build_winninja
continue-on-error: true
- name: Build (serial for diagnostics)
if: steps.build_parallel.outcome == 'failure'
shell: powershell
run: |
ninja -j1 -v
working-directory: ${{ github.workspace }}/build_winninja
- name: Check
shell: powershell
run: |
ninja check -v
working-directory: ${{ github.workspace }}/build_winninja
- name: Package
shell: powershell
run: |
ninja package
working-directory: ${{ github.workspace }}/build_winninja
windows_std_tools:
name: MSVC - Standard Tools
needs: [windows]
runs-on: windows-latest
strategy:
fail-fast: true
if: github.event_name == 'push'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Clone bext
# Note - this will not check out any of the submodules unless we need
# them for building, so it should be a very small disk space hit.
# Consequently, we don't worry about deleting it unless we end up
# having to build it. The bext source directory is not one of the
# cached directories, so a straight git clone is fine - no need to
# worry about colliding with a previous clone.
#
# In theory we could rely on the windows Ninja test for this, since we
# depend on it, but we define each test to be potentially stand-alone
# in case we end up removing the other windows test(s) for any reason.
run: git clone https://github.com/BRL-CAD/bext.git
- name: Get bext commit SHA
id: bext-sha
shell: pwsh
run: |
cd bext
echo "sha=$(git rev-parse HEAD)" >> $env:GITHUB_OUTPUT
- name: Compute bext cache discriminator
id: cachekey
shell: bash
run: |
clver=""
if command -v cl.exe &> /dev/null; then
clver="$(cl.exe 2>&1 | head -n 1)"
fi
info="${{ steps.bext-sha.outputs.sha }}-$(uname -s)-$(uname -r)-$clver"
echo "hash=$(echo -n "$info" | sha1sum | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}\bext_output
key: windows-bext-${{ steps.cachekey.outputs.hash }}
- name: Build bext (if cache miss)
# Note - most of windows_std_tools builds using cmd and avoids ninja,
# but for the bext build if we need to do it) we want to match the
# behavior of the ninja build so we have consistent inputs.
if: steps.cache-bext.outputs.cache-hit != 'true'
shell: powershell
run: |
cmake -E make_directory bext_build
cmake -S bext -B bext_build -DCMAKE_BUILD_TYPE=Release -DENABLE_ALL=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}\bext_output
cmake --build bext_build --config Release -j2
# If we have had to build, the submodules are populated and the build
# directory will have a lot in it. We only need the build ouputs
# (bext_output) after this point, so clean up to save space for the
# main BRL-CAD build.
cmake -E rm -rf bext
cmake -E rm -rf bext_build
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Build Directory setup
run: |
cmake -E make_directory ./build_winstd
- name: Configure
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake -S brlcad -B build_winstd -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_BUNDLED_LIBS=Bundled -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=%GITHUB_WORKSPACE%\bext_output -DBRLCAD_ENABLE_QT=ON
- name: Build
id: build_parallel
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake --build build_winstd --config Release -j2
continue-on-error: true
- name: Build (serial for diagnostics)
if: steps.build_parallel.outcome == 'failure'
shell: cmd
run: |
cmake --build build_winstd --config Release mged
- name: Check
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake --build build_winstd --config Release --target check -j2
- name: Package
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake --build build_winstd --config Release --target package -j2
osx:
name: macOS Clang
needs: [linux]
runs-on: macos-14
strategy:
fail-fast: true
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Install Xquartz
run: |
brew install xquartz --cask
- name: Clone bext
run: git clone https://github.com/BRL-CAD/bext.git
- name: Get bext commit SHA
id: bext-sha
run: |
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Compute bext cache discriminator
id: cachekey
shell: bash
run: |
xcodever="$(xcodebuild -version | head -n 1 | awk '{print $2}')"
clangver="$(clang --version | head -n 1)"
info="${{ steps.bext-sha.outputs.sha }}-$(uname -s)-$(uname -r)-$xcodever-$clangver"
echo "hash=$(echo -n "$info" | sha1sum | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: macos-bext-${{ steps.cachekey.outputs.hash }}
- name: Build bext (if cache miss)
if: steps.cache-bext.outputs.cache-hit != 'true'
run: |
cmake -E make_directory bext_build
export CC=clang
export CXX=clang++
# Right now on OSX we need ENABLE_ALL, because Mac system Tcl/Tk won't work
cmake -S bext -B bext_build -DENABLE_ALL=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/bext_output -DCMAKE_BUILD_TYPE=Release
cmake --build bext_build -j 2
cmake -E rm -rf bext
cmake -E rm -rf bext_build
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Build Directory setup
run: |
cmake -E make_directory build_osx
cmake -E make_directory $HOME/.cache
cmake -E make_directory $HOME/.cache/BRL-CAD
- name: Configure
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
export CC=clang
export CXX=clang++
cmake -S brlcad -B build_osx -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output -DBRLCAD_ENABLE_QT=ON
- name: Build
id: build_parallel
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
make -j2
working-directory: ${{ github.workspace }}/build_osx
continue-on-error: true
- name: Build (serial for diagnostics)
if: steps.build_parallel.outcome == 'failure'
run: |
make
working-directory: ${{ github.workspace }}/build_osx
- name: Check
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
make check
working-directory: ${{ github.workspace }}/build_osx
- name: Package
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
make package
working-directory: ${{ github.workspace }}/build_osx
-438
View File
@@ -1,438 +0,0 @@
# This file defines Continuous Integration (CI) tests for BRL-CAD using the
# Github Actions framework. Currently it defines configurations for Windows,
# Linux and OSX. These tests are run on a fixed schedule, rather than per
# push, and will typically take longer to run.
#
# Tests here are intended to test more expensive integrations and longer
# builds than the ones targeted at per-commit feedback. The tradeoff is
# that a failure in these tests might be cause by any commit within a
# 24 hour block of time, so the developer will need to track down the
# specifics themselves.
name: Scheduled
on:
schedule:
- cron: '0 3 * * *' # daily at 03:00 UTC
jobs:
linux_bext:
name: Linux - BRL-CAD bext build
runs-on: ubuntu-latest
strategy:
fail-fast: true
env:
DEBIAN_FRONTEND: noninteractive
if: github.event_name == 'schedule'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
# Cache apt package downloads (not installed pkgs)
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
# Install system dependencies
- name: Install apt dependencies
run: |
sudo apt-get update
# Install X/OpenGL dev pkgs
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
# Install tools
sudo apt-get install astyle re2c xsltproc libxml2-utils
# Install dependency dev pkgs
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-xrm-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: |
cmake -E make_directory build_linux
cmake -E make_directory $HOME/.cache
cmake -E make_directory $HOME/.cache/BRL-CAD
- name: Configure
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake -S brlcad -B build_linux -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_BEXT_CLEANUP=ON -DBRLCAD_ENABLE_QT=ON
- name: Build + Check + Package
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake --build build_linux --config Release --target check
cmake --build build_linux --config Release --target package
windows_bext:
name: MSVC - Ninja - BRL-CAD bext build
needs: [linux_bext]
runs-on: windows-latest
strategy:
fail-fast: true
if: github.event_name == 'schedule'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Add cl.exe to PATH
uses: ilammy/msvc-dev-cmd@v1
- name: Add github workspace to path
shell: powershell
run: Add-Content -Path $env:GITHUB_PATH -Value $env:GITHUB_WORKSPACE
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Build Directory setup
run: cmake -E make_directory ./build_winninja
- name: Configure
shell: powershell
run: |
cmake -S brlcad -B build_winninja -G Ninja -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_BEXT_CLEANUP=ON -DBRLCAD_ENABLE_QT=ON
- name: Build
shell: powershell
run: |
ninja -j1 -v
working-directory: ${{ github.workspace }}/build_winninja
- name: Check
shell: powershell
run: |
ninja check -v
working-directory: ${{ github.workspace }}/build_winninja
- name: Package
shell: powershell
run: |
ninja package
working-directory: ${{ github.workspace }}/build_winninja
windows_std_tools_bext:
name: MSVC - Standard Tools - BRL-CAD bext build
needs: [windows_bext]
runs-on: windows-latest
strategy:
fail-fast: true
if: github.event_name == 'schedule'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Add github workspace to path
shell: cmd
run: echo %GITHUB_WORKSPACE%>>"%GITHUB_PATH%"
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Build Directory setup
run: |
cmake -E make_directory ./build_winstd
- name: Configure
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake -S brlcad -B build_winstd -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_BUNDLED_LIBS=Bundled -DBRLCAD_EXT_PARALLEL=1 -DCMAKE_BUILD_TYPE=Release -DBRLCAD_BEXT_CLEANUP=ON -DBRLCAD_ENABLE_QT=ON
- name: Build
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake --build build_winstd --config Release --target mged
- name: Check
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake --build build_winstd --config Release --target check
- name: Package
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake --build build_winstd --config Release --target package
osx_bext:
name: macOS - BRL-CAD bext build
needs: [linux_bext]
runs-on: macos-14
strategy:
fail-fast: true
if: github.event_name == 'schedule'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Install Xquartz
run: |
brew install xquartz --cask
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Build Directory setup
run: |
cmake -E make_directory build_osx
cmake -E make_directory $HOME/.cache
cmake -E make_directory $HOME/.cache/BRL-CAD
- name: Configure
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
export CC=clang
export CXX=clang++
cmake -S brlcad -B build_osx -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_BEXT_CLEANUP=ON -DBRLCAD_ENABLE_QT=ON
- name: Build
run: |
make
working-directory: ${{ github.workspace }}/build_osx
- name: Check
run: |
make check
working-directory: ${{ github.workspace }}/build_osx
- name: Package
run: |
make package
working-directory: ${{ github.workspace }}/build_osx
linux_static:
name: Clang Static Analyser
needs: [linux_bext]
runs-on: ubuntu-latest
strategy:
fail-fast: true
env:
DEBIAN_FRONTEND: noninteractive
if: github.event_name == 'schedule' && github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
# Setup hint from https://github.com/darktable-org/rawspeed/blob/develop/.github/workflows/ci-static-analysis.yml
- name: Clang Static Analyzer Setup
run: |
sudo apt-get update
sudo apt-get install clang-18 clang-tools-18
# Install X/OpenGL dev pkgs
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
# Install tools
sudo apt-get install astyle re2c xsltproc libxml2-utils
# Install dependency dev pkgs
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-xrm-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev # Cleanup
- name: Clone bext
run: git clone https://github.com/BRL-CAD/bext.git
- name: Get bext commit SHA
id: bext-sha
run: |
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Compute bext cache discriminator
id: cachekey
shell: bash
run: |
info="${{ steps.bext-sha.outputs.sha }}-$(uname -s)-$(uname -r)-$(gcc --version | head -n 1)"
echo "hash=$(echo -n "$info" | sha1sum | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.cachekey.outputs.hash }}
- name: Build bext (if cache miss)
if: steps.cache-bext.outputs.cache-hit != 'true'
run: |
cmake -E make_directory bext_build
cmake -S bext -B bext_build -DCMAKE_BUILD_TYPE=Release -DENABLE_ALL=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/bext_output
cmake --build bext_build --config Release -j 2
cmake -E rm -rf bext
cmake -E rm -rf bext_build
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: |
cmake -E make_directory build_clangstatic
cmake -E make_directory $HOME/.cache
cmake -E make_directory $HOME/.cache/BRL-CAD
working-directory: ${{ github.workspace }}/brlcad
- name: Run Analyzer
run: |
export PATH=$GITHUB_WORKSPACE:/usr/share/clang/scan-build-18/bin:/usr/share/clang/scan-build-18/libexec:$PATH
cp $GITHUB_WORKSPACE/brlcad/misc/clang-static-analyzer-run.sh .
./clang-static-analyzer-run.sh
working-directory: ${{ github.workspace }}/brlcad/build_clangstatic
- name: Summary
if: success() || failure()
run: |
sudo apt-get install html2text
html2text scan-reports-all/*/index.html
working-directory: ${{ github.workspace }}/brlcad/build_clangstatic
# See https://app.codecov.io/gh/BRL-CAD/brlcad for analysis results
linux_cov:
name: LCOV Coverage testing
needs: [linux_bext]
runs-on: ubuntu-latest
strategy:
fail-fast: true
env:
DEBIAN_FRONTEND: noninteractive
if: github.event_name == 'schedule' && github.ref == 'refs/heads/main'
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Cache apt packages
uses: actions/cache@v4
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/check.yml') }}
- name: Setup - System
run: |
sudo apt-get update
# Get the lcov tool and its dependencies
sudo apt-get install lcov
# Install X/OpenGL dev pkgs
sudo apt-get install xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
# Install tools
sudo apt-get install astyle re2c xsltproc libxml2-utils
# Install dependency dev pkgs
sudo apt-get install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libeigen3-dev libgdal-dev libassimp-dev libopencv-dev tcl-dev tk-dev
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-xrm-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
- name: Clone bext
run: git clone https://github.com/BRL-CAD/bext.git
- name: Get bext commit SHA
id: bext-sha
run: |
cd bext
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Compute bext cache discriminator
id: cachekey
shell: bash
run: |
info="${{ steps.bext-sha.outputs.sha }}-$(uname -s)-$(uname -r)-$(gcc --version | head -n 1)"
echo "hash=$(echo -n "$info" | sha1sum | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Cache bext build outputs
id: cache-bext
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/bext_output
key: ${{ runner.os }}-bext-${{ steps.cachekey.outputs.hash }}
- name: Build bext (if cache miss)
if: steps.cache-bext.outputs.cache-hit != 'true'
run: |
cmake -E make_directory bext_build
cmake -S bext -B bext_build -DCMAKE_BUILD_TYPE=Release -DENABLE_ALL=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/bext_output
cmake --build bext_build --config Release -j 2
cmake -E rm -rf bext
cmake -E rm -rf bext_build
- name: Checkout
uses: actions/checkout@v4
with:
path: brlcad
- name: Directory setup
run: |
cmake -E make_directory build_lcov
cmake -E make_directory $HOME/.cache
cmake -E make_directory $HOME/.cache/BRL-CAD
- name: Configure
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake -S brlcad -B build_lcov -DBRLCAD_ENABLE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug -DBRLCAD_EXT_DIR=${{ github.workspace }}/bext_output -DBRLCAD_ENABLE_QT=ON
- name: Build
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake --build build_lcov -j2
- name: Build (serial for diagnostics)
if: steps.build_parallel.outcome == 'failure'
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake --build build_lcov -j1
continue-on-error: true
- name: Run Coverage Test
run: |
find . -name '*.gcda' -exec rm {} \;
make check
lcov --capture --directory . --output-file coverage.info
lcov -r coverage.info \*\/bext_output\/\* > coverage-2.info
lcov -r coverage-2.info \/usr\/\* > coverage_cad.info
rm coverage-*.info
mv coverage_cad.info ..
working-directory: ${{ github.workspace }}/build_lcov
- name: Upload
uses: codecov/codecov-action@v4
with:
files: ./coverage_cad.info
-40
View File
@@ -1,40 +0,0 @@
# Common build directories used in the source tree
/build*
/.build*
/*_build*
/*-build*
/out
# Temporary files
*~
\#*\#
.\#*
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]
# OS specific files
.DS_Store
.DS_Store?
# CMake supports some configuration files to allow users a convenient way to pre-define
# sets of configuration options:
# https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html
/CMakeUserPresets.json
# Visual Studio (note that CMakePresets.json is recommended instead of
# CMakeSettings.json for Visual Studio going forward)
# https://learn.microsoft.com/en-us/cpp/build/cmake-presets-vs
# https://learn.microsoft.com/en-us/cpp/build/customize-cmake-settings
/.vs
.vscode
/CMakeSettings.json
#Qt Creator
CMakeLists.txt.user
# Misc
.clang-format
+26 -298
View File
@@ -111,7 +111,7 @@ Hanes, Jeff
U.S. Army Ballistic Research Laboratory
U.S. Army Research Laboratory
Johnson, Christopher T.
Johnson, Christopher T. <cjohnson@cyberpaladin.com>
nicknames cjohnson
1989 February
Cray Research, Inc.
@@ -119,7 +119,7 @@ Geometric Solutions, Inc.
Paladin Software
JRMTech, Inc.
Butler, Lee A.
Butler, Lee A. <butler@arl.army.mil>
nicknames butler, lbutler
1989 July
U.S. Army Ballistic Research Laboratory
@@ -131,7 +131,7 @@ nicknames pjt
U.S. Army Ballistic Research Laboratory
U.S. Army Research Laboratory
Markowski, Michael J.
Markowski, Michael J. <michael.markowski@arl.army.mil>
nicknames mmark, mm
1991 June
U.S. Army Ballistic Research Laboratory
@@ -141,7 +141,7 @@ nicknames gdurf
1992 August
ARL Student Hire / Carnegie Mellon University
Anderson, John R.
Anderson, John R. <jra@arl.army.mil>
nicknames jra, johnranderson
1993 May
U.S. Army Ballistic Research Laboratory
@@ -154,14 +154,14 @@ nicknames adam
1995 October
Geometric Solutions, Inc.
Parker, Robert G.
Parker, Robert G. **
nicknames include bparker, bob1961
1995 January
U.S. Army Research Laboratory
SURVICE Engineering, Inc.
Open Source
Morrison, Christopher Sean <morrison@brlcad.org>
Morrison, Christopher Sean <morrison@brlcad.org> **
nicknames sean, morrison, brlcad
1998 December
ARL Student Hire / Johns Hopkins University
@@ -178,7 +178,7 @@ nicknames tranese
2001 March
U.S. Army Research Laboratory
Hartley, Robert F.
Hartley, Robert F. <hartley@vt.edu>
nicknames hartley
2002 August
ARL Student Hire / Virginia Tech
@@ -189,48 +189,48 @@ nicknames twingy, justin
Quantum Research International, Inc.
U.S. Army Research Laboratory
Greenwald, Erik
Greenwald, Erik <erikg@arl.army.mil> **
nicknames erikg, erikgreenwald
2003 November
U.S. Army Research Laboratory
Open Source
Roßberg, Daniel
Roßberg, Daniel **
nicknames d_rossberg
2005 June
Industrieanlagen-Betriebsgesellschaft mbH (IABG)
Open Source
Yapp, Cliff
Yapp, Cliff **
nicknames starseeker
2007 September
Open Source
Quantum Research International, Inc.
U.S. Army Research Laboratory
Bowman, W. Keith
Bowman, W. Keith **
nicknames indianlarry
SURVICE Engineering, Inc.
U.S. Army Research Laboratory
Weiss, Richard
Weiss, Richard **
nicknames r_weiss
2008 December
U.S. Army Research Laboratory
Browder, Thomas M. Jr.
Browder, Thomas M. Jr. **
nicknames tbrowder2
2008 June
ManTech International Corporation
Open Source
Reed, Nicholas
Reed, Nicholas **
nicknames n_reed
2008 July
ARL Student Hire / University of Maryland, Baltimore County
Quantum Research International, Inc.
Moore, Jr., Carl G.
Moore, Jr., Carl G. **
nicknames cmoore, carlmoore
2011 October
U.S. Army Research Laboratory
@@ -243,7 +243,7 @@ Weaver, Earl P.
1980
U.S. Army Ballistic Research Laboratory
Davisson, Edwin O.
Davisson, Edwin O. **
U.S. Army Research Laboratory
Rogers, David
@@ -260,10 +260,10 @@ U.S. Army Ballistic Research Laboratory
Applin, Keith A.
U.S. Army Research Laboratory
Kregel, Dwayne
Kregel, Dwayne **
SURVICE Engineering, Inc.
Weaver, Stephanie 'Rain'
Weaver, Stephanie 'Rain' **
2009 June
ARL Student Hire / Bridgewater College
@@ -279,7 +279,6 @@ Schueler, Betty J.
Edwards, Eric
SURVICE Engineering, Inc.
Open Source (Doc Camp)
Kregel, Dwayne
SURVICE Engineering, Inc.
@@ -335,41 +334,6 @@ Perez, Alex
2012 November
Open Source (GCI)
Singh, Harmanpreet
nicknames harmanpreet
2013 October
Open Source (Doc Camp)
Kamga, Isaac
nicknames Izak, iiizzzaaakkk
2013 October
Open Source (Doc Camp)
Check, Nyah
nicknames Ch3ck
2013 October
Open Source (Doc Camp)
Scott Nesbitt
2013 October
Open Source (Doc Camp)
Wood, David
2013 November
Open Source (GCI)
Agarwal, Yatharth
2013 November
Open Source (GCI)
McDonald, Rob
2013 November
Open Source
Roberts, Mitchell
2014 July
U.S. Army Research Laboratory
Tannous, Marc
2014 December
Open Source (GCI)
@@ -389,10 +353,6 @@ nicknames sofat
2015 June
Open Source (GSoC)
Sieu, Jeff
2017 December
Open Source (GCI)
CODE CONTRIBUTIONS
------------------
@@ -725,11 +685,6 @@ Govindjee, Arjun
2012 December
Open Source (GCI)
Ramirez, Daniel
nicknames javamonn
2012 December
Open Source (GCI)
Nagy, Csaba
nicknames ncsaba
2013 April
@@ -807,7 +762,7 @@ nicknames huskmate13
2014 January
Open Source
Granroth, Gustave
Gustave Granroth
2014 May
Open Source
@@ -865,221 +820,6 @@ Hanji, Param
2016 March
Open Source (GSoC)
Wu, Bojian
2016 June
Open Source (GSoC)
Bagavathy, Rakshika
nicknames tandoorichick
2016 October
Open Source (GSoC)
Gao, Tianyue
2016 December
Open Source (GCI)
Rathore, Shubham
nicknames gabbar1947
2017 April
Open Source
nicknames Rakete1111
2017 November
Open Source
Narayan, Saran
nicknames sharannyn
2018 April
Open Source (GSoC)
Shinde, Chetan
nicknames chetanshinde911
2019 April
Open Source (GSoC)
Haydar, Ali
nicknames lois221 lgoogl696 LouisGoogl
2019 May
Open Source (GSoC)
Nayak, Himanshu
nicknames himanshu40
2020 January
Open Source (GSoC)
Suthar, Rishabh
nicknames yamhai, rishabhsuthar32
2020 March
Open Source (GSoC)
Vaidya, Sahil
nicknames sahilvaidya99
2020 April
ARL Student Hire / University of Texas at Austin
Das, Sumagna
nicknames sumagnadas
2020 May
Open Source
Atreya, Vikram
nicknames vikram-atreya
2020 October
Open Source
Dinges, Trey
nicknames treydinges
2021 October
Texas A&M University
Connelly, Cole D.
nicknames cdconn00
2021 October
Texas A&M University
Olivarez, Vincent
nicknames volivarez60
2021 October
Texas A&M University
McGregor, Christopher J.
nicknames f4alt
2021 October
Texas A&M University
Studwell, Alex P.
nicknames apstudwell
2021 October
Texas A&M University
Wilson, Reid
nicknames rwilson
2021 October
Texas A&M University
Paz, Luz
nicknames luzpaz
2022 February
Open Source
Ferguson, Sean
nicknames GradualSyrup
2022 March
Texas A&M University
Chambers, William R.
nicknames redcarrera
2022 April
U.S. Army DEVCOM Analysis Center
Kejriwal, Tanya
nicknames tanyakejriwal
2022 February
Texas A&M University
Servin, Diego
nicknames dservin
2022 February
Texas A&M University
Norris, Cameron
nicknames cameron-norris
2022 February
Texas A&M University
Hernandez, Luis
nicknames LouisTheLeaf
2022 February
Texas A&M University
Curtis, Alexandria
nicknames acurtis55
2022 February
Texas A&M University
Plaisance, Andrew T.
nicknames atp318
2022 February
Texas A&M University
Stepic, Joseph
nicknames JosephStepic
2022 February
Texas A&M University
Santos, Kevin
2022 February
Texas A&M University
Bergeron, Wesley Paul
2022 February
Texas A&M University
Chen, Zhuo (Danny)
2023 February
Texas A&M University
Hoskinson, Allyson
2023 February
Texas A&M University
Plant, Andrew
2023 February
Texas A&M University
Sturtevant, Mark
2023 February
Texas A&M University
Tao, Michael
2023 February
Texas A&M University
Dhawan, Rohan
2023 October
Texas A&M University
Feng, Feng
2023 October
Texas A&M University
Hollenbeck, Sam
nicknames samhollenbeck
2023 October
Texas A&M University
Pham, Timothy
nicknames YUMGUY
2023 October
Texas A&M University
Zou, Yida
nicknames YidaZou
2023 October
Texas A&M University
Reynolds, Timothy
nicknames TheZouave007
2024 February
Texas A&M University
Delbarre, Gaultier
nicknames CoralRocker
2024 March
Texas A&M University
Beckett, Ian
2024 March
Texas A&M University
McLean, Connor
2024 March
Texas A&M University
Reel, Samuel (Sammy)
2024 March
Texas A&M University
SPECIAL THANKS
--------------
@@ -1386,22 +1126,6 @@ nicknames bchepkwny
2015 December
Open Source
Sagarwal
2017 January
Open Source (GCI)
Liu, Jeffrey
2019 December
Open Source (GCI)
Wade, Pauline
2021 August
Texas A&M University
nicknames r-ricci
2022 January
Open Source
CORPORATE AND ORGANIZATION SUPPORT
----------------------------------
@@ -1473,6 +1197,10 @@ contributed entirely before the name change reflect the original name,
whereas persons who continued or began contributions after the name
change reflect the new name.
If corrections or additions need to be made, please contact one of the
developers. Additionally, you may send inquiries, suggestions, and
comments to the developer list: brlcad-devel@lists.sourceforge.net
** The individual is an active contributor, participating in BRL-CAD
development within the past 12 months with numerous contributions.
If any corrections or additions need to be made, please contact one of
the active core developers. Additionally, you may send inquiries,
suggestions, and comments to the developer mailing list:
brlcad-devel@lists.sourceforge.net
+70 -274
View File
@@ -15,273 +15,9 @@ on-going issues.
Recent Bugs
-----------
* fbserv as well as -F option handling (e.g., -F0 or -F/dev/wgls) that
is supported across myriad other tools appears to be broken on
Windows in a git bash shell (problem is not seen in Command Prompt.)
Something is concatenating EXEPATH and/or fbserv silently fails with
return codes (e.g., when not specifying -F, only giving the port.)
* rt -H hypersample, -J jitter, and -j# for sub-grid-mode assumes a
framebuffer, causing pix data to get written to the -o file (e.g.,
even with -o file.png). See view_pixel() near src/rt/view.c:472 for
problem area with -j but there are likely call sites.. Need to
scrub all fb_write() and ideally make this a non-issue via icv API.
* obj-g and gcv converters choke and crash on obj with unnamed g line.
spec wording on whether that's valid is unclear, but encountered in
wild.
* recursive bu_parallel() failure, tbd whether cpp11 or pthread impl,
likely because IDs are exceeding MAX_PSW, causing mayhem and chaos.
* Archer was observed to mangle the structure of a comb tree when assigning
a color from the dialog panel. MGED is able to assign the color fine,
so there appears to be something specific to Archer's comb tree handling
that is flawed. Not all combs are handled incorrectly. Issue appears to
be long standing - observed as far back as at least version 7.28.
* rtcheck_handler_cleanup() throws 'invalid handle specified' on Windows
in closing of STDOUT (see FIXME comment). Does not affect normal running,
but a debug build complains.
* very peculiar non-linear memory issue in rt when allocating a large
flat hierarchy of objects. I have three combs, each with 10k
members unioned. Each member is an rcc. Rendering with just one
comb results in about 2GB usage. Two combs result in about 3.5GB
usage. Three combs results in 18GB usage. Four is killed after
24GB. Suspect there is some 32-bit issue once we exceed 4GB that is
causing subsequent allocations to be bigger than necessary. Looking
at allocation stack, rt_ct_get() appears to be allocating 10MB
chunks.
* rt from mged is not outputting overlap log messages or rt summary.
Stops printing after opendb line. (Observed on Mac)
* mged running an rt with excessive overlaps ends up in a deadlock.
Backtrace indicates write buffer is full, likely because no output
is going to terminal. (Observed on Mac)
* gcv on a glTF file (at least a binary .glb) crashes hard with a NULL
pointer bomb (workaround: gltf-g succeeds albeit incomplete
conversion). Takes out the entire Terminal app on Mac for some
reason (consistently).
* Running"mged -c test.g" exits automatically on default prompt:
...
Create new database (y|n)[n]?
Warning: no database is currently open!
morrison@Miniagua .build %
* TGC tess fails when we have a near-zero c axis and a larger d
axis, or vice versa.
* MGED crashes trying to open the repository file
doc/docbook/resources/other/standard/xsl/images/important.tif
It is mis-identified as a v4 .g file due to the file header's
first character matching the v4 .g first character.
* MGED on Mac hides the main command window on File->Open when you
cancel the open. Presumably the withdraw is somehow getting routed
to the window and not just the open dialog.
* running pkgIndex and/or mkIndex during build appears to be randomly
crashing on Mac using bundled libs
* garbage_collect -c wipes out custom attributes on _GLOBAL
> attr set _GLOBAL foo bar
> garbage_collect -c
* Visual error when drawing using -S -m1 of a region with the same solid
subtracted and then unioned.
make two boxes stacked on top of one another
> r boxes.r u box - box1 u box1
> e -S -m1 boxes.r
box1 is not drawn
* When run inside mged, invalid syntax reported on "gqa -p prefix"
despite it being documented as the correct form (and working outside
mged). specifying gqa -pprefix appears to be workaround, though
unintuitive. specifying gqa -p"" annoyingly outputs ""exp_air.plot3
with quotes embedded in the name.
* rtweight reports nan,nan,nan centroid when density is 0
* rtweight/gqa volumes seem wrong with simple sphere test case, with
values consistently and quickly converging less than the actual
volume regardless of the grid size.
* gqa manpage has the wrong indentation on the options write-up.
* raytracing a revolved sketch seems to work fine, but rtarea and gqa
seem to be crashing on that same revolve. curiously, the brep
revolve from the csgbrep proc-db has the same failure as well as the
brep ehy.
* ogl display manager still crashes on attach in mged on Mac OS X 10.5
* running archer "" at least on windows results in a file type dialog
and errors with "can't read "_conv_log": no such variable
* opening a database in archer with the same name as a command doesn't
work.
* in mged, running the 'attach' command (confirmed issues with X and
ogl), closing the window, and then issuing a 'draw' results in mged
crashing.
* killtree / crashes
* killtree reports spurious db_lookup failures saying object does not
exist as it previously deleted it. should keep track of what it
deletes to not output spuriously, or (better) delete transactionally
so it only attempts to lookup and delete once per object.
* object names with a / or \ in them make ls or underlying directory
parsing logic display them incorrectly.
* search -exec results are inconsistent with search filtered
results. for example, "search . -attr ..." returns A B C, but
"search . -attr ... -exec attr show {} \;" results in attr show
output for A B C as well as subtracted repetitions. For example,
say A contains - B - C, then it will show output for A B C B C.
adding -bool u gets closer to consistent but still appears to repeat
the last object
* fbclear -c appears to hang indefinitely inside pkg_bwaitfor,
possible protocol mismatch or capability removed/changed in fbserv.
* dbupgrade -r produces an invalid rhc with the default v5 rhc produced
by MGED with "make rhc rhc"
* apparently all four BRL-CAD Tutorial Series volumes are missing from
our bibliography...
* Tessellating an ETO with a normal tolerance results in stack
smashing due to bad logic in recursive algorithm: set norm 2;
facetize my.eto my.bot;. Observed infinite recursion in both
make_ellipse4() in eto.c and (after adding max recursion test) in
paint_face() in manif.c:190
* mater -d information stored in the .g file doesn't survive a
garbage collection operation.
* fix checker.sh script and/or overlap GUI so that the latter will
read the resulting overlap pairings file from the prior.
alternatively, need to be able to run overlap check on server
without GUI, so could implement an overlaps file output option to be
run via mged -c.
* running 'put' on geometry that is already displayed results in a NaN
view (at least View and Eye_pos parameters are non) despite geometry
still being displayed. this causes 'rt' to fly into an infinite
loop, presumably trying to increment rays from the eye position.
* icv dpix support is not cross-platform (it writes out native, reads
in assuming same encoding). regression tests fail on big endian.
* creating an object with a slashes in the name (e.g., cp foo foo/R)
results in an object that cannot be deleted/renamed. bad behavior
presumably extends to any name with path separators.
* mirror command rejects brep solids and turns faces inside-out when
mirroring a comb with brep solids below it.
* rtsil command works if do what usage says and redirect output to
file, but mentions .pix when data is actually .bw; and using the -o
option results in a black image. it is also inconsistent, writing a
black silhouette on a white background, instead of black on white
and missing background color options.
* make sph sph
clone -i 1 -t 1000 0 0 -n 100 sph
kill sph
g line sph*
clone -i 1 -t 0 1000 0 -n 100 line
kill line
g square line*
clone -i 1 -t 0 0 1000 -n 100 square
... never returns ...
This should be merely 1M spheres, but something chokes. Could be
somewhere in the Tk layer. Maybe somewhere in the db layer. Maybe
something is corrupted by clone when it
* If we draw any form, then trace it using rt, then change of database
(by clicking file>open and selecting another database), badness
ensues. One report has quitting the rt window causing a segfault.
Another (confirmed) hung mged (stuck/inf loop).
* annotation bugs:
in sph1.s sph 0 0 0 10
in ann1.s annot 0 0 0 test1 10 10 3 1
in ann2.s annot 30 30 30 test2 40 40 3 1
# ann2.s's label looks wrong, points at origin?
in ann3.s annot 0 0 0 1 10 10 3 1
# using numbers for a label results in no label
* make eto eto
tol norm 1
facetize eto.bot eto
[crashes due to excessive recursion]
* crash in rt_bot_xform() due to a bot being marked as having face
normals, but didn't. bot probably written wrong via conversion
to/from obj or asc. found importing teapot.
* rtedge with perspective is wrong. it fills in nearly entire faces,
vertically in particular. it's worse on small sized renders, and
gets better the larger the render size (indicating there's some
neighbor distance coming into play that is not affected by
max_dist). eoes not happen in non-perspective ray-traces.
* a character is (still) sometimes captured by the cursor box. steps
to reproduce:
1) write a word on the mged command prompt ("e.g. hello")
2) select the word to end of line with mouse
3) paste the word (e.g., middle mouse) and press enter
4) type "hello" again and press enter
you should now see an "o" in the yellow cursor box. sometimes
you'll see the "o" after step 3. running "clear" resets the cursor.
* get_regions tcl command doesn't respond well to situations where
child object names in combs have dashes (the "-" character) in
names. It tries to interpret the dash as an argument delimiter.
Looks like this may be only in situations where the "-" is the
lead character and on Windows? Been hard to reproduce...
* dsp does not facetize correctly with zero elevation areas in the
data - need robustness improvements
* dsp primitives specifying data using Windows style file paths
don't work.
* attempting to create a dsp using a binary object caused a crash on
Linux - need to figure out if this was caused by feeding it the wrong
kind of binary object or some other error...
* screengrab on windows does not work
* Recursive submodel predictably goes infinite, need stack-based
db_walk_tree(): mged> in submodel submodel submodel grid test.g
* running rt -s20 -F file.pix ... does not result in an 20x20 image
being written out. it ends up being 512x512.
* running rt -C255/0/0 -o file.pix ... does not result in the
background color getting used. It does work with -F file.pix, going
through libfb instead of libicv.
* ogl display manager and framebuffer are creating windows with
transparent backgrounds (the glClear color is not being drawn) on
Linux. Presumably a driver-related issue, alpha channel, or expose
event issue. Inspecting further, it may be related to environments
where shmget() fails (or is requested via /dev/oglp) and we get
private memory -- looks like private memory is not initialized
(observed on Mac 10.6, Windows, and Ubuntu Linux using 7.26).
* rtedge's overlay mode appears to be generating different results on
Windows and Linux for the m35 steering wheel (rtwizard rendering
mode D.)
* pixdiff on Windows is reporting no differences with a pair of files
that pixcmp can see differences in.
@@ -300,6 +36,10 @@ Recent Bugs
pixborder -b "255 0 0" -t "255 255 255" < pix/moss.pix | pix-fb
* report that attempting to change units on a read-only file in MGED
will not change the units in the file but changes them in MGED,
resulting in problems with nirt missing geometry it shouldn't miss.
* typing 'comb -f -r assembly_name' shuts down mged with the error:
ERROR: bad pointer 0000000000B4CA50: s/b bu_external(x768dbbd0), was bu_vls(x89333bbb), file ..\..\..\brlcad_src\src\libbu\parse.c, line 2443"
And on the mged command line:
@@ -313,6 +53,9 @@ Recent Bugs
* wgl framebuffer is not lingering on windows (regardless of using
wgll or default) when it should
* nirt -e "xyz val val val" doesn't work due to the space after the -e
and how the nirt/rt commands parse quoted args.
* calling "attr set obj key value" should always result in key getting
set to value, no matter what, as it is the lowest-level attribute
management interface and what the command (correctly) documents.
@@ -325,6 +68,14 @@ Recent Bugs
* report of g-iges crashing (on Windows) when exporting a 1.2MB BoT
mesh (presumably imported via stl-g). worked for smaller models.
* ogl display manager and framebuffer are creating windows with
transparent backgrounds (the glClear color is not being drawn) on
Linux. Presumably a driver-related issue, alpha channel, or expose
event issue. Inspecting further, it may be related to environments
where shmget() fails (or is requested via /dev/oglp) and we get
private memory -- looks like private memory is not initialized
(observed on Mac 10.6).
* autoview [scale] isn't updating the wireframe when opening a
database, drawing geometry, then running autoview. the status bar
shows the scale change, but the graphics window remains unaffected
@@ -359,6 +110,9 @@ Recent Bugs
book-keeping is fuxored or the db_lookup is returning NULL (or isn't
yet performed).
* idents command is reporting a bogus region count in the region
output table listing (first column).
* src/librt/primitives/bot/g_bot_include.c:rt_bot_bbox() routine isn't
calculating the bbox correctly
@@ -367,6 +121,11 @@ Recent Bugs
* rtxray crashes if you specify a -o *.bw output file due to
assumptions in the rt front-end that all output files are .pix
* raytracing a revolved sketch seems to work fine, but rtarea and gqa
seem to be crashing on that same revolve. curiously, the brep
revolve from the csgbrep proc-db has the same failure as well as the
brep ehy.
* encountered a crash during rtarea on a (default) facetized version
of the hyp from the proc-db csgbrep tool.
@@ -381,6 +140,9 @@ Recent Bugs
* torus with a near zero inner diameter results in zero-length edges
during tessellation.
* opening a database in archer with the same name as a command doesn't
work.
* bu_log() with a width specifier does not align like printf().
Example: bu_log("%24s", str);
@@ -443,9 +205,13 @@ Recent Bugs
* edcomb command seems to be busted similar to red, doesn't seem to do
anything.
* gqa manpage has the wrong indentation on the options write-up.
* Detailed BoT model ray trace image had incorrect background pixel
values in framebuffer, off slightly by one.
* ogl display manager still crashes on attach in mged on Mac OS X 10.5
* rt is consuming 100% CPU in fb_close() on a lingering ogl
framebuffer waiting to close. needs to sleep or select for a while.
@@ -457,8 +223,15 @@ Recent Bugs
sub-1sec fps, Z/B after rotating wireframe but before update
finishes drawing.
* rtedge help shows redirection to a file working, but it does not
seem to work (zero-file results).
* report of rt aborting randomly on 64-bit with camo shader.
* mged raytrace fails with simple "raytrace failed" message when using
rt, nirt, etc. on Windows after modifying a region. See sf bug
report 2954404.
* mged rrt command is not respecting the view size, just does
something similar to autoview but even gets az/el wrong too.
@@ -473,12 +246,12 @@ Recent Bugs
* hyp tessellation routine creates bot that does not raytrace
* hyp used in a boolean with other objects (even unions) does not
raytrace
* if you attach a display manager in tk-mged, kill the window, then
quit, mged crashes on exit.
* CMD-b and CMD-f navigates the mged command window text widget on Mac
and trivially causes problems with the cursor and text injection.
* mged segfaults when drawing lots of solids at once (e.g. draw *.s)
* mged command mode doesn't display the output of multiple
@@ -514,6 +287,11 @@ Recent Bugs
display manager window. mged classic mode, where there is no
parent window, exhibits the bad rotate behavior immediately.
* rtedge fills in nearly entire faces of an object when executing on a
model that is in perspective mode. Effects really bad on small sized
renders, and gets better the larger the render size. Does not happen
in non-perspective ray-traces.
* infinite light sources close to objects result in unexpected/bad
light behavior. example is a 1m sph light about 5m from a box about
1k x 1k x 1k in size. setting make each light be red, green, and
@@ -558,10 +336,9 @@ Recent Bugs
* File->Export seems to not work on Windows
* xpush fails to properly create a hierarchy killing existing objects
resulting in dangling references. This may have been fixed by
r69256, but a model that exposes the issue has to be tested to be
sure.
* xpush fails to properly create a hierarchy leaving some as top-level
objects and killing other existing objects resulting in dangling
references.
* mged on Mac OS X will crash on an X11 call if compiled against
system Tcl/Tk (at least on 10.4 linking against 8.4), see TODO
@@ -638,6 +415,8 @@ Recent Bugs
* overlap tool in mged encourages very inefficient CSG operations
(e.g. a simple bolt with an entire hull armor subtracted)
* a character is (still) sometimes captured by the cursor box
* permute (in mged) requires apply or save before 'new' vertex values
will function properly as keypoints.
@@ -678,6 +457,13 @@ Recent Bugs
* triangulation of some pipe in toyjeep.g fails (rather reliably) on
some given bend. fails in nmg_triangulate model().
* tgc reports one hit errors though hit point has 0,0,0 direction
implying that maybe the point was supposedly deleted.
* rtedge is not respecting the -c"set" options. needs to give some
indication that they were parsed too since it ignores unrecognized
values apparently.
* fbhelp sends some of the output to stdout and some to stderr...
* debugbu 2 immediately reports a bu_vls_free() error.. apparently
@@ -699,6 +485,8 @@ Recent Bugs
* wavelet isn't working correctly on a simple image decomposition &
reconstruction.
* query_ray can't find nirt if not installed
* fbed is looking for /usr/lib/vfont/nonie.r.12
* mged doesn't check if html_dir does not exist when searching for
@@ -755,8 +543,16 @@ Recent Bugs
* an underlay framebuffer does not underlay with shaded mode
* rtweight chokes on a .density file that has less than 3 values per
line (infinite loop). also gives infinite areas when presented with
an empty .density file.
* rtarea gives incorrect areas when using -H hypersample flag
* rtweight/gqa volumes seem wrong with simple sphere test case, with
values consistently and quickly converging less than the actual
volume regardless of the grid size.
* setting src/librt/db5_io.c's AVS_ADD off in db5_import_attributes
causes bad things to happen and it really shouldn't.
+201 -849
View File
File diff suppressed because it is too large Load Diff
+2526 -1872
View File
File diff suppressed because it is too large Load Diff
+7 -4
View File
@@ -26,8 +26,8 @@ License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this file. If you did not, please contact one of
the BRL-CAD project administrators listed at the Github project
site https://github.com/BRL-CAD/brlcad/ or listed in the AUTHORS file
the BRL-CAD project administrators listed at the SourceForge project
site http://sf.net/projects/brlcad/ or listed in the AUTHORS file
included as part of the distribution.
Overview
@@ -80,7 +80,10 @@ When referring to BRL-CAD, its source code, documentation, and
libraries, the reference is not meant to include or imply 3rd party
source code, libraries, and/or applications unless specifically stated
otherwise. No endorsement or claim of authorship is implied to any
3rd party asset that is included with BRL-CAD.
3rd party asset that is included with BRL-CAD. The majority of the
3rd party source code, libraries, and applications included with
BRL-CAD are located in the src/other/ directory of the source code
distribution.
Copyright
---------
@@ -98,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-2025 United States Government as represented by
Copyright (c) 1984-2016 United States Government as represented by
the U.S. Army Research Laboratory.
Contact
+15
View File
@@ -0,0 +1,15 @@
## This file should be placed in the root directory of your project.
## Then modify the CMakeLists.txt file in the root directory of your
## project to incorporate the testing dashboard.
##
## # The following are required to submit to the CDash dashboard:
## ENABLE_TESTING()
## INCLUDE(CTest)
set(CTEST_PROJECT_NAME "BRL-CAD")
set(CTEST_NIGHTLY_START_TIME "06:00:00 UTC")
set(CTEST_DROP_METHOD "http")
set(CTEST_DROP_SITE "brlcad.org")
set(CTEST_DROP_LOCATION "/CDash/submit.php?project=BRL-CAD")
set(CTEST_DROP_SITE_CDASH TRUE)
+43403 -686
View File
File diff suppressed because it is too large Load Diff
+218 -321
View File
@@ -263,6 +263,10 @@ routines needed for the manipulation and analysis of Non-Uniform
Rational BSpline based boundary representations.
Depends on: libbg libbn libbu OpenNURBS
libcursor: The cursor library is a lightweight cursor manipulation
library similar to curses but with less overhead.
Depends on: termlib
libdm: The display manager library contains the logic for generalizing
a drawable context. This includes the ability to output
drawing/plotting instructions to a variety of devices such as X11,
@@ -281,6 +285,13 @@ libfft: The Fast-Fourier Transform library is a signal processing
library for performing FFTs or inverse FFTs efficiently.
Depends on: libm
libmultispectral: The multispectral optics library is a separate
compilation mode of the optics library where support for additional
bands of energy are added. By providing a defined spectrum of energy,
the raytrace library will produce different signal analyses for a
given set of geometry.
Depends on: librt libbn libbu libtcl
liboptical: The optical library is the basis for BRL-CAD's shaders.
This includes shaders such as the Phong and Cook-Torrence lighting
models, as well as various visual effects such as texturing, marble,
@@ -297,6 +308,10 @@ libtclcad: The Tcl-CAD library is a thin interface that assists in the
binding of an image to a Tk graphics context.
Depends on: libbn libbu libfb libtcl libtk
libtermio: The terminal I/O library is a TTY control library for
managing a terminal interface.
Depends on nothing
libwdb: The "write database" library provides a simple interface for
the generation of BRL-CAD geometry files supporting a majority of the
various primitives available as well as combination/region support.
@@ -376,6 +391,8 @@ details on subdirectories and authorship not covered here.
Write database library
src/mged/
Multi-device geometry editor
src/other/
External frameworks (Tcl/Tk, libpng, zlib, etc.)
src/proc-db/
Procedural geometry tools, create models programmatically
src/remrt/
@@ -392,33 +409,30 @@ SOURCE CODE LANGUAGES
The vast majority of BRL-CAD is written in ANSI C with the intent to
be strictly conformant to the C standard. A majority of the MGED
geometry editor is written in a combination of C, Tcl/Tk, and Incr
Tcl/Tk. The BRL-CAD Benchmark and utility scripts are written in what
should be POSIX-compliant Bourne Shell Script. The build system uses
the CMake build tool. An initial implementation of a BRL-CAD Geometry
Server is written in PHP.
Tcl/Tk. The BRL-CAD Benchmark, build system, and utility scripts are
written in what should be POSIX-compliant Bourne Shell Script. An
initial implementation of a BRL-CAD Geometry Server is written in PHP.
With release 7.38, BRL-CAD intends to conform strictly with the
following ANSI/ISO standards for C and C++ language compilation:
With release 7.0, BRL-CAD has moved forward and worked toward making
all of BRL-CAD C code conform strictly with the ANSI/ISO standard for
C language compilation (ISO/IEC 9899:1990, i.e. c89). Support for
older compilers and older K&R-based system facilities is being
migrated to build system declarations, preprocessor defines, or being
removed outright. It's okay to make modifications that assume
compiler conformance with the ANSI C standard (c89).
C : ISO/IEC 9899:2011, i.e. C11
C++: ISO/IEC 14882:2017, i.e. C++17
There is currently no C++ interface to the core BRL-CAD libraries.
There are a few tools and enhancements to libraries that are
implemented in C++ (the new BREP object type in librt, for example),
and C++ is used underneath quite a number of libraries, but there is
presently no public C++ API in use outside of OpenNURBS.
Support for use of necessary non-standard system facilities is
handled by build system declarations and preprocessor defines driven
by build configuration tests. The working feature set for normal
development should be widely supported C++17 features and the subset
of C11 that is also valid (and widely supported) C++17.
C++ is used as an implementation language within libraries, but there
are no public C++ APIs in use outside of OpenNURBS. For new work,
public library APIs should expose only C function calls and data
except in very specific cases (should be discussed with the
development team ahead of time to get consensus on the necessity.)
There is a C++ interface to the core BRL-CAD libraries called MOOSE
that is maintained in a separate repository. It is developed with
separation in order to avoid mixing C++ semantics into existing APIs
and to ensure clean separation of responsibilities and modularity.
While C++ as an implementation language of new tools and new library
interfaces is not prohibited, the mixing of C++ semantics and C++ code
(including simple // style comments) in the existing C files is not
allowed. As new interfaces are developed, new contributors become
involved, and C++ code integration becomes more prevalent, the
contributor guidelines will become reinforced with more details.
CODING STYLE & STANDARDS
@@ -453,10 +467,12 @@ colocated with any corresponding source files.
Header files private to a library go into that library's directory.
Public header files go into the include/ directory on the top level.
Public header files should not include any headers that are private.
Headers should include any other headers required for correct parsing.
Public header files should not include the common header.
Headers should include any other headers that they require for correct
parsing (this is an on-going clean-up effort). Public header files
should not include the common header.
Headers should generally be included in a particular order:
Headers should be included in a particular order. That order is
generally as follows:
- any single "interface" header [optional]
- the common header (unless the interface header includes it)
@@ -467,15 +483,13 @@ Headers should generally be included in a particular order:
Applications may optionally provide an interface header that defines
common structures applicable to most or all files being compiled for
that application. That interface header will generally be the first
file to be included as it usually includes the common header and
system headers.
The common header should always be included before any system header.
Standard system headers should be included before library system
headers. Headers should be written to be self-contained, not
requiring other headers be included. If another header is necessary
for a header to function correctly, it should include it.
file to be included, as it usually includes the common header and
system headers. The common header should always be included before
any system header. Standard C system headers should be included
before library system headers. Headers should be written to be
self-contained, not requiring other headers to be necessarily included
before they may be used. If another header is necessary for a header
to function correctly, it should include it.
Build System:
@@ -504,15 +518,11 @@ system headers.
Language Compliance:
Features of C that conform to the ISO/IEC 9899:2011 C standard (C11)
and the ISO/IEC 14882:2011 C++ standard (C++11) are generally the
baseline for strict language conformance, with the caveat that
features deprecated in subsequent standards or not widely/reliably
implemented on OS/compiler platforms targeted by BRL-CAD should be
avoided. When writing in C coders should keep their code within the
subset of C shared by the C and C++ standards - while not currently
strictly enforced, full C++ only build support is a long term project
goal.
Features of C that conform to the ISO/IEC 9899-1990 C standard (C90)
are generally the baseline for strict language conformance. As
BRL-CAD used to be K&R syntax conformant, there remains an on-going
effort to ensure a full conversion to a standards compliant ISO C
implementation.
Code Conventions:
@@ -538,7 +548,7 @@ math for portability and performance reasons. When floating point
comparisons are necessary, use the NEAR_EQUAL and NEAR_ZERO macros
with a specified tolerance or the EQUAL and ZERO macros where a
tolerance is indeterminate (all the macros are available by including
vmath.h). Examples:
bn.h, part of libbn). Examples:
For known tolerances:
@@ -559,27 +569,17 @@ variables should be utilized instead of the standard C facility:
bu_malloc() instead of malloc()
bu_calloc() instead of calloc()
bu_realloc() instead of realloc()
bu_fgets() instead of fgets()
bu_free() instead of free()
bu_log() instead of printf()
bu_bomb() instead of abort()
bu_exit() instead of printf()+exit()
bu_snooze() instead of sleep(), usleep(), nanosleep()
bu_dirname() instead of dirname()
bu_getopt() instead of getopt()
bu_opterr instead of opterr
bu_optind instead of optind
bu_optopt instead of optopt
bu_optarg instead of optarg
bu_file_delete() instead of unlink(), rmdir(), and remove()
bu_path_basename() instead of basename()
bu_path_dirname() instead of dirname()
bu_path_match() instead of fnmatch()
bu_log() instead of printf()
bu_fgets() instead of fgets()
bu_sort() instead of qsort()
bu_strdup() instead of strdup()
bu_strlcat() instead of strcat(), strncat(), and strlcat()
bu_strlcpy() instead of strcpy(), strncpy(), and strlcpy()
@@ -587,6 +587,8 @@ variables should be utilized instead of the standard C facility:
bu_strcasecmp() and BU_STR_EQUIV() instead of stricmp()/strcasecmp()
bu_strncmp() instead of strncmp()
bu_strcasecmp() instead of strnicmp()/strncasecmp()
bu_file_delete() instead of unlink(), rmdir(), and remove()
bu_sort() instead of qsort()
Similarly, ANSI C functions are preferred over the BSD and POSIX
interfaces. The following functions should be used:
@@ -616,7 +618,7 @@ the end of the file:
* indent-tabs-mode: t
* c-file-style: "stroustrup"
* End:
* ex: shiftwidth=4 tabstop=8 cino=N-s
* ex: shiftwidth=4 tabstop=8
*/
In emacs, the 'indent-region' command (bound to C-M-\ by default)
@@ -807,7 +809,7 @@ DOCUMENTATION
BRL-CAD has extensive documentation in various formats and presently
maintained in various locations. It is an on-going desire and goal of
the project to have all documentation located along with the source
code in our Git repository.
code in our Subversion (SVN) repository.
In line with that goal and where beneficial, a large portion of the
tutorial documentation is being converted to the DocBook XML format.
@@ -828,16 +830,19 @@ it better?" and add documentation accordingly.
All public library functions and most private or application functions
should be appropriately documented using Doxygen/Javadoc style
comments. This minimally means that you need to add an additional
asterisk to a comment that precedes your functions. Public functions
must be exported and imported using per-library macros that precede
public symbol declarations (e.g., BU_EXPORT int func();). Example:
comments. Without getting into the advanced details, this minimally
means that you need to add an additional asterisk to a comment that
precedes your functions:
/**
* Computes the answer to the meaning of life, the universe, and
* everything.
*/
MYLIB_EXPORT int mylib_function();
int
the_answer(void)
{
return 42;
}
TESTING & DEBUGGING
@@ -896,7 +901,7 @@ binaries in the path/to/builddir/src/libbu/tests build directory.
A profile build, useful for some types of performance inspection
(e.g., gprof) but not enabled by default, may be specified via:
cmake .. -DBRLCAD_PROFILING=ON
cmake .. -DBRLCAD_ENABLE_PROFILING=ON
Debug symbols are enabled by default, even for installation, for all
libraries and binaries in order to facilitate diagnosing and
@@ -917,27 +922,27 @@ gdb> backtrace
PATCH SUBMISSION GUIDELINES
---------------------------
To contribute to BRL-CAD, begin by submitting pull requests to the
GitHub project at https://github.com/BRL-CAD/brlcad.
To contribute to BRL-CAD, begin by submitting modifications to the
patches section at http://sf.net/projects/brlcad/. Patches in the
unified diff format (diff -u) are generally preferred when modifying
existing source or other text files. Otherwise, contributors are
welcome to submit their changes in full to the patches tracker as
compressed file attachments.
For an introduction to the standard GitHub workflow for forking and
submitting pull requests, see:
All text patches should be submitted in the unified diff format where
it's feasible to create one either using SVN or using the unmodified
original file. This is generally the "-u" option to diff, and is also
supported by the SVN diff command:
https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project
https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/working-with-forks
svn diff > mychanges.patch
While working in your fork to prepare your pull request, remember to
frequently sync with upstream sources. BRL-CAD uses an active main
branch for most of its ongoing work, so this syncing process is
particularly important when working with BRL-CAD. Patches need to be
based on the latest sources and avoid reverting improvements that have
been added to the upstream sources since your fork was created.
Although the GitHub pull request based workflow is recommended and
preferred, if for any reason you cannot use GitHub you may also
submit "git format-patch" patches through other channels. See:
https://git-scm.com/docs/git-format-patch
Where possible, patch files should be generated against the latest
sources available to make it easier to review and apply the changes.
If a modification involves the addition or removal of files, those
files can be provided separately with instructions on where they
belong (or what should be removed). If SVN cannot be used, please
provide the complete release and build number of the files you worked
with.
ANY MODIFICATIONS THAT ARE PROVIDED MUST NOT MODIFY OR CONFLICT WITH
THE EXISTING "COPYING" FILE DISTRIBUTION REQUIREMENTS. This means
@@ -946,8 +951,7 @@ asked to only provide patches that may legally be incorporated into
BRL-CAD under the existing distribution provisions described in the
COPYING file.
Patches that are difficult to apply and/or review are difficult to
accept.
Patches that are difficult to apply are difficult to accept.
BUGS & UNEXPECTED BEHAVIOR
@@ -955,9 +959,9 @@ BUGS & UNEXPECTED BEHAVIOR
When a bug or unexpected behavior is encountered that cannot be
quickly fixed, it needs to be documented in our BUGS file or more
formally reported to the GitHub issues tracker at:
formally reported to the SourceForge bug tracker at:
https://github.com/BRL-CAD/brlcad/issues
http://sourceforge.net/tracker/?atid=640802&group_id=105292&func=browse
The tracker is the main source for user-reported bugs and/or any
issues that require significant discussion or benefit from having
@@ -987,7 +991,7 @@ access to be granted:
3) Join the brlcad-devel developer mailing list, introduce yourself.
4) Create a GitHub account, submit at least pull requests that
4) Create a SourceForge account, submit at least two patches that
demonstrate competency with our coding style, apply flawlessly, and
provide some significant improvement.
@@ -1017,12 +1021,11 @@ expectations. To summarize some of the expected responsibilities:
help, or at least to do no harm. Be helpful and respectful.
1) Developers are expected to uphold the quality, functionality,
maintainability, security, and portability of the source code at all
times. In part, this means that changes should be tested to avoid
breaking the build and short-term fixes are discouraged. Committing
code that is actively being worked on is encouraged but care should be
taken to minimize impact on others and to respond quickly when an
issue arises.
maintainability, and portability of the source code at all times. In
part, this means that changes should be tested to avoid breaking the
build and short-term fixes are discouraged. Committing code that is
actively being worked on is encouraged but care should be taken to
minimize impact on others and to respond quickly when an issue arises.
2) Bugs, typos, and compilation errors are to be expected as part of
the process of active software development and documentation, but it
@@ -1034,12 +1037,6 @@ in resolving the issue promptly. It is the responsibility of all
developers to address issues as they are encountered regardless of who
introduces the problem.
To assist developers in these efforts, BRL-CAD utilizes Continuous
Integration (CI) testing via the GitHub Actions infrastructure to
monitor code health: https://github.com/BRL-CAD/brlcad/actions
Under normal conditions, all developers should strive to keep all
GitHub Actions tests passing.
3) Contributors making commits to the repository are required to
uphold the legal conventions and requirements summarized in the
COPYING file. This includes the implicit assignment of copyright to
@@ -1082,7 +1079,10 @@ number follows a common convention where the three numbers represent:
{MAJOR_VERSION}.{MINOR_VERSION}.{PATCH_VERSION}
All "development" builds use an odd number for the minor version. All
"release" builds use an even number for the minor version.
"release" builds use an even number for the minor version. Patched
versions should include a release count:
{MAJOR_VERSION}.{MINOR_VERSION}.{PATCH_VERSION}[-{RELEASE_COUNT}]
The MAJOR_VERSION should only increment when it is deemed that a
significant amount of major changes have accumulated, new features
@@ -1104,13 +1104,9 @@ backwards incompatible in some manner should increment the patch
version number.
If it becomes necessary to update a posted release, use and increment
the AMEND_COUNT format outlined below. The first posted release is
implicitly the "-0" release (e.g., 7.10.2 is implicitly 7.10.2-0) with
subsequent updated releases incrementing the count (e.g., 7.10.2-1).
See the "AMENDING A RELEASE" section below for guidelines on when a
release should be amended in lieu of a new PATCH_VERSION release.
{MAJOR_VERSION}.{MINOR_VERSION}.{PATCH_VERSION}[-{AMEND_COUNT}]
the RELEASE_COUNT. The first posted release is implicitly the "-0"
release count (e.g., 7.10.2 is implicitly 7.10.2-0) with subsequent
updated releases incrementing the count (e.g., 7.10.2-1).
NAMING A SOURCE RELEASE
@@ -1204,35 +1200,33 @@ necessary convention by a binary package management system. Examples:
zip
AMENDING A RELEASE
PATCHING A RELEASE
------------------
Should it become necessary to modify a release after it has been
tagged, uploaded, and announced, a release amendment may be issued.
Releases that are neither tagged, uploaded, or announced are subject
to at-will change and re-tagging.
Amendments to source releases are expressed as a sequence of one or
more patch files that are to be applied sequentially. Patch files may
be descriptively named but must be incrementally numbered. The
uploaded release notes and/or README file(s) should instruct users
building from source to download and apply all available patch files
in order.
Should it become necessary to patch a release that has already been
posted and announced, the mechanism is to post patch files for the
source release and update the uploaded release notes README file.
Example: stop_rt_crashing-0.patch and fix_fbserv-1.patch
For binary builds, it's recommended to just "move on" and let issues
It's expected that all patch files are independent and will be applied
sequentially. They should be consistently and incrementally numbered.
Users should be instructed in the release notes README to download and
apply all available patch files.
For binary releases, it's recommended to just "move on" and let issues
become resolved in the next release unless there's a critical security
or data corruption issue involved. That said, binary releases may be
re-posted with a modified name per the convention described in VERSION
NUMBERS & COMPATIBILITY.
or significant data corruption issue involved. If it becomes
necessary to repost a release, use the RELEASE_COUNT file name
convention described in VERSION NUMBERS & COMPATIBILITY.
Example: BRL-CAD_7.12.2.dmg is superseded by BRL-CAD_7.12.2-1.dmg
Example: BRL-CAD-7.12.2.dmg is superseded by BRL-CAD-7.12.2-1.dmg
Older binary releases may be moved to the hidden attic folder, though
not necessary or recommended except where critical vulnerabilities are
involved. Releases are preserved for historic record and should never
be deleted once announced.
Patched binary releases may be moved to the hidden attic folder if
critical, though not necessary or recommended. They are preserved for
historic record and should never be deleted once announced. Releases
not yet been announced may be updated within two days of being posted
without involving a patch.
MAKING A RELEASE
@@ -1258,89 +1252,43 @@ Release steps are as follows:
#####################################################################
# 00: Notify developer mailing list of intention to release.
echo "Release preparations are under way. Trunk sources merged to the RELEASE branch will be reviewed for sync to STABLE and release tagging. Please help test by compiling distcheck and running benchmark, mged, and archer." | mail -s "Release preparations commencing" brlcad-devel@lists.sourceforge.net -r "your@subscribed.address"
echo "Release preparations are under way. Trunk sources merged to the RELEASE branch will be reviewed for sync to STABLE and release tagging. Please help test by compiling distcheck-full and running benchmark, mged, and archer." | mail -s "Release preparations commencing" brlcad-devel@lists.sourceforge.net -r "your@subscribed.address"
#####################################################################
# 01: Sync main to RELEASE branch.
# 01: Sync trunk to RELEASE branch.
git clone git@github.com:BRL-CAD/brlcad.git
cd brlcad
git checkout RELEASE
# NON-AUTO: Review the log and obtain the last trunk merge
# revision number from comments.
svn log --stop-on-copy https://svn.code.sf.net/p/brlcad/code/brlcad/branches/RELEASE | grep -E 'r[0-9]{5}'
PREV=[[last_trunk_rev]]
echo "PREV=$PREV"
# NOTE - it is not strictly necessary to use the strategy-option,
# but barring some specific reason not to the goal will be to
# have RELEASE match the contents of main. The "theirs"
# strategy option helps simplify that process.
git merge --strategy-option theirs main
# NON-AUTO: The merge may succeed without conflicts. If
# not, you will see the message:
#
# Automatic merge failed; fix conflicts and then commit the result.
#
# To see what the problem was, use git status:
git status
On branch RELEASE
Your branch is ahead of 'origin/RELEASE' by 1 commit.
(use "git push" to publish your local commits)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
[list of cleanly merged changes]
Unmerged paths:
(use "git add <file>..." to mark resolution)
[list of conflict files]
# The unmerged files must be inspected and their final form
# decided upon. This can be done manually by editing the
# files to put them in their desired final state and using
# "git add" to mark them resolved, but it is usually more
# convenient and less error prone to use the git mergetool
# command with one of a number of tools designed for merge
# work. For users new to this process practicing on a
# throw-away copy of the repository is recommended before
# doing a merge in earnest.
#
# See https://git-scm.com/docs/git-mergetool for details
#
# Some commonly used mergetool options:
# [meld] https://meldmerge.org/help/resolving-conflicts.html
# [vimdiff] https://gist.github.com/karenyyng/f19ff75c60f18b4b8149
git mergetool
svn co svn://svn.code.sf.net/p/brlcad/code/brlcad/branches/RELEASE brlcad.RELEASE
cd brlcad.RELEASE
svn merge https://svn.code.sf.net/p/brlcad/code/brlcad/trunk@$PREV https://svn.code.sf.net/p/brlcad/code/brlcad/trunk@HEAD .
#####################################################################
# 02: Test the merge.
mkdir -p .build && cd .build
cmake .. -DENABLE_ALL=ON -DCMAKE_BUILD_TYPE=Release && make
cmake .. -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release && make
# NON-AUTO: Manually check rt, mged, and archer.
# Manually check rt, mged, and archer.
bin/rt # should report usage with correct library versions
bin/mged -c test.g "make sph sph ; draw sph ; rt ; after 1000 ; l sph" # create, view and list info about a sphere
bin/mged # displays gui, run: opendb [file join [bu_dir init] test.g] ; draw sph ; rt
bin/archer # displays gui, run: opendb <path to your build dir>/test.g ; draw sph ; rt
bin/mged -c test.g "make sph sph ; draw sph ; rt" # pops up a sphere
bin/mged # displays gui, run: opendb test.g ; draw sph ; rt
bin/archer # displays gui, run: opendb test.g ; draw sph ; rt
# clean up
cd .. && rm -rf .build
#####################################################################
# 03: Commit the merge (if necessary).
# 03: Commit the merge.
# Note - we don't push the merge at this stage, since we
# will be using the upstream RELEASE branch when we generate a
# ChangeLog file.
CURR=`svn log --xml https://svn.code.sf.net/p/brlcad/code/brlcad/trunk | grep 'revision=' | head -n 1 | sed 's/.*="\([0-9][0-9]*\)".*/\1/g'`
echo "CURR=$CURR"
# If merge conflict resolution was needed, make a merge commit:
MSHA1=$(git log -1 main --pretty=format:"%h")
echo $MSHA1
git commit -m "merge of main $MSHA1 to RELEASE branch"
svn commit -m "merge of trunk to RELEASE branch, r$PREV through r$CURR"
#####################################################################
# 04: Reprioritize or address remaining TODO items.
@@ -1354,18 +1302,9 @@ Release steps are as follows:
# NON-AUTO: Verify all interface changes are in CHANGES.
# NON-AUTO: Verify usage/options are documented in doc/.
# A useful trick for this step is to use gitk to display all
# commits made since the last time the RELEASE branch was
# updated:
gitk --no-merges origin/RELEASE..RELEASE
#####################################################################
# 06: Update the version numbers.
# NOTE - BRLCAD_VERSION_AMEND may also be defined during CMake
# for an amendment build.
# NON-AUTO: NEWS
# NON-AUTO: README
# NON-AUTO: include/conf/PATCH
@@ -1375,115 +1314,59 @@ Release steps are as follows:
# NON-AUTO: misc/macosx/Resources/Welcome.rtfd/TXT.rtf
#####################################################################
# 07: Create branch for release in bext repository.
# 07: Update ChangeLog. Use the YYYY-MM-DD of previous NEWS entry.
MAJOR=`awk '{print $1}' include/conf/MAJOR`
MINOR=`awk '{print $1}' include/conf/MINOR`
PATCH=`awk '{print $1}' include/conf/PATCH`
cd ..
git clone git@github.com:BRL-CAD/bext.git
cd bext
git checkout RELEASE
git branch rel-$MAJOR-$MINOR-$PATCH
git checkout rel-$MAJOR-$MINOR-$PATCH
git push --set-upstream origin rel-$MAJOR-$MINOR-$PATCH
cd ../brlcad
LAST=`grep -E "\--- [0-9]{4}-[0-9]{2}-[0-9]{2}" NEWS | head -n 2 | tail -n 1 | awk '{print $2}'`
echo "LAST=$LAST"
LAST=r57446
svn2cl --break-before-msg --include-rev --stdout -r HEAD:{$LAST} > ChangeLog
svn commit -m "update log with commits through $LAST" ChangeLog
#####################################################################
# 08: Update the bext submodule in BRL-CAD's main repository.
# 08: Run distcheck-full on at least two platforms.
# NON-AUTO: Update BEXT_SHA1 hash in CMakeLists.txt (argument
# to brlcad_bext_init function). If already pointing to the
# sha1 being used for the bext rel-$MAJOR-$MINOR-$PATCH branch
# this is a no-op - otherwise, commit the update.
git add CMakeLists.txt
git commit -m "Update bext submodule to SHA1 <hashval>"
mkdir -p .build && cd .build && cmake .. && make distcheck-full
#####################################################################
# 09: Update ChangeLog.
# 09: Sync RELEASE to STABLE branch:
# We have held off pushing to upstream RELEASE branch until now,
# so we can use that as an anchor point from which to start the
# ChangeLog logging. If for some reason that won't work, replace
# origin/RELEASE with the sha1 of the previous release's final
# commit in the RELEASE branch.
# NON-AUTO: Review the log and obtain the last merge revision
# number from comments.
svn log --stop-on-copy https://svn.code.sf.net/p/brlcad/code/brlcad/branches/STABLE | less
PREV=[[last_trunk_rev]]
### OR ###
PREV=`svn log --xml --stop-on-copy https://svn.code.sf.net/p/brlcad/code/brlcad/branches/STABLE | grep 'revision=' | head -n 1 | sed 's/.*revision="\([0-9][0-9]*\)".*/\1/g'`
echo "PREV=$PREV"
# We do this instead of date based logging to capture commits that
# may have been originally made before the last release (i.e. older
# commits made in a fork and incorporated into the history via PR)
git log origin/RELEASE..RELEASE > ChangeLog
git add ChangeLog
git commit -m "Update log with commits being incorporated into rel-$MAJOR-$MINOR-$PATCH"
# Now that we have updated the ChangeLog, push the changes to
# upstream RELEASE branch.
git push
# merge that range of changes into STABLE
svn co https://svn.code.sf.net/p/brlcad/code/brlcad/branches/STABLE brlcad.STABLE && cd brlcad.STABLE
svn merge https://svn.code.sf.net/p/brlcad/code/brlcad/branches/RELEASE@$PREV https://svn.code.sf.net/p/brlcad/code/brlcad/branches/RELEASE@HEAD .
#####################################################################
# 10: Run distcheck on at least two platforms.
mkdir -p .build && cd .build && cmake .. && make distcheck
#####################################################################
# 11: Sync RELEASE to STABLE branch:
# NON-AUTO: Update the NEWS release date for the current release to today's date
git add NEWS
MAJOR=`awk '{print $1}' include/conf/MAJOR`
MINOR=`awk '{print $1}' include/conf/MINOR`
PATCH=`awk '{print $1}' include/conf/PATCH`
UTCDATE=$(date -u)
git commit -m "Finalize $MAJOR.$MINOR.$PATCH release date ($UTCDATE)"
# merge RELEASE into STABLE.
git checkout STABLE
git merge --strategy-option theirs RELEASE
# NON-AUTO: Resolve any conflicts as before, although note that
# the intent is usually for STABLE to match RELEASE so normally
# the resolution will be to make STABLE match the state of RELEASE
#####################################################################
# 12: If there are any differences between RELEASE and STABLE trees,
test the merge. In normal usage STABLE should match RELEASE,
so this is only necessary in unusual circumstances. To check
if there are any differences, use git diff:
git diff RELEASE STABLE
# NON-AUTO: If differences were observed, either correct them
# or (if expected) test:
# 10: Test the merge.
mkdir .merge && cd .merge
cmake .. -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release && make distcheck && cd .. && rm -rf .merge
cmake .. -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release && make distcheck-full && cd .. && rm -rf .merge
#####################################################################
# 13: Let upstream know about the new state of STABLE.
# 11: Commit the merge.
# If merge conflict resolution was needed, make a merge commit:
RSHA1=$(git log -1 RELEASE --pretty=format:"%h")a
echo $RSHA1
git commit -m "merge of RELEASE $RSHA1 to STABLE branch"
CURR=`svn log --xml https://svn.code.sf.net/p/brlcad/code/brlcad/branches/RELEASE | grep 'revision=' | head -n 1 | sed 's/.*="\([0-9][0-9]*\)".*/\1/g'`
echo "CURR=$CURR"
# Let upstream know what has changed
git push
svn commit -m "merging RELEASE branch to STABLE branch, r$PREV through r$CURR"
#####################################################################
# 14: Tag the release using "rel-MAJOR-MINOR-PATCH" format:
# 12: Tag the release using "rel-MAJOR-MINOR-PATCH" format:
MAJOR=`awk '{print $1}' include/conf/MAJOR`
MINOR=`awk '{print $1}' include/conf/MINOR`
PATCH=`awk '{print $1}' include/conf/PATCH`
echo "Tagging rel-$MAJOR-$MINOR-$PATCH"
UTCDATE=$(date -u)
git tag -a rel-$MAJOR-$MINOR-$PATCH -m "Tag rel-$MAJOR-$MINOR-$PATCH ($UTCDATE)"
git push origin rel-$MAJOR-$MINOR-$PATCH
svn cp https://svn.code.sf.net/p/brlcad/code/brlcad/branches/STABLE https://svn.code.sf.net/p/brlcad/code/brlcad/tags/rel-$MAJOR-$MINOR-$PATCH
#####################################################################
# 15: Increment and commit the next BRL-CAD release numbers.
# 13: Increment and commit the next BRL-CAD release numbers to SVN.
# Update the include/conf/(MAJOR|MINOR|PATCH) version files
# immediately to odd-numbered minor version or new patch developer
@@ -1493,47 +1376,64 @@ Release steps are as follows:
echo "`expr $PATCH + 1`" > include/conf/PATCH
NEXT="`expr $PATCH + 2`"
perl -pi -e "s/Release [0-9]+\.[0-9]+\.[0-9]+/Release $MAJOR.$MINOR.$NEXT/" README
# TODO - this doesn't seem to work, at least on Linux?
#EXPR="s/(@---[[:space:]@-]*[0-9]{4}-)([0-9]{2}-[0-9]{2})([[:space:]]*Release[[:space:]]*${MAJOR}\.${MINOR}\.)(${PATCH})([[:space:]@-]*-@)/\$1XX-XX\${3}${NEXT}\$5@* TBD@@\1\2\3\4\5/"
#cat NEWS | tr '\n' '@' | perl -pi -e "$EXPR" | tr '@' '\n' > NEWS
git add include/conf/PATCH README NEWS
git commit -m "Bump to next development revision after tagging the $MAJOR.$MINOR.$PATCH release"
git push
EXPR="s/(@---[[:space:]@-]*[0-9]{4}-)([0-9]{2}-[0-9]{2})([[:space:]]*Release[[:space:]]*${MAJOR}\.${MINOR}\.)(${PATCH})([[:space:]@-]*-@)/\$1XX-XX\${3}${NEXT}\$5@* TBD@@\1\2\3\4\5/"
cat NEWS | tr '\n' '@' | perl -pi -e "$EXPR" | tr '@' '\n' > NEWS
svn commit -m "bump to next development revision after tagging the $MAJOR.$MINOR.$PATCH release" ../include/conf/PATCH
#####################################################################
# 16: Sync RELEASE changes back to main.
# 14: Sync RELEASE changes back to trunk.
git checkout main
git merge RELEASE
# NON-AUTO - resolve any conflicts
# If merge conflict resolution was needed, make a merge commit:
RSHA1=$(git log -1 RELEASE --pretty=format:"%h")a
echo $RSHA1
git commit -m "merge of RELEASE $RSHA1 to main branch"
git push
# Work-in-progress
#####################################################################
# 17: Obtain a tagged version of the sources from the repository, make
# 15: Obtain a tagged version of the sources from the repository, make
# final distribution tarballs:
git checkout rel-$MAJOR-$MINOR-$PATCH
mkdir .build && cd .build
cmake .. -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release && make distcheck
svn checkout https://svn.code.sf.net/p/brlcad/code/brlcad/tags/rel-$MAJOR-$MINOR-$PATCH brlcad-$MAJOR.$MINOR.$PATCH
cd brlcad-$MAJOR.$MINOR.$PATCH-build && mkdir .build && cd .build
cmake .. -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release && make distcheck-full
#####################################################################
# 18: Upload the source distributions and release notes. Use source
# 16: Upload the source distributions and release notes. Use source
# tarballs to create binaries.
------------- TODO - need new procedures for GitHub... ------------
# create a shell session and source dir
SFUSERNAME=`ls ~/.subversion/auth/svn.simple/* | xargs -n 1 grep -A4 sourceforge | tail -1`
echo "SFUSERNAME=$SFUSERNAME MAJOR=$MAJOR MINOR=$MINOR PATCH=$PATCH"
ssh -v $SFUSERNAME,brlcad@shell.sf.net create
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/b/br/brlcad/BRL-CAD\ Source/$MAJOR.$MINOR.$PATCH"
# create binary dirs (as needed)
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/b/br/brlcad/BRL-CAD\ Runtime\ Libraries/$MAJOR.$MINOR.$PATCH"
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/b/br/brlcad/BRL-CAD\ for\ BSD/$MAJOR.$MINOR.$PATCH"
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/b/br/brlcad/BRL-CAD\ for\ Linux/$MAJOR.$MINOR.$PATCH"
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/b/br/brlcad/BRL-CAD\ for\ Mac\ OS\ X/$MAJOR.$MINOR.$PATCH"
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/b/br/brlcad/BRL-CAD\ for\ Windows/$MAJOR.$MINOR.$PATCH"
# upload source dist and any binaries
scp brlcad-$MAJOR.$MINOR.$PATCH* "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/b/br/brlcad/BRL-CAD\ Source/$MAJOR.$MINOR.$PATCH/."
# extract and upload release notes to source dir
cat ../NEWS | tr '\n' '@' | perl -pi -e "s/.*?(@---[[:space:]@-]*[0-9]{4}-[0-9]{2}-[0-9]{2}[[:space:]]*Release[[:space:]]*${MAJOR}\.${MINOR}\.${PATCH}[[:space:]@-]*.*?)@---.*/\1/" | tr '@' '\n' > README-${MAJOR}-${MINOR}-${PATCH}.txt
echo "Release notes for $MAJOR.$MINOR.$PATCH" && echo "==="
cat README-$MAJOR-$MINOR-$PATCH.txt && echo "==="
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/b/br/brlcad/BRL-CAD\ Source/$MAJOR.$MINOR.$PATCH/."
# NON-AUTO: Following the NAMING A BINARY RELEASE convention,
# upload any release binaries and platform-specific release notes.
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/b/br/brlcad/BRL-CAD\ Runtime\ Libraries/$MAJOR.$MINOR.$PATCH/."
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/b/br/brlcad/BRL-CAD\ for\ BSD/$MAJOR.$MINOR.$PATCH/."
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/b/br/brlcad/BRL-CAD\ for\ Linux/$MAJOR.$MINOR.$PATCH/."
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/b/br/brlcad/BRL-CAD\ for\ Mac\ OS\ X/$MAJOR.$MINOR.$PATCH/."
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/b/br/brlcad/BRL-CAD\ for\ Windows/$MAJOR.$MINOR.$PATCH/."
# NON-AUTO: Be sure to mark binaries as default download, then
# close shell session
ssh -v $SFUSERNAME,brlcad@shell.sf.net shutdown
#####################################################################
# 19: Notify binary platform maintainers:
# 17: Notify binary platform maintainers:
T2 package maintainer
http://t2-project.org/packages/brlcad.html
@@ -1556,11 +1456,8 @@ Release steps are as follows:
Slackware maintainer
http://slackbuilds.org/result/?search=brlcad
Fedora maintainer
https://fedoraproject.org/wiki/User:Germano#Contact
#####################################################################
# 20: Announce the new release.
# 18: Announce the new release.
The NEWS file should generally be used as a basis for making release
announcements though the announcements almost always require
@@ -1639,7 +1536,7 @@ Multiple platform major release and announcements:
copyboy@cadcam-insider.com
#####################################################################
# 21: Sit back and enjoy a beverage for a job well done.
# 19: Sit back and enjoy a beverage for a job well done.
+544 -201
View File
@@ -1,28 +1,34 @@
The Installation Guide to BRL-CAD
=================================
This document covers the installing BRL-CAD from either a source or binary
distribution. Please see REPORTING PROBLEMS to troubleshoot.
Please read this document if you are interested in installing BRL-CAD.
Some platforms have additional platform-specific documentation provided in the
doc/ directory with additional information. This presently includes the
following:
This document covers the basics of installing BRL-CAD from either a
source or binary distribution. Please see the 'Reporting Problems'
section if you run into any trouble installing BRL-CAD.
Some platforms have additional platform-specific documentation
provided in the doc/ directory of the source distribution that should
be consulted if that is the platform you are installing on. This
presently includes the following:
doc/README.AIX -- IBM's Advanced Interactive eXecutive OS
doc/README.BSD -- FreeBSD, NetBSD, OpenBSD, etc.
doc/README.IRIX -- SGI IRIX and IRIX64
doc/README.Linux -- Various Linux distributions
doc/README.MacOSX -- Apple Mac OS X
doc/README.Solaris -- Oracle Solaris, OpenIndiana (Illumos), etc.
doc/README.Windows -- Microsoft Windows
doc/README.VAX -- Virtual Address eXtension architecture from DEC.
One of the original BRL-CAD platforms. These
days, re-created using the simh simulator.
doc/README.Windows -- Microsoft Windows
TABLE OF CONTENTS
-----------------
Introduction
Table of Contents
Quick Source Install
Quick Installation
Installing from Binary
Installing from Source
Testing Functionality
@@ -31,35 +37,53 @@ TABLE OF CONTENTS
Configuration Options
QUICK SOURCE INSTALL
--------------------
QUICK INSTALLATION
------------------
See https://brlcad.org/wiki/Compiling for a platform-specific walk-through
including instructions for building on Windows.
Note that the downloaded files have two check sums calculated
automatically by the Source Forge file release system. The values are
used to verify the integrity of the files as distributed. Get those
data by clicking on the 'i' button at the end of each file's name.
You should ensure those data are retained and kept with the files if
you re-distribute them.
Required tools:
- Git must be 2.17 or later
- CMake must be 3.20 or later
- Compiler must be C++17-compliant
- If using Visual Studio, version 2019 (16.8+) or later
- If using GCC/G++, version 7 or later
- If using LLVM/Clang 5 or later
- If using Intel, version 19.0.1 or later
Steps to compile, test, and install an optimized BRL-CAD on non-Windows
platforms:
If you downloaded a binary distribution of BRL-CAD for your system,
please read the INSTALLING FROM BINARY section of this document down
below. The rest of this quick installation section is only relevant
to source code distributions of BRL-CAD.
git clone https://github.com/BRL-CAD/brlcad.git
mkdir brlcad/build
cd brlcad/build
cmake .. -DENABLE_ALL=ON -DCMAKE_BUILD_TYPE=Release
make -j4
make check
sudo make install
For the impatient or simplistic, the following steps should compile,
test, and install an optimized BRL-CAD quickly into the /usr/brlcad/rel-X.Y.Z
directory if CMake is installed on your system:
Once installed, run bin/mged or bin/archer to launch BRL-CAD's GUI apps. See
POST-INSTALLATION for instruction adding bin/ folder to your system PATH to
more easily run geometry converters.
gunzip brlcad-X.Y.Z.tar.gz
tar -xvf brlcad-X.Y.Z.tar
mkdir brlcad-build
cd brlcad-build
cmake ../brlcad-X.Y.Z -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
make
make benchmark
make regress
make install # as root, e.g. sudo make install
If any of the listed steps fail, then something unexpected happened.
See the REPORTING PROBLEMS section of this document to report the
problem or the INSTALLING FROM SOURCE section for more comprehensive
instructions.
Once installed, add /usr/brlcad/rel-X.Y.Z/bin to your path, and you should be
able to run any of the 400+ applications that constitute BRL-CAD. For
example, to run the MGED solid modeler:
PATH=/usr/brlcad/rel-X.Y.Z/bin:$PATH ; export PATH
mged
If you use tcsh or another C-shell based command shell, use this
instead:
set path=( /usr/brlcad/rel-X.Y.Z/bin $path ) ; rehash
mged
INSTALLING FROM BINARY
@@ -74,128 +98,93 @@ and Windows etc.
Generic Binary Distributions:
For binary distributions that are simply compressed tarballs of the
installation root, they should contain the entire hierarchy of the
distribution. To put that hierarchy in its "installed" location, you just
create the directory and move the expanded tarball contents:
For the unspecialized binary distributions that are basically
compressed tarballs of the installation root, they should contain the
entire hierarchy of the distribution. To put that hierarchy in its
"installed" location, you just create the directory and move the
expanded tarball contents:
gunzip BRL-CAD_X.Y.Z_Linux_ia64.tar.gz
tar -xvf BRL-CAD_X.Y.Z_Linux_ia64.tar
sudo mkdir /usr/brlcad/rel-X.Y.Z
sudo mv BRL-CAD_X.Y.Z_Linux_ia64/* /usr/brlcad/rel-7.X.Y/
gunzip BRL-CAD_7.2.4_Linux_ia64.tar.gz
tar -xvf BRL-CAD_7.2.4_Linux_ia64.tar
sudo mkdir /usr/brlcad/rel-7.2.4
sudo mv BRL-CAD_7.2.4_Linux_ia64/* /usr/brlcad/rel-7.2.4/
Of course, there are other compression options possible including zip and
bzip2. By default, BRL-CAD expects to be installed into /usr/brlcad/rel-X.Y.Z.
On some platforms the binary may be relocatable, but this is not guaranteed.
It's recommended that you start from a source distribution if you would like to
install into an alternate installation location. That said, if you do desire
to install and/or run BRL-CAD from a different location, give it a try...on
some platforms it will work.
Of course, there are other compression options possible including zip
and bzip2. By default, BRL-CAD expects to be installed into
/usr/brlcad/rel-7.2.4. On some platforms the binary may be relocatable,
but this is not guaranteed. It's recommended that you start from a source
distribution if you would like to install into an alternate installation
location. That said, if you do desire to install and/or run BRL-CAD from
a different location, give it a try...on some platforms it will work.
Something to be aware of, even if a binary distribution IS relocatable: it will
use its local copies of things like libraries only so long as the "final"
installed target directory that the build was compiled for does not contain a
BRL-CAD installation. Due to the way path logic is set, an installed copy of a
library in the correct location will always be loaded first, regardless of the
presence of a "local" copy.
Something to be aware of, even if a binary distribution IS relocatable:
it will use its local copies of things like libraries only so long as the
"final" installed target directory that the build was compiled for
does not contain a BRL-CAD installation. Due to the way path logic
is set, an installed copy of a library in the correct location will
always be loaded first, regardless of the presence of a "local" copy.
Mac OS X Disk Mounting Image:
Mount the .dmg and run the Installer .pkg contained therein. This will install
into /usr/brlcad/rel-X.Y.Z and will only require confirming that your
environment is set up properly (i.e. add /usr/brlcad/rel-X.Y.Z/bin to your
Mount the .dmg and run the Installer .pkg contained therein. This
will install into /usr/brlcad/rel-X.Y.Z and will only require confirming that
your environment is set up properly (i.e. add /usr/brlcad/rel-X.Y.Z/bin to your
path) as described in the Quick Installation section.
Validating checksums:
The integrity of distributed files can be verified using checksums that are
published with released files. Files on SourceForge's file release system can
be found by clicking the 'i' button at the end of each file's name. If you
re-distribute BRL-CAD, checksums should be retained with the files so others
can validate origination.
INSTALLING FROM SOURCE
----------------------
There are a couple of ways to obtain the BRL-CAD sources, usually via one of
the following starting points:
There are a couple of ways to obtain the BRL-CAD sources, usually via
one of the following starting points:
1) from a Git checkout, or
1) from a SVN checkout/export, or
2) from a source distribution tarball
Using the latest Git sources is recommended where possible since it
will have the latest changes.
Using the latest SVN sources is recommended where possible since it
will have the latest changes. See the corresponding section below for
details on how to install from either starting point.
Starting From a SVN Checkout/Export:
With CMake, there is no longer any difference between building from
a subversion checkout and a tarball--follow the Source Distribution
instructions below.
Starting From a Source Distribution:
There are many different ways to build BRL-CAD and depending on what
you need/want will determine which configuration options you should
use. See the CONFIGURATION OPTIONS section below for details on how
to go about selecting which options are appropriate for you.
BRL-CAD's dependencies are managed in a separate repository, located at
https://github.com/BRL-CAD/bext By default BRL-CAD's configure process will
download and manage the necessary dependencies, avoiding the need for user
awareness of the bext repository, but there are a number of scenarios where it
is advantageous for developers to adjust how this process works.
The full dependency stack of BRL-CAD, with all optional and experimental
features enabled, is a VERY large and long compile. Therefore, the bext build
outputs can be built as their own separate, external project to allow for reuse
of the compiled outputs. Building bext separately means BRL-CAD won't get a
chance to customize what is and is not built, but the trade-off is that outputs
can be built once and reused over and over. Doing so can significantly shorten
time spent configuring BRL-CAD builds - reusing bext compiled outputs is
recommended for serious developers.
Various useful configurations for working with bext:
* Get a git clone that has everything which might be needed (large,
but useful for offline building)
git clone --recurse-submodules https://github.com/BRL-CAD/brlcad
* Have prebuilt bext outputs to reuse - BRL-CAD will simply copy and prepare
the pre-existing files
cmake .. -DBRLCAD_EXT_DIR=/home/user/bext_output
* Already have an existing bext clone but want BRL-CAD to build bext outputs
cmake .. -DBRLCAD_EXT_SOURCE_DIR=/home/user/bext
* Download, build and bundle only what is needed for librt
cmake .. -DBRLCAD_COMPONENTS=librt
* Build and bundle only what is needed, but don't require internet for bext clone
cmake .. -DBRLCAD_EXT_SOURCE_DIR=/home/user/bext -DBRLCAD_COMPONENTS=librt
By default, the build system will prepare a Debug build and install into the
/usr/brlcad/dev-X.Y.Z directory. The CMAKE_INSTALL_PREFIX option may be used
to change that directory, or a Release build type may be specified to install
to /usr/brlcad/rel-X.Y.Z - more on this below. The tradition of non-system
installation paths goes back a couple of decades and is a convenient means to
isolate the BRL-CAD solid modeling system from your system, resolves conflicts,
facilitates uninstalls, and simplifies upgrades. The default configuration is
performed by running `cmake'. It is not required to do the build in a
directory different from your source directory, but it is much cleaner and
*highly* recommended - this guide will illustrate the build process with the
assumption that the BRL-CAD source code is in the directory brlcad-X.Y.Z and
the directory intended to hold the build output is brlcad-build, located in the
same parent directory as brlcad-X.Y.Z:
By default, the default configuration will prepare the build system
to perform a Debug build and install into the /usr/brlcad/dev-X.Y.Z
directory. The CMAKE_INSTALL_PREFIX option may be used to change
that directory, or a Release build type may be specified to install to
/usr/brlcad/rel-X.Y.Z - more on this below. The
tradition of non-system installation paths goes back a couple of decades
and is a convenient means to isolate the BRL-CAD solid modeling
system from your system, resolves conflicts, facilitates uninstalls,
and simplifies upgrades. The default configuration is performed by
running `cmake'. It is not required to do the build in a directory
different from your source directory, but it is much cleaner and
*highly* recommended - this guide will illustrate the build process
with the assumption that the BRL-CAD source code is in the directory
brlcad-7.2.4 and the directory intended to hold the build output is
brlcad-build, located in the same parent directory as brlcad-7.2.4:
.
./brlcad-X.Y.Z
./brlcad-7.2.4
./brlcad-build
To start the build process, cd into brlcad-build and run CMake,
pointing it to the source directory:
cd brlcad-build
cmake ../brlcad-X.Y.Z
cmake ../brlcad-7.2.4
As mentioned earlier, CMake uses two "build types", controlled by
the CMAKE_BUILD_TYPE variable, that are useful for specific purposes:
@@ -220,14 +209,35 @@ override the ../brlcad-install default. Build types are a convenient way
to bundle sets of settings, but they do not prevent overrides if a more
custom setup is needed.
By default, all components and functionality will be built.
Note that BRL-CAD does require and include several 3rd party
components. If your system does not include a sufficient version of
those required 3rd party components, they will be automatically
configured for compilation.
If the autodetection mechanisms fail to produce a working configuration,
the next simplest approach is typically to enable ALL the third party
components - this is typically a well tested configuration, but will
increase both the build time and final install size of BRL-CAD on
the system. To set this variable on the command line, use -D to
define ENABLE_ALL for CMake:
define BRLCAD_BUNDLED_LIBS for CMake:
-DENABLE_ALL=ON
-DBRLCAD_BUNDLED_LIBS=Bundled
If the graphical interface (cmake-gui) is in use, it will list this
and other common options by default, allowing the user change them
graphically. This is often quicker and more convenient than
defining options on the command line, but both will work.
You can also force on or off any individual 3rd party library by
setting the BRL-CAD variable for that feature to either on or off:
-DBRLCAD_<LIBRARY>=ON
Other variables control BRL-CAD features. For example, to NOT
enable functionality using OpenGL, set
-DBRLCAD_ENABLE_OPENGL=OFF
To obtain an optimized build (for example, for BRL-CAD Benchmark
performance evaluation), enable BRLCAD_FLAGS_OPTIMIZATION:
@@ -237,6 +247,23 @@ performance evaluation), enable BRLCAD_FLAGS_OPTIMIZATION:
See the CONFIGURATION OPTIONS below for more details on all of the
possible settings.
You can specify options or preferences you want to always use by
default. For example, to always enable all local libs the following
line can be added to your own configuration file:
set(BRLCAD_BUNDLED_LIBS "Bundled" CACHE STRING "Enable all local libs")
You can define your own configuration file in one of three ways. The
build system will search for the file in this order:
${BRLCAD_SOURCE_DIR}/../BRL-CAD_CONFIG.GLOBAL
${BRLCAD_SOURCE_DIR}/BRL-CAD_CONFIG.GLOBAL
the file defined in the environment variable "BRLCAD_USER_GLOBAL_CONFIG_FILE"
The build system will use the first file defined that exists.
Once configured, you should be able to successfully build BRL-CAD via
make:
@@ -262,31 +289,19 @@ or on operating systems set up to use sudo:
TESTING FUNCTIONALITY
---------------------
The primary build target to validate a compilation of BRL-CAD is:
make check
That runs a trio of test sets including "benchmark", "regress", and
"unit". The first set is a performance test that also validates
whether ray tracing behavior is correct:
To test BRL-CAD before installation, you can run the BRL-CAD benchmark.
The benchmark will report if the results are correct, testing a
majority of the core functionality of BRL-CAD in addition to testing
your system's performance:
make benchmark
The second test set is our regression tests that run a host of
rigorous integration tests and validate essential behavior:
Note that the benchmark target will build ONLY the pieces required for
the benchmark tests, unless a general make has already been performed.
For more testing, you can run the regression test suite:
make regress
The third set runs unit tests that validate low-level behavior in
BRL-CAD's core libraries:
make unit
Last but not least, one may simply run all available tests, though
note that some tests will intentionally fail:
make test
POST-INSTALLATION
-----------------
@@ -310,35 +325,38 @@ files.
System PATH:
Normally, BRL-CAD's install directories are not in system PATH lists and
consequently BRL-CAD's executables will not be invocable without specifying
consequently BRL-CAD's executables will not be invokable without specifying
their full path. This is normally handled in Unix environments by adding
the desired BRL-CAD installation's binary directory to the user's local path:
On Windows, the PATH system variable can be set using System Utility
in control panel. Add the bin/ folder in the install directory to PATH.
On Linux/BSD/other systems:
In the bash shell: export PATH=/usr/brlcad/rel-X.Y.Z:$PATH
In the csh shell: setenv PATH /usr/brlcad/rel-X.Y.Z:$PATH
In the bash shell: export PATH=/usr/brlcad/rel-X.Y.Z:$PATH
In the csh shell: setenv PATH /usr/brlcad/rel-X.Y.Z:$PATH
REPORTING PROBLEMS
------------------
Please report any bugs, support requests, or feature requests to:
https://github.com/BRL-CAD/brlcad/issues
Please report any bugs encountered to the project bug tracker at
http://sourceforge.net/tracker/?group_id=105292&atid=640802
Similarly, please post any request for feature enhancements or support
to http://sourceforge.net/tracker/?group_id=105292&atid=640805 and
http://sourceforge.net/tracker/?group_id=105292&atid=640803
respectively.
CONFIGURATION OPTIONS
---------------------
--- ENABLE_ALL ---
--- BRLCAD_BUNDLED_LIBS ---
If set to ON, and the BRL-CAD configure process is managing the bext
dependencies, instructs bext to default to building local copies of the
dependencies it will enable per the BRL-CAD feature settings, rather than
searching for system versions.
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.
Aliases: ENABLE_ALL
--- BRLCAD_ENABLE_OPENGL ---
@@ -350,12 +368,6 @@ if it is, default is to enable.
Aliases: ENABLE_OPENGL
--- BRLCAD_COMPONENTS ---
Semicolon separated list of components to enable for building - see
src/source_dirs.cmake for a list of the components that may be specified.
--- BRLCAD_ENABLE_RUNTIME_DEBUG ---
Enables support for application and library debugging facilities.
@@ -369,51 +381,18 @@ Aliases: ENABLE_RUNTIME_DEBUG, ENABLE_RUN_TIME_DEBUG, ENABLE_RUNTIME_DEBUGGING
ENABLE_RUN_TIME_DEBUGGING
--- BRLCAD_EXT_DIR ---
If specified, BRL-CAD will look in this directory for bext compiled outputs to
bundle and use during the build.
--- BRLCAD_EXT_SOURCE_DIR ---
If specified, BRL-CAD will look in this directory for bext source files. Use
this when you have a pre-existing bext clone and don't want BRL-CAD's configure
process to pull down another copy, but are still looking to have the BRL-CAD
configure process manage producing bext build outputs.
--- BRLCAD_EXT_PARALLEL ---
This number, when specified, describes how many compilation threads to use
when compiling bext sources. Default is 8.
--- BRLCAD_DEBUGGING ---
--- BRLCAD_FLAGS_DEBUG ---
Add compiler flags to aid in program debugging. Defaults to ON.
Aliases: ENABLE_DEBUG, ENABLE_FLAGS_DEBUG, ENABLE_DEBUG_FLAGS
BRLCAD_FLAGS_DEBUG
--- BRLCAD_PGO ---
--- BRLCAD_ENABLE_COMPILER_WARNINGS ---
Enable profile-guided optimization build flags. Defaults to OFF.
Profile-guided optimization builds are possible via two-pass
compilation. Compile with this flag set, run the benchmark suite,
clean the build, and then compile again with this flag set. Supported
compilers will utilize data from the first pass to guide optimization,
typically resulting in a significant performance increase:
--- BRLCAD_WARNINGS ---
Use extra warning flags when compiling C/C++ code. Defaults to ON.
Use extra compiler warning flags when compiling C/C++ code. Defaults to ON.
Aliases: ENABLE_WARNINGS, ENABLE_COMPILER_WARNINGS
BRLCAD_ENABLE_COMPILER_WARNINGS
--- BRLCAD_ENABLE_STRICT ---
@@ -435,6 +414,28 @@ EXPERIMENTAL!
Aliases: ENABLE_ALL_CXX
--- ENABLE_POSIX_COMPLIANCE ---
Build with strict POSIX compliance checking. Defaults to OFF.
Causes compiler options to be set for strict compliance with the
minimum C and C++ standards acceptable according to current BRL-CAD
policy. The current minimum C standard is ??.
There is no currently defined minimum C++ standard.
Aliases: ENABLE_POSIX
--- ENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE ---
Build with strict ISO C compliance checking. Defaults to OFF.
Causes C compiler options to be set for strict compliance with the
appropriate ISO C standard.
Aliases: STRICT_ISO_C
--- BRLCAD_EXTRADOCS ---
The core option that enables and disables building of BRL-CAD's
@@ -448,3 +449,345 @@ permissions).
Aliases: ENABLE_DOCS, ENABLE_EXTRA_DOCS, ENABLE_DOCBOOK
--- BRLCAD_LEMON ---
Option for enabling and disabling compilation of the lemon parser
provided with BRL-CAD's source distribution. 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_LEMON
--- BRLCAD_RE2C ---
Option for enabling and disabling compilation of the re2c scanner
utility provided with BRL-CAD's source distribution. 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_RE2C
--- BRLCAD_PERPLEX ---
Option for enabling and disabling compilation of the perplex scanner
generator provided with BRL-CAD's source distribution. 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. perplex requires a working re2c.
Aliases: ENABLE_PERPLEX
--- BRLCAD_ASTYLE ---
Option for enabling and disabling compilation of the Artistic Style
(astyle) utility provided with BRL-CAD's source distribution. 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_ASTYLE
--- BRLCAD_XSLTPROC ---
Option for enabling and disabling compilation of the xsltproc XML
transformation utility provided with BRL-CAD's source distribution.
Used for DocBook documentation processing. 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.
Depends on BRLCAD_EXTRADOCS.
Aliases: ENABLE_XSLTPROC
--- BRLCAD_XMLLINT ---
Option for enabling and disabling compilation of the xmllint XML
validation utility provided with BRL-CAD's source distribution. Used
for DocBook documentation validation. 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_XMLLINT
--- BRLCAD_REGEX ---
Option for enabling and disabling compilation of the Regular
Expression Library provided with BRL-CAD's source distribution.
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_REGEX
--- BRLCAD_ZLIB ---
Option for enabling and disabling compilation of the zlib library
provided with BRL-CAD's source distribution. 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_ZLIB, ENABLE_LIBZ
--- BRLCAD_TINYCTHREAD ---
Option for enabling and disabling compilation of the tinycthread library
provided with BRL-CAD's source distribution. 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_TINYCTHREAD
--- BRLCAD_FREETYPE ---
Option for enabling and disabling compilation of the FreeType
libraries 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_FREETYPE
--- BRLCAD_TERMLIB ---
Option for enabling and disabling compilation of the termlib library
provided with BRL-CAD's source distribution. 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. (Except when building with Visual Studio, where it is
disabled. Windows does not support the termlib API.)
Aliases: ENABLE_TERMLIB
--- BRLCAD_NETPBM ---
Option for enabling and disabling compilation of the netpbm 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_NETPBM
--- BRLCAD_PNG ---
Option for enabling and disabling compilation of the Portable Network
Graphics library provided with BRL-CAD's source distribution. 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_PNG
--- BRLCAD_UTAHRLE ---
Option for enabling and disabling compilation of the Utah Raster
Toolkit 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_UTAHRLE
--- BRLCAD_TCL ---
Option for enabling and disabling compilation of the Tcl 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_TCL
--- BRLCAD_TK ---
Option for enabling and disabling compilation of the Tk library
provided with BRL-CAD's source code. Default is AUTO, responsive to
the BRLCAD_TCL option and testing first for a system version if
BRLCAD_BUNDLED_LIBS is also AUTO. Option for enabling and disabling
compilation of the Tk graphics package for Tcl provided with BRL-CAD's
source distribution. Default is AUTO, auto-enabling if the BRLCAD_TCL
option is set to BUNDLED and testing first for a system version if
BRLCAD_TCL is set to AUTO or SYSTEM. If BRLCAD_TK is set to BUNDLED,
local copy is built even if a system version is present. This option
also depends on BRLCAD_ENABLE_TK being ON.
Aliases: ENABLE_TK
--- BRLCAD_ITCL ---
Option for enabling and disabling compilation of the IncrTcl package
for Tcl objects provided with BRL-CAD's source distribution. Default
is AUTO, auto-enabling if the BRLCAD_TCL option is set to BUNDLED and
testing first for a system version if BRLCAD_TCL is set to AUTO or
SYSTEM. If BRLCAD_ITCL is set to BUNDLED, local copy is built even if
a system version is present.
Aliases: ENABLE_ITCL
--- BRLCAD_ITK ---
Option for enabling and disabling compilation of the IncrTcl itk
package for Tk objects provided with BRL-CAD's source distribution.
Default is AUTO, auto-enabling if the BRLCAD_TCL option is set to
BUNDLED and testing first for a system version if BRLCAD_TCL is set to
AUTO or SYSTEM. If BRLCAD_ITK is set to BUNDLED, local copy is built
even if a system version is present. This package will be disabled if
BRLCAD_ENABLE_TK is OFF.
Aliases: ENABLE_ITK
--- BRLCAD_IWIDGETS ---
Option for enabling and disabling compilation of the IWidgets Tk
widget package provided with BRL-CAD's source distribution. Default
is AUTO, auto-enabling if the BRLCAD_TCL option is set to BUNDLED and
testing first for a system version if BRLCAD_TCL is set to AUTO or
SYSTEM. If BRLCAD_IWIDGETS is set to BUNDLED, local copy is built even if
a system version is present. This package will be disabled if
BRLCAD_ENABLE_TK is OFF.
Aliases: ENABLE_IWIDGETS
--- BRLCAD_TKHTML ---
Option for enabling and disabling compilation of the Tkhtml HTML
viewing package provided with BRL-CAD's source distribution. Default
is AUTO, auto-enabling if the BRLCAD_TCL option is set to BUNDLED and
testing first for a system version if BRLCAD_TCL is set to AUTO or
SYSTEM. If BRLCAD_TKHTML is set to BUNDLED, local copy is built even if
a system version is present. This package will be disabled if
BRLCAD_ENABLE_TK is OFF.
Aliases: ENABLE_TKHTML
--- BRLCAD_TKPNG ---
Option for enabling and disabling compilation of the tkpng PNG image
viewing package provided with BRL-CAD's source distribution. Default
is AUTO, auto-enabling if the BRLCAD_TCL option is set to BUNDLED and
testing first for a system version if BRLCAD_TCL is set to AUTO or
SYSTEM. If BRLCAD_TKPNG is set to BUNDLED, local copy is built even if
a system version is present. This package will be disabled if
BRLCAD_ENABLE_TK is OFF.
Aliases: ENABLE_TKPNG
--- BRLCAD_TKTABLE ---
Option for enabling and disabling compilation of the Tktable graphical
table widget package provided with BRL-CAD's source distribution.
Default is AUTO, auto-enabling if the BRLCAD_TCL option is set to
BUNDLED and testing first for a system version if BRLCAD_TCL is set to
AUTO or SYSTEM. If BRLCAD_TKTABLE is set to BUNDLED, local copy is built
even if a system version is present. This package will be disabled if
BRLCAD_ENABLE_TK is OFF.
Aliases: ENABLE_TKTABLE
--- BRLCAD_OPENNURBS ---
Option for enabling and disabling compilation of the openNURBS 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_OPENNURBS
--- BRLCAD_SPR ---
Option for enabling and disabling compilation of the PoissonRecon 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_SPR
--- BRLCAD_BSON ---
Option for enabling and disabling compilation of the Libbson library
provided with BRL-CAD's source code. Default is BUNDLED, using
the included other/src version.
Aliases: ENABLE_BSON
--- BRLCAD_SC ---
Option for enabling and disabling compilation of the NIST Step Class
Libraries 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_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
libraries 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_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_BULLET ---
Option for enabling and disabling compilation of the Bullet Realtime
Physics Simulation Libraries provided with BRL-CAD's source
distribution. 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_BULLET
*** Note - Do not add or edit configuration option descriptions and alias
lists in this file - those entries are auto-generated from information in
the toplevel CMakeLists.txt file and src/other/CMakeLists.txt - any changes
should be made in those files. The CMake configuration process will
automatically re-generate INSTALL with the new descriptions and alias
information.
+15 -905
View File
File diff suppressed because it is too large Load Diff
+159 -52
View File
@@ -1,14 +1,18 @@
BRL-CAD
Release 7.42.2
Release 7.26.2
http://brlcad.org/
BRL-CAD is a powerful cross-platform open source combinatorial
solid modeling system that includes an interactive 3D solid geometry
editor, a network-distributed symmetric multiprocessing (SMP)
high-performance ray-tracer with support for rendering and geometric
analysis, image and signal-processing tools, a system performance
analysis benchmark suite, a flexible geometry scripting interface,
and a high-performance geometric representation and analysis library.
Constructive Solid Geometry (CSG) solid modeling system that includes
an interactive 3D solid geometry editor, a network-distributed
symmetric multiprocessing high-performance ray-tracer,
network-distributed framebuffer support, image and signal-processing
tools, ray-tracing support for rendering and geometric analysis,
path-tracing and photon mapping support for realistic image synthesis,
animation capabilities, ray-tracing and numerical processing
libraries, a system performance analysis benchmark suite, an embedded
scripting interface, and a robust high-performance geometric
representation and analysis library.
TABLE OF CONTENTS
@@ -22,10 +26,12 @@ TABLE OF CONTENTS
Bug Reports/Feature Requests
Distribution Details
Background Information
Future Events
Getting Help
GETTING STARTED
---------------
----------------
This README file exists only to provide you a brief roadmap to the
contents of the BRL-CAD distribution.
@@ -33,44 +39,73 @@ contents of the BRL-CAD distribution.
Some platforms have additional platform-specific documentation that
should be consulted after reading this file:
doc/README.Windows -- Microsoft Windows
doc/README.MacOSX -- Apple Mac OS X
doc/README.AIX -- IBM's Advanced Interactive eXecutive OS
doc/README.BSD -- FreeBSD, NetBSD, OpenBSD, etc.
doc/README.IRIX -- SGI IRIX and IRIX64
doc/README.Linux -- Various Linux distributions
doc/README.* -- Other platforms, e.g., BSD, VAX
doc/README.MacOSX -- Apple Mac OS X
doc/README.Solaris -- Oracle Solaris, OpenIndiana (Illumos), etc.
doc/README.Windows -- Microsoft Windows
Information on how to install and run the software, to get involved
with development, or to run the performance benchmark test suite are
covered in detail in separate standalone documents. For more details
on what BRL-CAD provides, consult the main website.
The information on how to install and operate the software, to become
involved with the development of the package, or to run the benchmark
performance test suite have each become sufficiently large that their
details are covered in more detail in standalone documents. For more
details on what BRL-CAD provides, see the documentation provided on
the website at http://brlcad.org/.
Information relevant to the source code is contained in the HACKING
(developer guide) and COPYING (legal overview) files.
Information relevant to those interested in the source code is
contained in the HACKING and COPYING files. See doc/benchmark.tr file
for benchmark suite information. There is a variety of other
documentation and information also available in the doc/ directory.
Note that only sample geometry models are included in public
distributions of BRL-CAD. Detailed models are only available through
official U.S. Gov't channels, e.g., via Advanced Joint Effectiveness
Model (AJEM) support.
Please note that this distribution package does not include the
various military-specific model analysis tools such as MUVES, GIFT,
SAR, SLAVE, VAST, etc., nor does it include any military geometry
databases. If you desire to have access to this material, please
contact one of the BRL-CAD developers.
COMPILE AND INSTALL
-------------------
In order to compile and install BRL-CAD from a source distribution,
the latest CMake ( http://www.cmake.org ), a recent compiler, and at
least 3GB of disk space are recommended. More details are available
at https://brlcad.org/wiki/Compiling
See the INSTALL file for details on configuring, compiling, and
installing BRL-CAD. In order to compile and install BRL-CAD from a
source distribution, the build tool CMake is required (minimum version
currently required is 2.8.4) - see the website at http://www.cmake.org
for source and binary installers. CMake is also available in many
Linux and *BSD distributions.
Typically, the following steps should result in a successful install:
Once CMake is installed, the following steps may be taken for a full
default install (starting with a source tarball):
tar -xvzf brlcad-VERSION.tar.gz
mkdir brlcad-VERSION/build
cd brlcad-VERSION/build
cmake .. -DBRLCAD_ENABLE_STRICT=OFF -DCMAKE_BUILD_TYPE=Release
make -j4
tar -xvzf brlcad-X.Y.Z.tar.gz
mkdir brlcad-build
cd brlcad-build
cmake ../brlcad-X.Y.Z
make
make install
See the included INSTALL text file for explanation of the various
cmake configuration options available for building BRL-CAD.
where "X.Y.Z" is the version number of BRL-CAD. For those who prefer
a curses interface, substitute ccmake for cmake above. If the graphical
interface available from CMake is installed cmake-gui may be
substituted for cmake. These interfaces will display the various
configuration options available when building BRL-CAD, or the options
may be set directly via command line -D options.
The configure wrapper script may be substituted for cmake in the above
steps for a more autotools-like configuration experience.
Users on multiprocessor systems will be able to speed up their builds
by passing the -j option to make (e.g. make -j4, assuming GNU make).
Once the build completes and assuming you have proper filesystem
permissions, you should be able to begin the installation by running
the "make install" . By default, the package is configured to install
entirely into /usr/brlcad/.
You will need to add /usr/brlcad/bin to your path (or whatever path the
variable CMAKE_INSTALL_PREFIX was set to during configure) in order for
the BRL-CAD binaries to be in your path.
BENCHMARK
@@ -97,38 +132,78 @@ comparing the results of the benchmark tests in more detail.
COMMUNICATION
-------------
There are various BRL-CAD mailing lists available including three
You are invited to participate in the InterNet (aka "ARPANET")
electronic mailing list on the BRL-CAD software. There are various
BRL-CAD mailing lists available on the project website at
http://sourceforge.net/mail/?group_id=105292 including three
developer-oriented lists, a user list, and a read-only news
announcement list:
announcement list. See the posted archives to get a feel for the
volume of list traffic for each list and to read/search past
discussions.
http://sourceforge.net/mail/?group_id=105292
On-line web forums are likewise available on the project site at
http://sourceforge.net/forum/?group_id=105292
For interactive discussion, please join our Zulip chat:
A variety of information on BRL-CAD is available via the
World-Wide-Web. Papers, documentation, and the software repository
may be found at:
https://brlcad.zulipchat.com
http://brlcad.org
In addition to the above, there is an official BRL-CAD IRC channel on
the Freenode network that may be reached by joining #brlcad on
irc.freenode.net connecting via port 6667. For first-time users,
there is a web-based IRC client available for certain browsers at:
http://irc.brlcad.org
IRC is the preferred method of communication to interact with the
BRL-CAD developers, to get involved with the project, obtain support,
or provide direct feedback.
BUG REPORTS AND FEATURE REQUESTS
--------------------------------
Please submit all bugs, support requests, and feature requests to:
Please report any bugs encountered to the project bug tracker at
http://sourceforge.net/tracker/?group_id=105292&atid=640802
https://github.com/BRL-CAD/brlcad/issues
Similarly, please post any request for feature enhancements or support
request to http://sourceforge.net/tracker/?group_id=105292&atid=640805
and http://sourceforge.net/tracker/?group_id=105292&atid=640803
respectively.
DISTRIBUTION DETAILS
--------------------
BRL-CAD releases are available at:
BRL-CAD is freely available and distributed in both binary and source
code form through the BRL-CAD project website on Sourceforge:
https://github.com/BRL-CAD/brlcad/releases
http://sf.net/projects/brlcad/
Assets stored for each release will always include source archives,
and usually binary compilations for commonly used operating systems.
The package is similarly available via a Subversion repository. To
obtain the latest, follow the directions for anonymous checkout at:
For developers, BRL-CAD is available via Git version control cloning:
http://sourceforge.net/svn/?group_id=105292
https://github.com/BRL-CAD/brlcad
There is also a paid-for full-service support distribution available
for those interested through SURVICE Engineering, Inc., and the
Survivability/Vulnerability Information Analysis Center (SURVIAC).
SURVICE provides their own BRL-CAD distribution that comes with
commercial support, documentation, and installation media. Full
technical assistance is provided to their commercial distributions by
phone, FAX, postal mail, or e-mail. Agencies of the Federal
Government may acquire the full service distribution with a MIPR or
OGA funds transfer.
For further details, contact:
BRL-CAD Distribution
SURVIAC Aberdeen Satellite Office
4695 Millennium Drive
Belcamp, MD 210017-1505 USA
BACKGROUND INFORMATION
@@ -171,12 +246,44 @@ Linux, and Windows.
The BRL-CAD package is intentionally designed to be extensively
cross-platform and is actively developed on and maintained for many
common operating system environments including various BSD
distributions, Linux, Solaris, Mac OS X, and Windows. The entire
package is distributed in binary and source code form as free open
source software (FOSS), provided under Open Source Initiative (OSI)
approved license terms. BRL-CAD was released as open source in
December 2004. See the COPYING file for more details.
common operating system environments including for BSD, IRIX, Linux,
Solaris, Mac OS X, and Windows among others. The entire package is
distributed in binary and source code form as free open source
software (FOSS), provided under Open Source Initiative (OSI) approved
license terms. BRL-CAD was released as open source in December 2004.
See the COPYING file for more details.
FUTURE EVENTS
-------------
It is expected that new releases of BRL-CAD will be issued
approximately once a month. A new release is scheduled for
distribution at the beginning of every month, usually being posted
sometime within the first week of every month.
Depending on need, demand, and activity, additional releases may also
be made. The additional releases will be heavily dependent upon the
level of user involvement and contributions in particular.
Information about new releases will be routinely provided by
electronic mail to recipients of this software as well as to the
BRL-CAD NEWS mailing list:
http://sourceforge.net/mail/?group_id=105292
Periodically, training and user group meetings are provided with
announcements similarly posted to the BRL-CAD NEWS mailing list.
Several BRL-CAD developers also regularly attend the ACM Siggraph
conference, the ACM Solid and Physical Modeling conference, and other
similar conferences, conventions, and symposiums as well.
GETTING HELP
------------
Feel free to direct any unanswered questions relating to BRL-CAD via
e-mail or to any of the other contact means described above in the
COMMUNICATIONS section of this document.
Best Wishes,
The BRL-CAD Development Team
+164
View File
@@ -0,0 +1,164 @@
branch/binary-attributes
========================
To turn on the use of binary attributes define:
USE_BINARY_ATTRIBUTES
E.g., prior to running CMake:
export CFLAGS=-DUSE_BINARY_ATTRIBUTES
export CXXFLAGS=-DUSE_BINARY_ATTRIBUTES
external code added:
-------------------
BSON
specification: http://bsonspec.org/spec.html
libbson source: https://github.com/mongodb/libbson
current release tarball: https://github.com/mongodb/libbson/releases/
libbson-1.3.0-beta0.tar.gz
converter: libbson has tools included to convert BSON to/from JSON
Scheme
------
The BRL-CAD V5 database seems to allow an arbitrary binary chunk
following the ASCII attributes. The idea is to define the total
attribute chunk length to include any desired binary objects. The
read or write (RW) of the ASCII attributes stops with the char* RW of
a double NULL which should be a sufficient stop RW mark. Then, any
difference in length read versus attribute chunk length is the length
of a chunk of binary attributes (BAs) which we will define as a BSON
collection of BSON documents (??? check BSON terminology). At that
point we use libbson to RW the BAs.
As a minumum, a BA must have an ASCII key and a binary value.
Following the BSON specification, the user can add other objects in
the BA if desired.
The user interface relies on AVS handling which will have to also
handle the BAs (that appears to be doable). Our best practice should
encourage (maybe require?) a BA to have a short ASCII comment.
We will need appropriate functions to convert BAs to/from AVS
objects. In the course of developing the BA capability we will add a
file IO scheme for users to manipulate the BAs.
User interface (mged)
---------------------
Current attr usage
******************
mged> attr
Usage: attr {[-c sep_char] set|get|show|rm|append|sort|list} object [key [value] ... ]
Proposed attr usage
*******************
mged> attr
Usage: attr {[-c sep_char][-b] set|get|show|rm|append|sort|list} object [key [value] ... ]
Where the '-b', indicating a binary attribute (BA), works with 'get'
and 'set' only (and ignored for the other commands).
Note that 'set' and 'get' for binary attributes require an external
file name (which must must be a valid JSON file for 'set') and must
NOT exist for 'get'. The 'append' command will NOT work for a BA.
The 'show', 'sort', and 'list' commands will show for BAs their key
followed by followed by '(binary)' followed by their comment string,
if it exists (we should make that mandatory I believe). The 'rm'
command will remove the BA referenced by the key.
The BAs will have both a key and a comment, and it is an error to try
to add a BA with a key the same as an existing key.
Tentative JSON format of a BA
-----------------------------
(See http://www.json.org/ for the JSON specification.)
Functions needed
----------------
JSON BA to/from in-memory AVS
see current functions:
AVS BA to/from on-disk attribute body
see current functions:
...
Macro definitions needed
------------------------
Data structures needed
----------------------
Other notes
-----------
Files affected:
./include/bu/parse.h
./include/bu/avs.h
./src/librt/db5_io.c
./src/librt/attributes.c
Features to be implemented and other considerations:
+ add a binary attribute using similar syntax as a string attribute
+ a binary attribute should have an optional description field
+ implement auto update of an object's ctime (creation time) and
mtime (last modification)
+ mtime and ctime should be 64-bit integers (based on Unix time and
epoch) (int64_t; see src/libbu/y2038/time64_config.h)
+ binary attributes should be able to be entered from or output to a
file
A db admin tool:
./src/util/db-admin-tool.cpp
On-disk format of a binary attribute [following the (char*)NULL
(char*)NULL end of the normal attributes]:
While I believe we can use the existing AVS attribute section for BAs,
I believe in the future we ought to create a separate object structure
section for binary attributes, especially if we use a more compact
binary representation such as CBOR.
The following describes the current V5 db:
BRL_CAD_g_format_V5.xml
The following describes the proposed V6 db with the binary attributes:
BRL_CAD_g_format_V6.xml
Possible tests:
1. Simple TGM
+ create a single-object TGM
+ copy the TGM to a new file (TGM2)
+ add multiple binary attributes to TGM2
+ add a file to TGM2
+ use the admin-db tool to check TGM2
+ export the file; check that it is the same as was imported
+ delete the added binary attributes from TGM2
+ run cmp on TGM and TGM2 to see they are the same
2. Complex TGM
+ select a complex TGM in the db directory as a test subject
+ copy the TGM to a new file (TGM2)
+ add multiple binary attributes to TGM2
+ add a file to TGM2
+ use the admin-db tool to check TGM2
+ export the file; check that it is the same as was imported
+ delete the added binary attributes from TGM2
+ run cmp on TGM and TGM2 to see they are the same
See the TODO file, sections "ATTRIBUTES" and "THESE BREAK PROTOCOL OR
ARE BACKWARDS-INCOMPATIBLE" for more official information.
+1082 -1470
View File
File diff suppressed because it is too large Load Diff
+40 -74
View File
@@ -1,95 +1,61 @@
add_subdirectory(ref)
add_definitions(-DCONSOLE)
include_directories(${BU_INCLUDE_DIRS})
brlcad_addexec(pixcmp pixcmp.c libbu)
set(BARK_SOURCES benchmark.c compute.c run.c clean.c)
brlcad_addexec(bark "${BARK_SOURCES}" libbu NO_STRICT NO_INSTALL TEST_USESDATA)
if(BUILD_TESTING)
configure_file(run.sh "${CMAKE_CURRENT_BINARY_DIR}/benchmark" COPYONLY)
install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/benchmark" DESTINATION ${BIN_DIR})
endif(BUILD_TESTING)
distclean("${CMAKE_CURRENT_BINARY_DIR}/benchmark")
if(BUILD_TESTING)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/benchmark-done
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/run.sh $<TARGET_FILE_DIR:bark>/benchmark
COMMAND "${CMAKE_COMMAND}" -E touch ${CMAKE_CURRENT_BINARY_DIR}/benchmark-done
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/run.sh
add_definitions(
-DHAVE_CONFIG_H
-DBRLCADBUILD
-DCONSOLE
)
add_custom_target(benchmark_cp ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/benchmark-done)
set_target_properties(benchmark_cp PROPERTIES FOLDER "Benchmark")
endif(BUILD_TESTING)
distclean(${CMAKE_BINARY_DIR}/${BIN_DIR}/benchmark)
file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/benchmsg.cmake" "message(\"---\")\n")
file(
APPEND
"${CMAKE_BINARY_DIR}/CMakeTmp/benchmsg.cmake"
"message(\"Run 'make benchmark-clean' in the bench directory to delete the logic\")\n"
)
file(
APPEND
"${CMAKE_BINARY_DIR}/CMakeTmp/benchmsg.cmake"
"message(\"and image files generated during the benchmark analysis.\")\n"
)
BRLCAD_ADDEXEC(pixcmp pixcmp.c libbu)
cmakefiles(
CMakeLists.txt
run.sh
try.sh
viewdiff.sh
)
configure_file(run.sh "${CMAKE_CURRENT_BINARY_DIR}/benchmark" COPYONLY)
install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/benchmark" DESTINATION ${BIN_DIR})
if(CMAKE_CONFIGURATION_TYPES)
foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER)
configure_file(run.sh ${CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}}/bin/benchmark COPYONLY)
endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
else(CMAKE_CONFIGURATION_TYPES)
configure_file(run.sh ${CMAKE_BINARY_DIR}/bin/benchmark COPYONLY)
endif(CMAKE_CONFIGURATION_TYPES)
if(SH_EXEC AND TARGET m35.g AND BUILD_TESTING)
file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/benchmsg.cmake" "message(\"---\")\n")
file(APPEND "${CMAKE_BINARY_DIR}/CMakeTmp/benchmsg.cmake" "message(\"Run 'make benchmark-clean' in the bench directory to delete the logic\")\n")
file(APPEND "${CMAKE_BINARY_DIR}/CMakeTmp/benchmsg.cmake" "message(\"and image files generated during the benchmark analysis.\")\n")
CMAKEFILES(lgt.sh run.sh try.sh viewdiff.sh)
if(SH_EXEC)
# CTest enabled short run of the benchmark suite
brlcad_add_test(NAME benchmark COMMAND ${SH_EXEC} "$<TARGET_FILE_DIR:bark>/benchmark" run TIMEFRAME=1)
add_test(NAME benchmark COMMAND ${SH_EXEC} "${CMAKE_BINARY_DIR}/bin/benchmark" run TIMEFRAME=1)
set_tests_properties(benchmark PROPERTIES LABELS "Benchmark")
add_custom_target(
benchmark-check
add_custom_target(benchmark-check
COMMAND ${CMAKE_CTEST_COMMAND} -L Benchmark --output-on-failure
DEPENDS rt pixcmp BENCHMARK_PIX_cp PIX_LOG_cp benchmark_cp
)
add_dependencies(
benchmark-check
bldg391.g
m35.g
moss.g
sphflake.g
star.g
world.g
)
set_target_properties(benchmark-check PROPERTIES FOLDER "Benchmark")
DEPENDS rt pixcmp BENCHMARK_PIX_cp PIX_LOG_cp
)
add_dependencies(benchmark-check bldg391.g m35.g moss.g sphflake.g star.g world.g)
if(TARGET check)
add_dependencies(check benchmark-check)
endif(TARGET check)
# Full run of the benchmark suite
add_custom_target(
benchmark
COMMAND ${SH_EXEC} $<TARGET_FILE_DIR:bark>/benchmark run
add_custom_target(benchmark
COMMAND ${SH_EXEC} ${CMAKE_BINARY_DIR}/bin/benchmark run
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR}/CMakeTmp/benchmsg.cmake"
DEPENDS rt pixcmp BENCHMARK_PIX_cp PIX_LOG_cp benchmark_cp
)
add_dependencies(
benchmark
bldg391.g
m35.g
moss.g
sphflake.g
star.g
world.g
)
set_target_properties(benchmark PROPERTIES FOLDER "Benchmark")
DEPENDS rt pixcmp BENCHMARK_PIX_cp PIX_LOG_cp
)
add_dependencies(benchmark bldg391.g m35.g moss.g sphflake.g star.g world.g)
# benchmark cleanup targets
add_custom_target(benchmark-clean ${SH_EXEC} ${CMAKE_BINARY_DIR}/bin/benchmark clean)
set_target_properties(benchmark-clean PROPERTIES FOLDER "Benchmark")
add_custom_target(benchmark-clobber ${SH_EXEC} ${CMAKE_BINARY_DIR}/bin/benchmark clobber)
set_target_properties(benchmark-clobber PROPERTIES FOLDER "Benchmark")
endif(SH_EXEC AND TARGET m35.g AND BUILD_TESTING)
add_custom_target(benchmark-clean
${SH_EXEC} ${CMAKE_BINARY_DIR}/bin/benchmark clean
)
add_custom_target(benchmark-clobber
${SH_EXEC} ${CMAKE_BINARY_DIR}/bin/benchmark clobber
)
endif(SH_EXEC)
# Local Variables:
# tab-width: 8
-951
View File
@@ -1,951 +0,0 @@
/* B E N C H M A R K . C
* BRL-CAD
*
* Copyright (c) 2011-2025 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.
*/
/** @file benchmark.c
*
* This is the BRL-CAD Benchmark.
*
* The benchmark suite will test the performance of a system by
* iteratively rendering several well-known datasets into 512x512
* images where performance metrics are documented and fairly well
* understood. The local machine's performance is compared to the
* base system (called VGR) and a numeric "VGR" multiplier of
* performance is computed. This number is a simplified metric from
* which one may qualitatively compare cpu and cache performance,
* versions of BRL-CAD, and different compiler characteristics.
*
*/
#include "common.h"
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/stat.h>
/* TODO - fall back on https://github.com/sandsmark/winuname for Windows? */
#ifdef HAVE_SYS_UTSNAME_H
# include <sys/utsname.h>
#endif
#include "bio.h"
#include "bu.h"
/* TODO: !!! probably will need variants of these */
int bu_exec(const char *program, void *data, struct bu_vls *out, struct bu_vls *err) {if (!program || !out || !err || !data) return 1; return 0;}
int bu_grep(const char *pattern, const char *input, int(*callback)(const char *line, void *data), void *data) {if (!pattern || !input || !data) return 1; if (!callback) bu_log("TODO: need default callback!!!\n"); return 0;}
int bu_file_glob(const char *pattern, char **paths) {if (!pattern || !paths) return 1; return 0;}
char *format_elapsed(double elapsed) {if (elapsed > 0) return "0 1 2"; return "-0 -1 -2";}
int perf(const struct bu_vls *vp, const char *items, const char *args[]) {if (!vp || !items || !args) return -1; return 0;}
double calculate_vgr(const struct bu_vls *summary) {if (!summary) return -0.0; return 0.0;}
extern int bench(const char *cmd);
/**
* this routine writes the provided argument(s) to a log file as well
* as echoing them to stdout if we're not in quiet mode.
*/
static void
record(const char *fmt, ...)
{
struct bu_vls str = BU_VLS_INIT_ZERO;
va_list ap;
const char *LOGFILE = getenv("LOGFILE");
const char *QUIET = getenv("QUIET");
if (!fmt) {
return;
}
va_start(ap, fmt);
bu_vls_vprintf(&str, fmt, ap);
va_end(ap);
if (!BU_STR_EQUAL(LOGFILE, "")) {
FILE *fp = fopen(LOGFILE, "a");
fprintf(fp, "%s", bu_vls_addr(&str));
fclose(fp);
}
if (bu_str_false(QUIET)) {
bu_log("%s", bu_vls_addr(&str));
}
bu_vls_free(&str);
}
static void
display(const char *fmt, ...)
{
struct bu_vls str = BU_VLS_INIT_ZERO;
va_list ap;
if (!fmt) {
return;
}
va_start(ap, fmt);
bu_vls_vprintf(&str, fmt, ap);
va_end(ap);
bu_log("%s", bu_vls_cstr(&str));
bu_vls_free(&str);
}
static void
sink(const char *fmt, ...)
{
if (!fmt) {
return;
}
}
/************************
* search for resources *
************************/
typedef enum {
executable=0x1,
file=0x2,
directory=0x4,
script=0x8
} look_for_type_t;
#define TYPE2STR(_t) \
((_t) == executable) ? "executable" : \
((_t) == file) ? "file" : \
((_t) == directory) ? "directory" : \
((_t) == script) ? "script" : \
"unknown"
static void
look_for(void (*verbose)(const char *, ...), look_for_type_t type, const char *label, const char *var, const char*paths[])
{
char *val;
/* utility function to search for a certain filesystem object in a
* list of paths.
*/
if (!var || !paths) {
return;
}
if (!verbose) {
verbose = sink;
}
verbose("Looking for %s\n", label);
/* get the value of the variable */
val = getenv(var);
if (val && (strlen(val) > 0)) {
if (label) {
verbose("...using %s from %s variable setting\n", val, var);
}
} else {
while (paths && *paths) {
int failed=0;
switch (type) {
default:
case directory:
/* should work without read bit */
if (!bu_file_directory(*paths)) {
failed=1;
}
/* fall through */
case executable:
case script:
if (!bu_file_executable(*paths)) {
failed=1;
}
break;
case file:
if (!bu_file_exists(*paths, NULL)) {
failed=1;
}
break;
}
if (!failed) {
verbose("...found %s %s\n", TYPE2STR(type), *paths);
bu_setenv(var, *paths, 1);
break;
}
paths++;
}
}
}
static void
set_if_unset(void (*echo)(const char *, ...), void (*verbose)(const char *, ...), const char *var, const char *val)
{
if (!var || !val) {
return;
}
const char *setval = getenv(var);
if (!echo) {
echo = sink;
}
if (!verbose) {
verbose = sink;
}
if (!setval || (strlen(setval) == 0)) {
verbose("%s=\"%s\"\n", var, val);
bu_setenv(var, val, 1);
}
setval = getenv(var);
echo("Using [%s] for %s\n", setval, var);
}
/* callback to bu_grep() */
static int
stashline(const char *line, void *data)
{
struct bu_vls *vls = (struct bu_vls *)data;
BU_CK_VLS(vls);
bu_vls_printf(vls, "%s\n", line);
return 0;
}
int
main(int ac, char *av[])
{
int arg;
struct bu_vls rtargs = BU_VLS_INIT_ZERO;
struct bu_vls str = BU_VLS_INIT_ZERO;
const char *RT = NULL;
const char *DB = NULL;
const char *PIX = NULL;
const char *LOG = NULL;
const char *CMP = NULL;
const char *ELP = NULL;
char root[MAXPATHLEN] = {0};
char db[MAXPATHLEN] = {0};
char pix[MAXPATHLEN] = {0};
char thisp[MAXPATHLEN] = {0};
char *argv[MAXPATHLEN] = {NULL};
struct bu_vls vp = BU_VLS_INIT_ZERO;
long MAXTIME = 0;
long TIMEFRAME = 0;
int64_t start = 0;
int ret = 0;
void (*verbose_echo)(const char *, ...) = sink;
void (*echo)(const char *, ...) = record;
bu_setprogname(av[0]);
/* process the argument list for commands */
for (arg=1; arg<ac; arg++) {
if (BU_STR_EQUAL(av[arg], "clean")) {
bu_setenv("CLEAN", "1", 1);
continue;
}
if (BU_STR_EQUAL(av[arg], "clobber")) {
bu_setenv("CLEAN", "1", 1);
bu_setenv("CLOBBER", "1", 1);
continue;
}
if (BU_STR_EQUAL(av[arg], "h")) {
bu_setenv("HELP", "1", 1);
continue;
}
if (BU_STR_EQUAL(av[arg], "help")) {
bu_setenv("HELP", "1", 1);
continue;
}
if (bu_strncasecmp(av[arg], "instruct", 8)) {
bu_setenv("INSTRUCTIONS", "1", 1);
continue;
}
if (BU_STR_EQUAL(av[arg], "start")) {
continue;
}
if (BU_STR_EQUAL(av[arg], "quiet")) {
bu_setenv("QUIET", "1", 1);
continue;
}
if (BU_STR_EQUAL(av[arg], "verbose")) {
bu_setenv("VERBOSE", "1", 1);
continue;
}
if (BU_STR_EQUAL(av[arg], "run")) {
bu_setenv("RUN", "1", 1);
continue;
}
if (strchr(av[arg], '=')) {
/* TODO: !!! make sure this still works */
char *var = bu_strdup(av[arg]);
char *val = strtok(var, "=");
if (var && val) {
bu_setenv(var, val, 1);
}
bu_free(var, "strdup av[arg]");
continue;
}
bu_log("WARNING: Passing unknown option [%s] to RT\n", av[arg]);
bu_vls_printf(&rtargs, " %s", av[arg]);
}
/***
* handle help before main processing
***/
if (bu_str_true(getenv("HELP"))) {
bu_log("Usage: %s [command(s)] [OPTION=value] [RT_OPTIONS]\n", av[0]);
bu_log("\n");
bu_log("Available commands:\n");
bu_log(" clean\n");
bu_log(" clobber\n");
bu_log(" help (this is what you are reading right now)\n");
bu_log(" instructions\n");
bu_log(" quiet\n");
bu_log(" verbose\n");
bu_log(" run (this is probably what you want)\n");
bu_log("\n");
bu_log("Available options:\n");
bu_log(" RT=/path/to/rt_binary (e.g., rt)\n");
bu_log(" DB=/path/to/reference/geometry (e.g. ../db)\n");
bu_log(" PIX=/path/to/reference/images (e.g., ../pix)\n");
bu_log(" LOG=/path/to/reference/logs (e.g., ../pix)\n");
bu_log(" CMP=/path/to/pixcmp_tool (e.g., pixcmp)\n");
bu_log(" ELP=/path/to/time_tool (e.g., elapsed.sh)\n");
bu_log(" TIMEFRAME=#seconds (default 32)\n");
bu_log(" MAXTIME=#seconds (default 300)\n");
bu_log(" DEVIATION=%%deviation (default 3)\n");
bu_log(" AVERAGE=#frames (default 3)\n");
bu_log("\n");
bu_log("Available RT options:\n");
bu_log(" -P# (e.g., -P1 to force single CPU)\n");
bu_log(" See the 'rt' manpage for additional options\n");
bu_log("\n");
bu_log("The BRL-CAD Benchmark tests the overall performance of a system\n");
bu_log("compared to a stable well-known baseline. The Benchmark calculates a\n");
bu_log("figure-of-merit for this system that may be directly compared to other\n");
bu_log("Benchmark runs on other system configurations.\n");
bu_log("\n");
bu_log("BRL-CAD is a powerful cross-platform open source solid modeling system.\n");
bu_log("For more information about BRL-CAD, see http://brlcad.org\n");
bu_log("\n");
bu_log("Run '%s instructions' or see the manpage for additional information.\n", av[0]);
bu_exit(1, NULL);
}
/***
* handle instructions before main processing
***/
if (bu_str_true(getenv("INSTRUCTIONS"))) {
bu_log("\n");
bu_log("This program runs the BRL-CAD Benchmark. The benchmark suite will\n");
bu_log("test the performance of a system by iteratively rendering several\n");
bu_log("well-known datasets into 512x512 images where performance metrics are\n");
bu_log("documented and fairly well understood. The local machine's\n");
bu_log("performance is compared to the base system (called VGR) and a numeric\n");
bu_log("\"VGR\" multiplier of performance is computed. This number is a\n");
bu_log("simplified metric from which one may qualitatively compare cpu and\n");
bu_log("cache performance, versions of BRL-CAD, and different compiler\n");
bu_log("characteristics.\n");
bu_log("\n");
bu_log("The suite is intended to be run from a source distribution of BRL-CAD\n");
bu_log("after the package has been compiled either directly or via a make\n");
bu_log("build system target. There are, however, several environment\n");
bu_log("variables that will modify how the BRL-CAD benchmark behaves so that\n");
bu_log("it may be run in a stand-alone environment:\n");
bu_log("\n");
bu_log(" RT - the rt binary (e.g. ../src/rt/rt or /usr/brlcad/bin/rt)\n");
bu_log(" DB - the directory containing the reference geometry (e.g. ../db)\n");
bu_log(" PIX - the directory containing the reference images (e.g. ../pix)\n");
bu_log(" LOG - the directory containing the reference logs (e.g. ../pix)\n");
bu_log(" CMP - the name of a pixcmp tool (e.g. ./pixcmp or cmp)\n");
bu_log(" ELP - the name of an elapsed time tool (e.g. ../sh/elapsed.sh)\n");
bu_log(" TIMEFRAME - the minimum number of seconds each trace needs to take\n");
bu_log(" MAXTIME - the maximum number of seconds to spend on any test\n");
bu_log(" DEVIATION - the minimum sufficient %% deviation from the average\n");
bu_log(" AVERAGE - how many frames to average together\n");
bu_log(" VERBOSE - turn on extra debug output for testing/development\n");
bu_log(" QUIET - turn off all printing output (writes results to summary)\n");
bu_log(" INSTRUCTIONS - display detailed instructions\n");
bu_log(" RUN - start a benchmark analysis\n");
bu_log("\n");
bu_log("The TIMEFRAME, MAXTIME, DEVIATION, and AVERAGE options control how the\n");
bu_log("benchmark will proceed including how long it should take. Each\n");
bu_log("individual benchmark run will consume at least a minimum TIMEFRAME of\n");
bu_log("wallclock time so that the results can stabilize. After consuming at\n");
bu_log("least the minimum TIMEFRAME, additional frames may be computed until\n");
bu_log("the standard deviation from the last AVERAGE count of frames is below\n");
bu_log("the specified DEVIATION. When a test is run and it completes in less\n");
bu_log("than TIMEFRAME, the raytrace is restarted using double the number of\n");
bu_log("rays from the previous run. If the machine is fast enough, the\n");
bu_log("benchmark may accelerate the number or rays being fired. These\n");
bu_log("additional rays are hypersampled but without any jitter, so it's\n");
bu_log("effectively performing a multiplier amount of work over the initial\n");
bu_log("frame.\n");
bu_log("\n");
bu_log("Please send your BRL-CAD Benchmark results to the developers along with\n");
bu_log("detailed system information to <devs@brlcad.org>. Include at least:\n");
bu_log("\n");
bu_log(" 0) Compiler name and version (e.g. gcc --version)\n");
bu_log(" 1) All generated log files (i.e. *.log* after benchmark completes)\n");
bu_log(" 2) Anything else you think might be relevant to performance\n");
bu_log("\n");
bu_log("The manual page has even more information and specific usage examples.\n");
bu_log("Run 'brlman benchmark'.\n");
bu_log("\n");
bu_exit(0, NULL);
}
/***
* handle clean/clobber before main processing
***/
if (bu_str_true(getenv("CLEAN"))) {
size_t i;
size_t cnt;
size_t num;
char cwd[MAXPATHLEN] = {0};
const char *tests[] = {"moss", "world", "star", "bldg391", "m35", "sphflake", NULL};
char **paths = NULL;
int printed = 0;
bu_log("\n");
if (bu_str_true(getenv("CLOBBER"))) {
bu_log("About to wipe out all benchmark images and log files in %s\n", bu_getcwd(cwd, MAXPATHLEN));
bu_log("Send SIGINT (type ^C) within 5 seconds to abort\n");
sleep(5);
} else {
bu_log("Deleting most benchmark images and log files in %s\n", bu_getcwd(cwd, MAXPATHLEN));
bu_log("Running '%s clobber' will remove run logs.\n", av[0]);
}
bu_log("\n");
for (i=0; tests[i]; i++) {
struct bu_vls pattern_str = BU_VLS_INIT_ZERO;
char *pattern[5] = {NULL, NULL, NULL, NULL, NULL};
size_t j;
/* rm -f $i.log $i.pix $i-[0-9]*.log $i-[0-9]*.pix */
bu_vls_printf(&pattern_str, "%s.log %s.pix %s-[0-9]*.log %s-[0-9]*.pix", tests[i], tests[i], tests[i], tests[i]);
bu_log("rm -f %s\n", bu_vls_cstr(&pattern_str));
j = bu_argv_from_string(pattern, 4, bu_vls_addr(&pattern_str));
while (j > 0) {
num = bu_file_glob(pattern[j-1], paths);
if (!num || !paths || !paths[0]) {
j--;
continue;
}
cnt = num;
while (num > 0) {
bu_file_delete(paths[num-1]);
num--;
}
bu_argv_free(cnt, paths);
paths = NULL;
j--;
}
bu_vls_free(&pattern_str);
}
if (bu_str_true(getenv("CLOBBER"))) {
/* NEVER automatically delete the summary file, but go
* ahead with the rest.
*/
num = bu_file_glob("benchmark-[0-9]*-run.log", paths);
cnt = num;
while (num > 0) {
if (paths) {
bu_log("rm -f %s\n", paths[num-1]);
bu_file_delete(paths[num-1]);
}
num--;
}
bu_argv_free(cnt, paths);
paths = NULL;
}
if (bu_file_exists("summary", NULL)) {
if (!printed) {
bu_log("\nThe following files must be removed manually:\n");
printed=1;
}
bu_log("summary ");
}
num = bu_file_glob("benchmark-[0-9]*-run.log", paths);
cnt = num;
while (num > 0) {
if (!printed) {
bu_log("\nThe following files must be removed manually:\n");
printed=1;
}
if (paths)
bu_log("%s ", paths[num-1]);
num--;
}
bu_argv_free(cnt, paths);
paths = NULL;
if (printed) {
bu_log("\n");
}
if (bu_str_true(getenv("CLOBBER"))) {
bu_log("\nBenchmark clobber complete.\n");
} else {
bu_log("\nBenchmark clean complete.\n");
}
bu_exit(0, NULL);
}
/***
* B E G I N
***/
if (bu_str_false(getenv("RUN"))) {
bu_exit(1, "Type '%s help' for usage.\n", av[0]);
}
/* where to write results */
{
int fd;
const char *logfile;
bu_vls_printf(&str, "run-%d-benchmark.log", bu_pid());
logfile = bu_vls_addr(&str);
bu_setenv("LOGFILE", logfile, 1);
fd = open(logfile, O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR);
if (fd < 0 || !bu_file_writable(logfile)) {
if (!BU_STR_EQUAL(logfile, "/dev/null")) {
bu_log("ERROR: Unable to log to %s\n", logfile);
}
/* FIXME: not valid logfile on windows, use 'nul' */
bu_setenv("LOGFILE", "/dev/null", 1);
}
}
if (bu_str_true(getenv("QUIET"))) {
if (bu_str_true(getenv("VERBOSE"))) {
bu_log("Verbose output quelled by quiet option. Further output disabled.\n");
}
} else {
if (bu_str_true(getenv("VERBOSE"))) {
verbose_echo=display;
bu_log("Verbose output enabled\n");
}
}
{
struct bu_vls v = BU_VLS_INIT_ZERO;
char rfc2822[1024] = {0};
#ifdef HAVE_SYS_UTSNAME_H
struct utsname n;
time_t t = time(NULL);
strftime(rfc2822, sizeof(rfc2822), "%a, %d %b %Y %H:%M:%S %Z", localtime(&t));
if (uname(&n) == 0) {
bu_vls_printf(&v, "%s %s %s %s %s", n.sysname, n.nodename, n.release, n.version, n.machine);
} else {
bu_vls_strcat(&v, "unknown");
}
#endif
echo("B R L - C A D B E N C H M A R K\n");
echo("=================================\n");
echo("Running %s on %s\n", av[0], rfc2822);
echo("Logging output to %s\n", getenv("LOGFILE"));
echo("%s\n\n", bu_vls_addr(&v));
}
bu_dir(root, MAXPATHLEN, BU_DIR_BIN, NULL);
bu_dir(db, MAXPATHLEN, BU_DIR_DATA, "db", NULL);
bu_dir(pix, MAXPATHLEN, BU_DIR_DATA, "pix" , NULL);
bu_dir(thisp, MAXPATHLEN, BU_DIR_CURR, NULL);
bu_vls_printf(&vp,
"%s/rt "
"%s/rt "
"./rt",
root, thisp);
bu_argv_from_string(argv, 32, bu_vls_addr(&vp));
look_for(verbose_echo, executable, "the BRL-CAD raytracer", "RT", (const char **)argv);
bu_vls_trunc(&vp, 0);
bu_vls_printf(&vp,
"%s/moss.g "
"%s/db/moss.g "
"%s/../db/moss.g "
"./db/moss.g "
"./moss.g",
db, thisp, thisp);
bu_argv_from_string(argv, 32, bu_vls_addr(&vp));
look_for(verbose_echo, file, "a benchmark geometry directory", "DB", (const char **)argv);
bu_vls_trunc(&vp, 0);
if (getenv("DB") && !bu_file_directory(getenv("DB"))) {
bu_setenv("DB", bu_path_dirname(getenv("DB")), 1);
}
bu_vls_printf(&vp,
"%s/moss.pix "
"%s/pix/moss.pix "
"%s/../pix/moss.pix "
"%s/../../pix/moss.pix "
"%s/../../../pix/moss.pix "
"./pix/moss.pix "
"./moss.pix",
pix, thisp, thisp, thisp, thisp);
bu_argv_from_string(argv, 32, bu_vls_addr(&vp));
look_for(verbose_echo, file, "a benchmark reference image directory", "PIX", (const char **)argv);
bu_vls_trunc(&vp, 0);
if (getenv("PIX") && !bu_file_directory(getenv("PIX"))) {
bu_setenv("PIX", bu_path_dirname(getenv("PIX")), 1);
}
bu_vls_printf(&vp,
"%s "
"%s "
"%s/pix "
"%s/../pix "
"%s/../../pix "
"%s/../../../pix "
"./pix",
getenv("PIX"), pix, thisp, thisp, thisp, thisp);
bu_argv_from_string(argv, 32, bu_vls_addr(&vp));
look_for(verbose_echo, directory, "a benchmark reference log directory", "LOG", (const char **)argv);
bu_vls_trunc(&vp, 0);
bu_vls_printf(&vp,
"%s/pixcmp "
"%s/pixcmp "
"%s/bench/pixcmp "
"%s/../bench/pixcmp "
"./pixcmp",
root, thisp, thisp, thisp);
bu_argv_from_string(argv, 32, bu_vls_addr(&vp));
look_for(verbose_echo, executable, "a pixel comparison utility", "CMP", (const char **)argv);
bu_vls_trunc(&vp, 0);
/* FIXME: elapsed is no more */
bu_vls_printf(&vp,
"%s/elapsed.sh "
"%s/elapsed.sh "
"%s/sh/elapsed.sh "
"%s/../sh/elapsed.sh "
"%s/../../sh/elapsed.sh "
"%s/../../../sh/elapsed.sh "
"./elapsed.sh",
root, thisp, thisp, thisp, thisp, thisp);
bu_argv_from_string(argv, 32, bu_vls_addr(&vp));
look_for(verbose_echo, script, "a time elapsed utility", "ELP", (const char **)argv);
bu_vls_trunc(&vp, 0);
/*********************
* output parameters *
*********************/
/* sanity check, output all the final settings together */
RT = getenv("RT");
if (RT && strlen(RT) > 0) {
echo("Using [%s] for RT\n", RT);
} else {
bu_exit(1, "ERROR: Could not find the BRL-CAD raytracer\n");
}
DB = getenv("DB");
if (DB && strlen(DB) > 0) {
echo("Using [%s] for DB\n", DB);
} else {
bu_exit(1, "ERROR: Could not find the BRL-CAD database directory\n");
}
PIX = getenv("PIX");
if (PIX && strlen(PIX) > 0) {
echo("Using [%s] for PIX\n", PIX);
} else {
bu_exit(1, "ERROR: Could not find the BRL-CAD reference images\n");
}
LOG = getenv("LOG");
if (LOG && strlen(LOG) > 0) {
echo("Using [%s] for LOG\n", LOG);
} else {
bu_exit(1, "ERROR: Could not find the BRL-CAD reference logs\n");
}
CMP = getenv("CMP");
if (CMP && strlen(CMP) > 0) {
echo("Using [%s] for CMP\n", CMP);
} else {
bu_exit(1, "ERROR: Could not find the BRL-CAD pixel comparison utility\n");
}
ELP = getenv("ELP");
if (ELP && strlen(ELP) > 0) {
echo("Using [%s] for ELP\n", ELP);
} else {
bu_exit(1, "ERROR: Could not find the BRL-CAD time elapsed script\n");
}
/* determine the minimum time requirement in seconds for a single test run */
set_if_unset(echo, verbose_echo, "TIMEFRAME", "32");
/* approximate maximum time in seconds that a given test is allowed to take */
set_if_unset(echo, verbose_echo, "MAXTIME", "300");
{
char *mtimestr = getenv("MAXTIME");
MAXTIME = (mtimestr) ? strtol(mtimestr, NULL, 0) : 300;
char *timeframestr = getenv("TIMEFRAME");
TIMEFRAME = (timeframestr) ? strtol(timeframestr, NULL, 0) : 32;
if (MAXTIME < TIMEFRAME) {
bu_exit(1, "ERROR: MAXTIME must be greater or equal to TIMEFRAME\n");
}
}
/* maximum deviation percentage */
set_if_unset(echo, verbose_echo, "DEVIATION", "3");
/* maximum number of iterations to average */
set_if_unset(echo, verbose_echo, "AVERAGE", "3");
/* end of settings, separate the output */
echo("\n");
/**************************
* output run-time status *
**************************/
/* determine raytracer version */
echo("RT reports the following version information:\n");
{
struct bu_vls rtout = BU_VLS_INIT_ZERO;
struct bu_vls grep1 = BU_VLS_INIT_ZERO;
struct bu_vls grep2 = BU_VLS_INIT_ZERO;
RT = getenv("RT");
bu_exec(RT, NULL, &rtout, &rtout);
bu_grep("BRL-CAD", bu_vls_cstr(&rtout), stashline, (void *)&grep1);
bu_grep("Release", bu_vls_cstr(&grep1), stashline, (void *)&grep2);
if (bu_vls_strlen(&grep2) > 0) {
echo("%s\n", bu_vls_addr(&grep2));
} else {
echo("Unknown\n\n");
}
bu_vls_free(&grep2);
bu_vls_free(&grep1);
bu_vls_free(&rtout);
}
/* let the user know about how long this might take */
{
struct bu_vls elapsed = BU_VLS_INIT_ZERO;
double mintime = 6.0 * TIMEFRAME;
double maxtime = 6.0 * MAXTIME;
double estimate = 3.0 * mintime;
if (mintime < 1.0)
mintime = 0; /* zero is okay */
bu_vls_sprintf(&elapsed, "%s", format_elapsed(mintime));
echo("Minimum run time is %s\n", bu_vls_cstr(&elapsed));
if (maxtime < 1.0)
maxtime = 1.0; /* zero would be misleading */
bu_vls_sprintf(&elapsed, "%s", format_elapsed(maxtime));
echo("Maximum run time is %s\n", bu_vls_cstr(&elapsed));
if (estimate > maxtime)
estimate = maxtime;
echo("Estimated time is %s\n", format_elapsed(estimate));
}
/************************
* Run the actual tests *
************************/
start = bu_gettime();
echo("Running the BRL-CAD Benchmark tests... please wait ...\n\n");
ret += bench("moss");
ret += bench("world");
ret += bench("star");
ret += bench("bldg391");
ret += bench("m35");
ret += bench("sphflake");
echo("\n... Done.\n");
echo("Total testing time elapsed: %.2lfs\n", format_elapsed(bu_gettime() - start));
if (ret != 0) {
echo("\n");
echo("THE BENCHMARK ANALYSIS DID NOT COMPLETE SUCCESSFULLY.\n");
echo("\n");
echo("A benchmark failure means this is not a viable install of BRL-CAD. This may be\n");
echo("a new bug or (more likely) is a compilation configuration error. Ensure your\n");
echo("compiler has strict aliasing disabled, compilation is optimized, and you have\n");
echo("installed BRL-CAD (some platforms require this). If you still get a failure,\n");
echo("please report your configuration information to benchmark@brlcad.org\n");
echo("\n");
echo("Output was saved to %s from %s\n", LOG, bu_dir(NULL, 0, BU_DIR_CURR, NULL));
echo("Run '%s clean' to remove generated pix files.\n", av[0]);
echo("Benchmark testing failed.\n");
return 2;
}
/******************************
* compute and output results *
******************************/
{
struct bu_vls performance = BU_VLS_INIT_ZERO;
ret = perf(&performance, /*...!!!...*/"moss world star bldg391 m35 sphflake", (const char **)argv);
if (ret == 0) {
/* !!! write performance to summary */
}
echo("\n");
echo("The following files have been generated and/or modified:\n");
echo(" *.log ..... final log files for each individual raytrace test\n");
echo(" *.pix ..... final pix image files for each individual raytrace test\n");
echo(" *.log.* ... log files for previous frames and raytrace tests\n");
echo(" *.pix.* ... pix image files for previous frames and raytrace tests\n");
echo(" summary ... performance results summary, 2 lines per run\n");
echo("\n");
echo("Run '%s clean' to remove generated pix files.\n", av[0]);
echo("\n");
echo("Summary:\n");
echo("%s\n", bu_vls_cstr(&performance));
{
double vgr = calculate_vgr(&performance);
if (vgr > 0.0) {
echo("\n");
echo("#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#\n");
echo("Benchmark results indicate an approximate VGR performance metric of %ld\n", (long int)vgr);
echo("Logarithmic VGR metric is %.2lf (natural logarithm is %.2lf)\n", log10(vgr), log(vgr));
echo("#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#\n");
echo("\n");
echo("These numbers seem to indicate that this machine is approximately %ld times", (long int)vgr);
echo("faster than the reference machine being used for comparison, a VAX 11/780\n");
echo("running 4.3 BSD named VGR. These results are in fact approximately %.2lf", log10(vgr));
echo("orders of magnitude faster than the reference.\n");
echo("\n");
echo("Here are some other approximated VGR results for perspective:\n");
echo(" 120 on a 200MHz R5000 running IRIX 6.5\n");
echo(" 250 on a 500 MHz Pentium III running RedHat 7.1\n");
echo(" 550 on a dual 450 MHz UltraSPARC II running SunOS 5.8\n");
echo(" 1000 on a dual 500 MHz G4 PowerPC running Mac OS X 10.2\n");
echo(" 1500 on a dual 1.66 GHz Athlon MP 2000+ running RedHat 7.3\n");
echo(" 52000 on a 4x4 CPU 2.93 GHz Xeon running RHEL Server 5.4\n");
echo(" 65000 on a 512 CPU 400 MHz R12000 Running IRIX 6.5\n");
echo("\n");
}
}
}
{
/* TODO: !!! determine if this build is optimized or not */
/* TODO: !!! determine if this build has run-time debugging */
/* TODO: !!! determine if this build has compile-time debugging */
}
/* if this was a valid benchmark run, encourage submission of results. */
echo("You are encouraged to submit your benchmark results and system\n");
echo("configuration information to benchmark@brlcad.org\n");
echo(" ~~~~~~~~~~~~~~~~~~~~\n");
/* include information about the operating system and hardware in the log */
echo("Including additional kernel and hardware information in the log.\n\n");
/* TODO: !!! print out system information via sysctl/prtdiag/prtconf/hinv/etc */
bu_vls_free(&rtargs);
bu_vls_printf(&vp,
"%s/../share/brlcad/*.*.*/doc/benchmark.tr "
"%s/share/brlcad/*.*.*/doc/benchmark.tr "
"%s/share/brlcad/doc/benchmark.tr "
"%s/share/doc/benchmark.tr "
"%s/doc/benchmark.tr "
"%s/../doc/benchmark.tr "
"./benchmark.tr",
thisp, thisp, thisp, thisp, thisp, thisp);
bu_argv_from_string(argv, 32, bu_vls_addr(&vp));
look_for(NULL, file, "BENCHMARK_TR", "benchmark", (const char **)argv);
bu_vls_trunc(&vp, 0);
/* TODO: look for benchmark document here? */
echo("Output was saved to %s from %s\n", LOG, bu_dir(NULL, 0, BU_DIR_CURR, NULL));
echo("Benchmark testing complete.\n");
return 0;
}
/*
* Local Variables:
* tab-width: 8
* mode: C
* indent-tabs-mode: t
* c-file-style: "stroustrup"
* End:
* ex: shiftwidth=4 tabstop=8
*/
-96
View File
@@ -1,96 +0,0 @@
/* C L E A N . C
* BRL-CAD
*
* Copyright (c) 2011-2025 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.
*/
/** @file clean.c
*
* utility functions to clean output files
*
*/
#include "common.h"
#include "bu/file.h"
#include "bu/str.h"
#include "bu/vls.h"
/* TODO: !!! needed */
//int bu_file_move(const char *fn1, const char *fn2) {if (!fn1 || !fn2) return -1; return 0;}
extern int bu_file_copy(const char *fn1, const char *fn2);
/**
* conditionally removes or saves any .pix or .log files output.
*/
void
clean_obstacles(const char *base_filename, int id)
{
struct bu_vls vp = BU_VLS_INIT_ZERO;
struct bu_vls vpid = BU_VLS_INIT_ZERO;
if (BU_STR_EMPTY(base_filename))
return;
/* look for an image file */
bu_vls_printf(&vp, "%s.pix", base_filename);
if (bu_file_exists(bu_vls_cstr(&vp), NULL)) {
bu_vls_printf(&vpid, "%s-%d.pix", base_filename, id);
if (bu_file_exists(bu_vls_cstr(&vpid), NULL)) {
bu_file_delete(bu_vls_cstr(&vp));
}
//bu_file_move(bu_vls_cstr(&vp), bu_vls_cstr(&vpid));
}
/* look for a log file */
bu_vls_printf(&vp, "%s.log", base_filename);
if (bu_file_exists(bu_vls_cstr(&vp), NULL)) {
bu_vls_printf(&vpid, "%s-%d.log", base_filename, id);
if (bu_file_exists(bu_vls_cstr(&vpid), NULL)) {
bu_file_delete(bu_vls_cstr(&vp));
}
//bu_file_move(bu_vls_cstr(&vp), bu_vls_cstr(&vpid));
}
}
/*
* Local Variables:
* tab-width: 8
* mode: C
* indent-tabs-mode: t
* c-file-style: "stroustrup"
* End:
* ex: shiftwidth=4 tabstop=8
*/
-96
View File
@@ -1,96 +0,0 @@
/* C O M P U T E . C
* BRL-CAD
*
* Copyright (c) 2011-2025 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.
*/
/** @file compute.c
*
* run and computation functions
*
*/
#include "common.h"
/**
* average [..numbers..]
*
* computes the integer average for a set of given numbers
*/
double
average(int ac, double av[])
{
double total = 0.0;
if (ac < 1)
return -0.0;
while (ac-- > 0) {
total += av[ac];
}
return total / ac;
}
double
variance(int ac, double av[])
{
double avg;
double err = 0.0;
double num = ac;
if (ac < 1)
return -0.0;
else if (ac == 1)
return 0.0;
avg = average(ac, av);
/* compute variance numerator for the population */
while (ac-- > 0) {
err += (av[ac] - avg) * (av[ac] - avg);
}
/* return the sample variance */
return err / (num - 1);
}
/*
* Local Variables:
* tab-width: 8
* mode: C
* indent-tabs-mode: t
* c-file-style: "stroustrup"
* End:
* ex: shiftwidth=4 tabstop=8
*/
Executable
+198
View File
@@ -0,0 +1,198 @@
#!/bin/sh
# L G T . S H
# BRL-CAD
#
# Copyright (c) 2004-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.
#
###
# A Shell script to test LGT
# @(#)$Header$ (BRL)
# Ensure /bin/sh
export PATH || (echo "This isn't sh."; sh $0 $*; kill $$)
path_to_lgt_sh=`dirname $0`
expected="$path_to_lgt_sh/../src/lgt/lgt"
if ! test -f "$expected" ; then
echo "Can't find LGT"
exit 1
fi
# force locale setting to C so things like date output as expected
LC_ALL=C
LGT="$expected"
DB="$path_to_lgt_sh/../db"
CMP="$path_to_lgt_sh/pixcmp"
if test ! -f $CMP ; then
cake pixcmp
fi
# Alliant NFS hack
if test x${MACHINE} = xfx ; then
cp ${LGT} /tmp/lgt
cp ${CMP} /tmp/pixcmp
LGT=/tmp/lgt
CMP=/tmp/pixcmp
fi
# This test of LGT assumes a "live" framebuffer here.
if test x$FB_FILE = x ; then
echo "Environment variable FB_FILE must be set to a real framebuffer"
echo "for this test of LGT to operate correctly."
exit 1
fi
# Run the first set of tests
${LGT} ${DB}/lgt-test.g all.g << EOF
# read light source data base
v ../db/lgt-test.ldb
# read material data base
w ../db/lgt-test.mdb
# force display window to be 512x512 pixels, should cause 8-to-1 zoom
T 512
# clear frame buffer
E
# set maximum bounces to 20
K 20
# turn hidden-line drawing off
k 0
# configure grid: 64 rays across
G 64 0 0 0.0
# turn perspective off
p 0
# change background to mauve
b 111 66 66
# read key frame
j ../db/lgt-test.key
# display view #3
R
# save image in file
H lgt3a.pix
# change frame buffer to disk file
o lgt3b.pix
# save a script of previous commands, to produce the "b" version.
S script3
# disable reading of key frame file
j
# change frame buffer back to default
o
# configure grid: 2.45 mm cells, centered about model origin, view size 225 mm
G 2.45 1 1 225.0
# change background to firebrick
b 142 35 35
# force frame buffer size to be 455 pixels across, should cause 4-to-1 zoom
T 455
# set automatic perspective at 0.25
p 0.25
# set anti-aliasing over-sampling factor to 2
A 2
# set maximum bounces to 20
K 20
# display view #1
R
# save image in file
H lgt1a.pix
# change frame buffer to disk file
o lgt1b.pix
# save a script
S script1
# change frame buffer back to default
o
# turn off anti-aliasing
A 1
# revert to auto-sizing of frame buffer
T 0
# set automatic perspective at 0.25
p 0.25
# select hidden-line drawing, reverse video
k 2
# configure grid: 128 rays across, centered at model RPP, view size 225mm
G 128 0 0 225.0
# display view #2
R
# save image in file
H lgt2a.pix
# change frame buffer to disk file
o lgt2b.pix
# save a script
S script2
# change frame buffer back to default
o
# bye
q
EOF
if test $? = 0 ; then
:
else
echo "Abnormal lgt exit"
exit 1
fi
# Run the second set of tests. The scripts were created above.
./script1 < /dev/null &&
./script2 < /dev/null &&
./script3 < /dev/null || { echo "Script test failed."; exit 1; }
FAIL=0
for i in 1 2 3 ; do
if ${CMP} "$path_to_lgt_sh/../pix/lgt${i}.pix" lgt${i}a.pix ; then
:
else
echo "Test $i A failed."
FAIL=1
fi
if ${CMP} "$path_to_lgt_sh/../pix/lgt${i}.pix" lgt${i}b.pix
then
:
else
echo "Test $i B failed."
FAIL=1
fi
done
if test "$FAIL" -eq 0 ; then
echo "LGT Tested OK."
exit 0
fi
echo "*** LGT does NOT work on this platform ***"
exit 2
# Local Variables:
# mode: sh
# tab-width: 8
# sh-indentation: 4
# sh-basic-offset: 4
# indent-tabs-mode: t
# End:
# ex: shiftwidth=4 tabstop=8
+123 -302
View File
@@ -1,7 +1,7 @@
/* P I X C M P . C
* BRL-CAD
*
* Copyright (c) 2004-2025 United States Government as represented by
* Copyright (c) 2004-2016 United States Government as represented by
* the U.S. Army Research Laboratory.
*
* This program is free software; you can redistribute it and/or
@@ -36,17 +36,6 @@
#endif
#include "bio.h"
// TODO - replace with std::filesystem::is_fifo
#ifndef S_ISFIFO
# ifdef S_IFIFO
# define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
# else
# define S_ISFIFO(mode) (0)
# endif
#endif
#include <errno.h>
#include "bu/app.h"
#include "bu/getopt.h"
#include "bu/log.h"
#include "bu/file.h"
@@ -57,59 +46,39 @@
#define FILE_ERROR 126
/* exit codes for normal operation */
#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
};
#define OFF_BY_NONE 0
#define OFF_BY_ONE 1
#define OFF_BY_MANY 2
static void
HIDDEN void
usage(const char *name)
{
const char *unknown = "pixcmp";
if (!name) {
name = unknown;
}
/* 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"
/* 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"
" -i SKIP\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");
" 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");
return;
}
static void
handle_range_opt(const char *arg, size_t *skip1, size_t *skip2)
HIDDEN void
handle_i_opt(const char *arg, off_t *skip1, off_t *skip2)
{
const char *endptr = arg;
long val;
if ((arg == NULL) || ((skip1 == NULL) && (skip2 == NULL))) {
/* nothing to do */
return;
@@ -121,14 +90,12 @@ handle_range_opt(const char *arg, size_t *skip1, size_t *skip2)
/* probably empty string */
if (skip2) {
endptr++;
val = strtol(endptr, NULL, 10);
*skip2 = (val < 0) ? 0 : val;
*skip2 = strtol(endptr, NULL, 10);
}
} else if ((endptr == NULL) || (endptr[0] == '\0')) {
/* no : found */
if (skip2) {
val = strtol(arg, NULL, 10);
*skip2 = (val < 0) ? 0 : val;
*skip2 = strtol(arg, NULL, 10);
}
if (skip1 && skip2) {
*skip1 = *skip2;
@@ -136,13 +103,11 @@ handle_range_opt(const char *arg, size_t *skip1, size_t *skip2)
} else if (endptr[0] == ':') {
/* found : */
if (skip1) {
val = strtol(arg, NULL, 10);
*skip1 = (val < 0) ? 0 : val;
*skip1 = strtol(arg, NULL, 10);
}
if (skip2) {
endptr++; /* skip over : */
val = strtol(endptr, NULL, 10);
*skip2 = (val < 0) ? 0 : val;
*skip2 = strtol(endptr, NULL, 10);
}
} else {
bu_exit(OPTS_ERROR, "Unexpected input processing [%s]\n", arg);
@@ -150,120 +115,44 @@ handle_range_opt(const char *arg, size_t *skip1, size_t *skip2)
}
static 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;
struct stat sf2;
struct stat sf1, sf2;
memset(&sf1, 0, sizeof(struct stat));
memset(&sf2, 0, sizeof(struct stat));
size_t matching = 0;
size_t off1 = 0;
size_t offmany = 0;
size_t missing = 0;
long matching = 0;
long off1 = 0;
long offmany = 0;
int c;
int list_diff = 0;
int list_same = 0;
int list_pixel_values = 0;
int print_bytes = 0;
int quiet = 0;
int silent = 0;
off_t f1_skip = 0;
off_t f2_skip = 0;
size_t bytes = 0;
size_t f1_skip = 0;
size_t f2_skip = 0;
size_t stop_after = 0;
bu_setprogname(argv[0]);
long int bytes = 0;
/* process opts */
while ((c = bu_getopt(argc, argv, "sdbi:n:q?")) != -1) {
while ((c = bu_getopt(argc, argv, "lbi:s")) != -1) {
switch (c) {
case 's':
list_same = 1;
break;
case 'd':
list_diff = 1;
case 'l':
list_pixel_values = 1;
break;
case 'b':
print_bytes = 1;
break;
case 'i':
handle_range_opt(bu_optarg, &f1_skip, &f2_skip);
handle_i_opt(bu_optarg, &f1_skip, &f2_skip);
break;
case 'n':
{
long num = strtol(bu_optarg, NULL, 10);
stop_after = (num < 0) ? 0 : num;
case 's':
silent = 1;
break;
}
case 'q':
quiet = 1;
break;
case '?':
case 'h':
usage(argv0);
return 0;
default:
bu_log("\n");
usage(argv[0]);
exit(OPTS_ERROR);
}
}
@@ -273,17 +162,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(argv0);
usage(argv[0]);
exit(OPTS_ERROR);
}
if ((argc > 0 && !argv[0]) || (argc > 1 && !argv[1])) {
bu_log("ERROR: bad filename\n\n");
usage(argv0);
usage(argv[0]);
exit(OPTS_ERROR);
}
if ((argc > 2 && !argv[2]) || (argc > 3 && !argv[3])) {
bu_log("ERROR: bad skip value\n\n");
usage(argv0);
usage(argv[0]);
exit(OPTS_ERROR);
}
@@ -295,25 +184,10 @@ main(int argc, char *argv[])
} else {
snprintf(range, 64, "%s", argv[2]);
}
handle_range_opt(range, &f1_skip, &f2_skip);
handle_i_opt(range, &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;
}
/* printf("Skip from FILE1: %ld and from FILE2: %ld\n", f1_skip, f2_skip); */
if (BU_STR_EQUAL(argv[0], "-")) {
f1 = stdin;
@@ -321,7 +195,6 @@ 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) {
@@ -329,165 +202,108 @@ main(int argc, char *argv[])
exit(FILE_ERROR);
}
setmode(fileno(stdin), O_BINARY);
/* we're writing out ascii */
/* setmode(fileno(stdout), O_BINARY); */
stat(argv[0], &sf1);
stat(argv[1], &sf2);
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 (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], sf1.st_size, argv[1], sf2.st_size);
}
errno = 0;
if (fstat(fileno(f1), &sf1)) {
bu_log("Warning - f1 fstat failed: %s\n", strerror(errno));
if (!print_bytes) {
f1_skip *= 3;
f2_skip *= 3;
}
errno = 0;
if (fstat(fileno(f2), &sf2)) {
bu_log("Warning - f2 fstat failed: %s\n", strerror(errno));
}
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: %7zu bytes (%8zu bytes, skipping %7zu)\n",
argv[0], (size_t)sf1.st_size - f1_skip, (size_t)sf1.st_size, f1_skip);
bu_log("\t%s: %7zu bytes (%8zu bytes, skipping %7zu)\n",
argv[1], (size_t)sf2.st_size - f2_skip, (size_t)sf2.st_size, f2_skip);
} else {
bu_log("\t%s: %7zu pixels (%8zu bytes, skipping %7zu)\n",
argv[0], ((size_t)sf1.st_size - f1_skip)/3, (size_t)sf1.st_size, f1_skip);
bu_log("\t%s: %7zu pixels (%8zu bytes, skipping %7zu)\n",
argv[1], ((size_t)sf2.st_size - f2_skip)/3, (size_t)sf2.st_size, 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) {
if (S_ISFIFO(sf1.st_mode)) {
size_t skipped = 0;
for (skipped = 0; skipped < f1_skip; skipped++) {
(void)fgetc(f1);
}
} else if (fseek(f1, (long)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 && bu_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) {
if (S_ISFIFO(sf2.st_mode)) {
size_t skipped = 0;
for (skipped = 0; skipped < f2_skip; skipped++) {
(void)fgetc(f2);
}
} else if (fseek(f2, (long)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");
}
if (f2_skip && bu_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);
}
/* iterate over the pixels/bytes in the files */
while (bytes < stop_after) {
enum diff result;
int r1 = -1;
int r2 = -1;
int g1 = -1;
int g2 = -1;
int b1 = -1;
int b2 = -1;
/* bu_log("\tbytes[%zu] < stop[%zu\n", bytes, stop_after); */
while ((!feof(f1) && !feof(f2)) &&
(!ferror(f1) && !ferror(f2))) {
register int r1, r2, g1, g2, b1, b2;
r1 = r2 = g1 = g2 = b1 = b2 = -1;
r1 = fgetc(f1);
r2 = fgetc(f2);
if (feof(f1) || feof(f2)) break;
bytes++;
if (print_bytes) {
/* replicate */
b1 = g1 = 0;
b2 = g2 = 0;
} else {
if (!print_bytes) {
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++;
}
result = compare_rgb(r1, g1, b1, r2, g2, b2, &matching, &off1, &offmany, &missing);
if ((r1 == r2) && (g1 == g2) && (b1 == b2)) {
matching++;
continue;
}
/* 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;
/* 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++;
}
}
} else {
/* off by many */
offmany++;
}
/* they're different, so print something */
if (list_pixel_values) {
if (print_bytes) {
printf("%zu %3d %3d %s\n", bytes, r1, r2, label);
printf("%ld %3d %3d\n", bytes, r1, r2);
} else {
printf("%zu\t(%3d, %3d, %3d)\t(%3d, %3d, %3d) %s\n", bytes / 3, r1, g1, b1, r2, g2, b2, label);
printf("%ld\t(%3d, %3d, %3d)\t(%3d, %3d, %3d)\n", bytes / 3, r1, g1, b1, r2, g2, b2);
}
}
}
/* print summary */
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");
}
if (!silent) {
printf("pixcmp %s: %8ld matching, %8ld off by 1, %8ld off by many\n",
print_bytes?"bytes":"pixels",
matching, off1, offmany);
}
/* check for errors */
@@ -496,16 +312,21 @@ 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 || missing) {
return EXIT_OFF_BY_MANY;
if (offmany) {
return OFF_BY_MANY;
}
if (off1) {
return EXIT_OFF_BY_ONE;
return OFF_BY_ONE;
}
/* Success! */
return EXIT_OFF_BY_NONE;
return OFF_BY_NONE;
}
+9 -11
View File
@@ -1,29 +1,27 @@
set(
BENCHMARK_PIX
set(BENCHMARK_PIX
bldg391.pix
m35.pix
moss.pix
sphflake.pix
star.pix
world.pix
)
)
set(
PIX_LOG
set(PIX_LOG
bldg391.log
m35.log
moss.log
sphflake.log
star.log
world.log
)
)
brlcad_adddata(BENCHMARK_PIX pix)
brlcad_adddata(PIX_LOG pix)
BRLCAD_ADDDATA(BENCHMARK_PIX pix)
BRLCAD_ADDDATA(PIX_LOG pix)
cmakefiles(${BENCHMARK_PIX})
cmakefiles(${PIX_LOG})
cmakefiles(CMakeLists.txt)
CMAKEFILES(${BENCHMARK_PIX})
CMAKEFILES(${PIX_LOG})
# Local Variables:
# tab-width: 8
-114
View File
@@ -1,114 +0,0 @@
/* R U N . C
* BRL-CAD
*
* Copyright (c) 2011-2025 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.
*/
/** @file run.c
*
* run functions
*
*/
#include "common.h"
#include <stdlib.h>
#include "bu.h"
/* TODO: !!! obviously */
struct bu_vls bu_argv_to_string(int ac, const char *av[]) {struct bu_vls v = BU_VLS_INIT_ZERO; if (ac) {bu_vls_printf(&v, "%s", av[0]);} return v;}
int (*echo)(const char *, ...) = &bu_log;
extern int bu_exec(const char *program, void *data, struct bu_vls *out, struct bu_vls *err);
/**
* run file_prefix geometry hypersample [..rt args..]
* runs a single benchmark test assuming the following are preset:
*
* RT := path/name of the raytracer to use
* DB := path to the geometry file
*
* it is assumed that stdin will be the view/frame input
*/
int
run(int ac, char *av[])
{
int retval;
const char *run_geomname = av[0];
const char *run_geometry = av[1];
long int hypersample = strtod(av[2], NULL);
av += 3;
ac -= 3;
{
struct bu_vls args = bu_argv_to_string(ac, (const char **)av);
echo("DEBUG: Running %s -B -M -s512 -H%ld -J0 %s -o %s.pix %s/%s.g %s\n", av[0], hypersample, args, run_geomname, run_geomname, run_geometry);
bu_vls_free(&args);
}
/* pipe(stdin_for_bu_exec); */
retval = bu_exec("program", NULL, NULL, NULL);
echo("DEBUG: Running %s returned %d\n", av[0], retval);
return retval;
}
/**
* runs a series of benchmark tests assuming the following are preset:
*
* TIMEFRAME := maximum amount of wallclock time to spend per test
*
* is is assumed that stdin will be the view/frame input
*/
int
bench(const char *test_name)
{
if (!test_name)
return -1;
/* FIXME: !!! lots missing here */
return 0;
}
/*
* Local Variables:
* tab-width: 8
* mode: C
* indent-tabs-mode: t
* c-file-style: "stroustrup"
* End:
* ex: shiftwidth=4 tabstop=8
*/
+27 -57
View File
@@ -2,7 +2,7 @@
# R U N . S H
# BRL-CAD
#
# Copyright (c) 2004-2025 United States Government as represented by
# Copyright (c) 2004-2016 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
@@ -70,29 +70,25 @@ LC_ALL=C
# commands that this script expects
for __cmd in echo pwd ; do
out=`echo "test" | $__cmd 2>&1`
echo "test" | $__cmd > /dev/null 2>&1
if test ! x$? = x0 ; then
echo "INTERNAL ERROR: $__cmd command is required"
echo " (output was [$out])"
exit 1
fi
done
out=`echo "test" | grep "test" 2>&1`
echo "test" | grep "test" > /dev/null 2>&1
if test ! x$? = x0 ; then
echo "INTERNAL ERROR: grep command is required"
echo " (output was [$out])"
exit 1
fi
out=`echo "test" | tr "test" "test" 2>&1`
echo "test" | tr "test" "test" > /dev/null 2>&1
if test ! x$? = x0 ; then
echo "INTERNAL ERROR: tr command is required"
echo " (output was [$out])"
exit 1
fi
out=`echo "test" | sed "s/test/test/" 2>&1`
echo "test" | sed "s/test/test/" > /dev/null 2>&1
if test ! x$? = x0 ; then
echo "INTERNAL ERROR: sed command is required"
echo " (output was [$out])"
exit 1
fi
@@ -105,13 +101,6 @@ case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
*) ECHO_N= ECHO_C='\c' ECHO_T= ;;
esac
# Use a local cache
BU_DIR_CACHE="`pwd`/cache-$$-benchmark"
rm -rf $BU_DIR_CACHE && mkdir $BU_DIR_CACHE
export BU_DIR_CACHE
LIBRT_CACHE="`pwd`/rtcache-$$-benchmark"
rm -rf $LIBRT_CACHE && mkdir $LIBRT_CACHE
export LIBRT_CACHE
#######################
# log to tty and file #
@@ -402,14 +391,12 @@ fi
# where to write results
LOGFILE=run-$$-benchmark.log
if test -e $LOGFILE ; then
echo "WARNING: $LOGFILE already exists. Appending."
else
touch "$LOGFILE"
fi
touch "$LOGFILE"
if test ! -w "$LOGFILE" ; then
echo "WARNING: Unable to log to $LOGFILE"
LOGFILE=
if test ! "x$LOGFILE" = "x/dev/null" ; then
echo "ERROR: Unable to log to $LOGFILE"
fi
LOGFILE=/dev/null
fi
VERBOSE_ECHO=:
@@ -428,13 +415,7 @@ fi
$ECHO "B R L - C A D B E N C H M A R K"
$ECHO "================================="
$ECHO "Running $THIS on `date`"
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 "Logging output to $LOGFILE"
$ECHO "`uname -a 2>&1`"
$ECHO
@@ -603,11 +584,8 @@ else
$ECHO "Using [$ELP] for ELP"
fi
# stop git shell & msys2 arg manipulation
export MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL="-F/dev/debug"
# sanity check: make sure $RT runs
out=`eval \"$RT\" -s1 -F/dev/debug \"${DB}/moss.g\" LIGHT 2>&1`
# more sanity checks, make sure the binaries and scripts run
eval \"$RT\" -s1 -F/dev/debug \"${DB}/moss.g\" LIGHT > /dev/null 2>&1
ret=$?
if test ! "x${ret}" = "x0" ; then
$ECHO
@@ -615,27 +593,25 @@ 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
out=`eval \"$CMP\" - - 2>&1 <<EOF
EOF`
# create a temporary file named "null", fopen("/dev/null") does not work on
# windows (using cygwin), so punt.
> null
eval \"$CMP\" null null >/dev/null 2>&1
rm -f null
ret=$?
if test ! "x${ret}" = "x0" ; then
$ECHO
$ECHO "ERROR: CMP does not seem to work as expected"
$ECHO " (returned $ret, output was [$out])"
exit 2
fi
# sanity check: make sure $ELP runs
out=`eval \"$ELP\" 0 2>&1`
eval \"$ELP\" 0 > /dev/null 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
@@ -695,8 +671,7 @@ $ECHO
# if expr works, let the user know about how long this might take
zero=`expr 1 - 1 2>&1`
if test "x$zero" = "x0" ; then
if test "x`expr 1 - 1 2>/dev/null`" = "x0" ; then
mintime="`expr 6 \* $TIMEFRAME`"
if test $mintime -lt 1 ; then
mintime=0 # zero is okay
@@ -718,7 +693,6 @@ if test "x$zero" = "x0" ; then
$ECHO
else
$ECHO "WARNING: expr is unavailable, unable to compute statistics"
$ECHO " (output of 1 - 1 was [$zero])"
$ECHO
fi
@@ -885,13 +859,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 ; then
elif test $sqrt_number -lt 0 > /dev/null 2>&1 ; then
$ECHO "ERROR: square root of negative numbers is only in your imagination" 1>&2
exit 1
fi
sqrt_have_dc=yes
out=`echo "1 1 + p" | dc 2>&1`
echo "1 1 + p" | dc >/dev/null 2>&1
if test ! x$? = x0 ; then
sqrt_have_dc=no
fi
@@ -901,7 +875,7 @@ sqrt ( ) {
sqrt_root=`echo "$sqrt_number v p" | dc`
else
sqrt_have_bc=yes
out=`echo "1 + 1" | bc 2>&1`
echo "1 + 1" | bc >/dev/null 2>&1
if test ! "x$?" = "x0" ; then
sqrt_have_bc=no
fi
@@ -1148,7 +1122,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 | grep pixels`"
cmp_result="`eval \\\"${CMP}\\\" \\\"${PIX}/${bench_testname}.pix\\\" ${bench_testname}.pix 2>&1`"
ret=$?
$ECHO "$cmp_result"
@@ -1251,13 +1225,13 @@ perf ( ) {
# see if we have a calculator
perf_have_dc=yes
out=`echo "1 1 + p" | dc 2>&1`
echo "1 1 + p" | dc >/dev/null 2>&1
if test ! x$? = x0 ; then
perf_have_dc=no
fi
perf_have_bc=yes
out=`echo "1 + 1" | bc 2>&1`
echo "1 + 1" | bc >/dev/null 2>&1
if test ! x$? = x0 ; then
perf_have_bc=no
fi
@@ -1622,10 +1596,6 @@ else
fi
$ECHO
# Cleanup
rm -rf "$BU_DIR_CACHE"
rm -rf "$LIBRT_CACHE"
$ECHO "Output was saved to $LOGFILE from `pwd`"
$ECHO "Benchmark testing complete."
+1 -1
View File
@@ -2,7 +2,7 @@
# T R Y . S H
# BRL-CAD
#
# Copyright (c) 2004-2025 United States Government as represented by
# Copyright (c) 2004-2016 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
+1 -1
View File
@@ -2,7 +2,7 @@
# V I E W D I F F . S H
# BRL-CAD
#
# Copyright (c) 2004-2025 United States Government as represented by
# Copyright (c) 2004-2016 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
Vendored Executable
+233
View File
@@ -0,0 +1,233 @@
#!/bin/sh
#
# This is a simple script to translate autotools style
# configure options into CMake variables. The resulting
# translation is then run as a CMake configure.
srcpath=$(dirname $0)
options="$srcpath"
while [ "$1" != "" ]
do
case $1
in
--enable-all) options="$options -DBRLCAD_BUNDLED_LIBS=ON";
shift;;
--disable-all) options="$options -DBRLCAD_BUNDLED_LIBS=OFF";
shift;;
--enable-opengl) options="$options -DBRLCAD_ENABLE_OPENGL=ON";
shift;;
--disable-opengl) options="$options -DBRLCAD_ENABLE_OPENGL=OFF";
shift;;
--enable-runtime-debug) options="$options -DBRLCAD_ENABLE_RUNTIME_DEBUG=ON";
shift;;
--disable-runtime-debug) options="$options -DBRLCAD_ENABLE_RUNTIME_DEBUG=OFF";
shift;;
--enable-run-time-debug) options="$options -DBRLCAD_ENABLE_RUNTIME_DEBUG=ON";
shift;;
--disable-run-time-debug) options="$options -DBRLCAD_ENABLE_RUNTIME_DEBUG=OFF";
shift;;
--enable-runtime-debugging) options="$options -DBRLCAD_ENABLE_RUNTIME_DEBUG=ON";
shift;;
--disable-runtime-debugging) options="$options -DBRLCAD_ENABLE_RUNTIME_DEBUG=OFF";
shift;;
--enable-run-time-debugging) options="$options -DBRLCAD_ENABLE_RUNTIME_DEBUG=ON";
shift;;
--disable-run-time-debugging) options="$options -DBRLCAD_ENABLE_RUNTIME_DEBUG=OFF";
shift;;
--enable-debug) options="$options -DBRLCAD_FLAGS_DEBUG=ON";
shift;;
--disable-debug) options="$options -DBRLCAD_FLAGS_DEBUG=OFF";
shift;;
--enable-flags-debug) options="$options -DBRLCAD_FLAGS_DEBUG=ON";
shift;;
--disable-flags-debug) options="$options -DBRLCAD_FLAGS_DEBUG=OFF";
shift;;
--enable-debug-flags) options="$options -DBRLCAD_FLAGS_DEBUG=ON";
shift;;
--disable-debug-flags) options="$options -DBRLCAD_FLAGS_DEBUG=OFF";
shift;;
--enable-warnings) options="$options -DBRLCAD_ENABLE_COMPILER_WARNINGS=ON";
shift;;
--disable-warnings) options="$options -DBRLCAD_ENABLE_COMPILER_WARNINGS=OFF";
shift;;
--enable-compiler-warnings) options="$options -DBRLCAD_ENABLE_COMPILER_WARNINGS=ON";
shift;;
--disable-compiler-warnings) options="$options -DBRLCAD_ENABLE_COMPILER_WARNINGS=OFF";
shift;;
--enable-strict) options="$options -DBRLCAD_ENABLE_STRICT=ON";
shift;;
--disable-strict) options="$options -DBRLCAD_ENABLE_STRICT=OFF";
shift;;
--enable-strict-compile) options="$options -DBRLCAD_ENABLE_STRICT=ON";
shift;;
--disable-strict-compile) options="$options -DBRLCAD_ENABLE_STRICT=OFF";
shift;;
--enable-strict-compile-flags) options="$options -DBRLCAD_ENABLE_STRICT=ON";
shift;;
--disable-strict-compile-flags) options="$options -DBRLCAD_ENABLE_STRICT=OFF";
shift;;
--enable-all-cxx) options="$options -DENABLE_ALL_CXX_COMPILE=ON";
shift;;
--disable-all-cxx) options="$options -DENABLE_ALL_CXX_COMPILE=OFF";
shift;;
--enable-posix) options="$options -DENABLE_POSIX_COMPLIANCE=ON";
shift;;
--disable-posix) options="$options -DENABLE_POSIX_COMPLIANCE=OFF";
shift;;
--strict-iso-c) options="$options -DENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE=ON";
shift;;
--strict-iso-c) options="$options -DENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE=OFF";
shift;;
--enable-docs) options="$options -DBRLCAD_EXTRADOCS=ON";
shift;;
--disable-docs) options="$options -DBRLCAD_EXTRADOCS=OFF";
shift;;
--enable-extra-docs) options="$options -DBRLCAD_EXTRADOCS=ON";
shift;;
--disable-extra-docs) options="$options -DBRLCAD_EXTRADOCS=OFF";
shift;;
--enable-docbook) options="$options -DBRLCAD_EXTRADOCS=ON";
shift;;
--disable-docbook) options="$options -DBRLCAD_EXTRADOCS=OFF";
shift;;
--enable-lemon) options="$options -DBRLCAD_LEMON=BUNDLED";
shift;;
--disable-lemon) options="$options -DBRLCAD_LEMON=SYSTEM";
shift;;
--enable-re2c) options="$options -DBRLCAD_RE2C=BUNDLED";
shift;;
--disable-re2c) options="$options -DBRLCAD_RE2C=SYSTEM";
shift;;
--enable-perplex) options="$options -DBRLCAD_PERPLEX=BUNDLED";
shift;;
--disable-perplex) options="$options -DBRLCAD_PERPLEX=SYSTEM";
shift;;
--enable-astyle) options="$options -DBRLCAD_ASTYLE=BUNDLED";
shift;;
--disable-astyle) options="$options -DBRLCAD_ASTYLE=SYSTEM";
shift;;
--enable-xsltproc) options="$options -DBRLCAD_XSLTPROC=BUNDLED";
shift;;
--disable-xsltproc) options="$options -DBRLCAD_XSLTPROC=SYSTEM";
shift;;
--enable-xmllint) options="$options -DBRLCAD_XMLLINT=BUNDLED";
shift;;
--disable-xmllint) options="$options -DBRLCAD_XMLLINT=SYSTEM";
shift;;
--enable-regex) options="$options -DBRLCAD_REGEX=BUNDLED";
shift;;
--disable-regex) options="$options -DBRLCAD_REGEX=SYSTEM";
shift;;
--enable-zlib) options="$options -DBRLCAD_ZLIB=BUNDLED";
shift;;
--disable-zlib) options="$options -DBRLCAD_ZLIB=SYSTEM";
shift;;
--enable-libz) options="$options -DBRLCAD_ZLIB=BUNDLED";
shift;;
--disable-libz) options="$options -DBRLCAD_ZLIB=SYSTEM";
shift;;
--enable-tinycthread) options="$options -DBRLCAD_TINYCTHREAD=BUNDLED";
shift;;
--disable-tinycthread) options="$options -DBRLCAD_TINYCTHREAD=SYSTEM";
shift;;
--enable-freetype) options="$options -DBRLCAD_FREETYPE=BUNDLED";
shift;;
--disable-freetype) options="$options -DBRLCAD_FREETYPE=SYSTEM";
shift;;
--enable-termlib) options="$options -DBRLCAD_TERMLIB=BUNDLED";
shift;;
--disable-termlib) options="$options -DBRLCAD_TERMLIB=SYSTEM";
shift;;
--enable-netpbm) options="$options -DBRLCAD_NETPBM=BUNDLED";
shift;;
--disable-netpbm) options="$options -DBRLCAD_NETPBM=SYSTEM";
shift;;
--enable-png) options="$options -DBRLCAD_PNG=BUNDLED";
shift;;
--disable-png) options="$options -DBRLCAD_PNG=SYSTEM";
shift;;
--enable-utahrle) options="$options -DBRLCAD_UTAHRLE=BUNDLED";
shift;;
--disable-utahrle) options="$options -DBRLCAD_UTAHRLE=SYSTEM";
shift;;
--enable-tcl) options="$options -DBRLCAD_TCL=BUNDLED";
shift;;
--disable-tcl) options="$options -DBRLCAD_TCL=SYSTEM";
shift;;
--enable-tk) options="$options -DBRLCAD_TK=BUNDLED";
shift;;
--disable-tk) options="$options -DBRLCAD_TK=SYSTEM";
shift;;
--enable-itcl) options="$options -DBRLCAD_ITCL=BUNDLED";
shift;;
--disable-itcl) options="$options -DBRLCAD_ITCL=SYSTEM";
shift;;
--enable-itk) options="$options -DBRLCAD_ITK=BUNDLED";
shift;;
--disable-itk) options="$options -DBRLCAD_ITK=SYSTEM";
shift;;
--enable-iwidgets) options="$options -DBRLCAD_IWIDGETS=BUNDLED";
shift;;
--disable-iwidgets) options="$options -DBRLCAD_IWIDGETS=SYSTEM";
shift;;
--enable-tkhtml) options="$options -DBRLCAD_TKHTML=BUNDLED";
shift;;
--disable-tkhtml) options="$options -DBRLCAD_TKHTML=SYSTEM";
shift;;
--enable-tkpng) options="$options -DBRLCAD_TKPNG=BUNDLED";
shift;;
--disable-tkpng) options="$options -DBRLCAD_TKPNG=SYSTEM";
shift;;
--enable-tktable) options="$options -DBRLCAD_TKTABLE=BUNDLED";
shift;;
--disable-tktable) options="$options -DBRLCAD_TKTABLE=SYSTEM";
shift;;
--enable-opennurbs) options="$options -DBRLCAD_OPENNURBS=BUNDLED";
shift;;
--disable-opennurbs) options="$options -DBRLCAD_OPENNURBS=SYSTEM";
shift;;
--enable-spr) options="$options -DBRLCAD_SPR=BUNDLED";
shift;;
--disable-spr) options="$options -DBRLCAD_SPR=SYSTEM";
shift;;
--enable-bson) options="$options -DBRLCAD_BSON=BUNDLED";
shift;;
--disable-bson) options="$options -DBRLCAD_BSON=SYSTEM";
shift;;
--enable-scl) options="$options -DBRLCAD_SC=BUNDLED";
shift;;
--disable-scl) options="$options -DBRLCAD_SC=SYSTEM";
shift;;
--enable-step) options="$options -DBRLCAD_SC=BUNDLED";
shift;;
--disable-step) options="$options -DBRLCAD_SC=SYSTEM";
shift;;
--enable-step-class-libraries) options="$options -DBRLCAD_SC=BUNDLED";
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-bullet) options="$options -DBRLCAD_BULLET=BUNDLED";
shift;;
--disable-bullet) options="$options -DBRLCAD_BULLET=SYSTEM";
shift;;
--prefix=*) inputstr=$1;
options="$options -DCMAKE_INSTALL_PREFIX=${inputstr#--prefix=}";
shift;;
*) echo "Warning: unknown option $1";
shift;;
esac
done
echo cmake $options
cmake $options
BIN
View File
Binary file not shown.
+49 -245
View File
@@ -1,146 +1,4 @@
function(G_TARGET in_model folder)
# Initialize
set(MODEL_TYPE "UNKNOWN")
# Regardless of what we decide, let CMake know about the file
cmakefiles(${CMAKE_CURRENT_SOURCE_DIR}/${in_model})
# Find our conversion type
set(model_types "3dm;asc;comgeom;fg4;stp")
foreach(mt ${model_types})
if("${MODEL_TYPE}" STREQUAL "UNKNOWN")
if("${in_model}" MATCHES ".${mt}$")
set(MODEL_TYPE "${mt}")
string(REGEX REPLACE "([0-9a-z]*).${mt}" "\\1" in_model_root "${in_model}")
endif("${in_model}" MATCHES ".${mt}$")
endif("${MODEL_TYPE}" STREQUAL "UNKNOWN")
endforeach(mt ${model_types})
if("${MODEL_TYPE}" STREQUAL "UNKNOWN")
message(FATAL_ERROR "Unable to identify input model type for file ${in_model}")
endif("${MODEL_TYPE}" STREQUAL "UNKNOWN")
# Make sure variables are set up for configure_file
set(in_model_root "${in_model_root}")
# Find our output file and path
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" rel_dir "${CMAKE_CURRENT_SOURCE_DIR}")
set(output_file ${DATA_DIR}/${rel_dir}/${in_model_root}.g)
set(log_file ${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.log)
# Make sure the output db target directory is there
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${DATA_DIR}/${rel_dir}")
# Rhino 3DM file
if(${MODEL_TYPE} STREQUAL "3dm")
if(NOT TARGET 3dm-g)
return()
endif(NOT TARGET 3dm-g)
set(CONV_ARGS "-o \"${CMAKE_BINARY_DIR}/${output_file}\" \"${CMAKE_CURRENT_SOURCE_DIR}/${in_model}\"")
configure_file("${CMAKE_SOURCE_DIR}/db/to_g.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake" @ONLY)
distclean("${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake")
# Custom command to generate the output
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/${output_file}
COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_BINARY_DIR}/${output_file}"
COMMAND ${CMAKE_COMMAND} -DEXEC=$<TARGET_FILE:3dm-g> -P "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake"
DEPENDS 3dm-g ${CMAKE_CURRENT_SOURCE_DIR}/${in_model}
)
endif(${MODEL_TYPE} STREQUAL "3dm")
# BRL-CAD ASCII database
if(${MODEL_TYPE} STREQUAL "asc")
set(CONV_ARGS "\"${CMAKE_CURRENT_SOURCE_DIR}/${in_model}\" \"${CMAKE_BINARY_DIR}/${output_file}\"")
configure_file("${CMAKE_SOURCE_DIR}/db/to_g.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake" @ONLY)
distclean("${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake")
if(BRLCAD_ENABLE_TCL)
if(NOT TARGET asc2g)
return()
endif(NOT TARGET asc2g)
# Custom command to generate the output
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/${output_file}
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/${output_file}
COMMAND ${CMAKE_COMMAND} -DEXEC=$<TARGET_FILE:asc2g> -P "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake"
DEPENDS asc2g "${CMAKE_CURRENT_SOURCE_DIR}/${in_model}"
)
else(BRLCAD_ENABLE_TCL)
if(NOT TARGET gcv)
return()
endif(NOT TARGET gcv)
# Custom command to generate the output
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/${output_file}
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/${output_file}
COMMAND ${CMAKE_COMMAND} -DEXEC=$<TARGET_FILE:gcv> -P "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake"
DEPENDS gcv "${CMAKE_CURRENT_SOURCE_DIR}/${in_model}"
)
endif(BRLCAD_ENABLE_TCL)
endif(${MODEL_TYPE} STREQUAL "asc")
# COMGEOM (pre BRL-CAD Geometry Information For Targets (GIFT) files)
if(${MODEL_TYPE} STREQUAL "comgeom")
if(NOT TARGET comgeom-g)
return()
endif(NOT TARGET comgeom-g)
set(CONV_ARGS "-v 5 \"${CMAKE_CURRENT_SOURCE_DIR}/${in_model}\" \"${CMAKE_BINARY_DIR}/${output_file}\"")
configure_file("${CMAKE_SOURCE_DIR}/db/to_g.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake" @ONLY)
distclean("${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake")
# Custom command to generate the output
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/${output_file}
COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_BINARY_DIR}/${output_file}"
COMMAND ${CMAKE_COMMAND} -DEXEC=$<TARGET_FILE:comgeom-g> -P "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake"
DEPENDS comgeom-g ${CMAKE_CURRENT_SOURCE_DIR}/${in_model}
)
endif(${MODEL_TYPE} STREQUAL "comgeom")
# FASTGEN 4
if(${MODEL_TYPE} STREQUAL "fg4")
if(NOT TARGET fast4-g)
return()
endif(NOT TARGET fast4-g)
set(CONV_ARGS "\"${CMAKE_CURRENT_SOURCE_DIR}/${in_model}\" \"${CMAKE_BINARY_DIR}/${output_file}\"")
configure_file("${CMAKE_SOURCE_DIR}/db/to_g.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake" @ONLY)
distclean("${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake")
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/${output_file}
COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_BINARY_DIR}/${output_file}"
COMMAND ${CMAKE_COMMAND} -DEXEC=$<TARGET_FILE:fast4-g> -P "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake"
DEPENDS fast4-g ${CMAKE_CURRENT_SOURCE_DIR}/${in_model}
)
endif(${MODEL_TYPE} STREQUAL "fg4")
# STEP AP203
if(${MODEL_TYPE} STREQUAL "stp")
if(NOT TARGET step-g)
return()
endif(NOT TARGET step-g)
set(CONV_ARGS "-O \"${CMAKE_BINARY_DIR}/${output_file}\" \"${CMAKE_CURRENT_SOURCE_DIR}/${in_model}\"")
configure_file("${CMAKE_SOURCE_DIR}/db/to_g.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake" @ONLY)
distclean("${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake")
# Custom command to generate the output
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/${output_file}
COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_BINARY_DIR}/${output_file}"
COMMAND ${CMAKE_COMMAND} -DEXEC=$<TARGET_FILE:step-g> -P "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake"
DEPENDS step-g ${CMAKE_CURRENT_SOURCE_DIR}/${in_model}
)
endif(${MODEL_TYPE} STREQUAL "stp")
# If we got this far, do the target, install and clean-up rules
add_custom_target(${in_model_root}.g ALL DEPENDS ${CMAKE_BINARY_DIR}/${output_file})
set_target_properties(${in_model_root}.g PROPERTIES FOLDER "${folder}")
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
install(FILES ${CMAKE_BINARY_DIR}/${output_file} DESTINATION ${DATA_DIR}/${rel_dir})
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${log_file}")
distclean("${log_file}")
endfunction(G_TARGET in_model folder)
set(
G_BENCHMARK_MODELS
set(G_BENCHMARK_MODELS
bldg391.asc
m35.asc
moss.asc
@@ -149,12 +7,8 @@ set(
world.asc
)
set(
G_SAMPLE_MODELS
aet.asc
annual_gift_man.asc
set(G_SAMPLE_MODELS
axis.asc
bearing.asc
boolean-ops.asc
castle.asc
cornell.asc
@@ -163,7 +17,6 @@ set(
crod.asc
cube.asc
demo.asc
die.asc
galileo.asc
goliath.asc
havoc.asc
@@ -173,125 +26,76 @@ set(
operators.asc
pic.asc
pinewood.asc
primitives.asc
prim.asc
radialgrid.asc
rounds.asc
shipping_container.asc
tank_car.asc
terra.asc
toyjeep.asc
traffic_light.asc
truck.asc
wave.asc
woodsman.asc
xmp.asc
)
add_subdirectory(chess)
macro(ADD_G_TARGET g_model folder)
string(REGEX REPLACE "([0-9a-z]*).asc" "\\1" g_model_root "${g_model}")
set(output_file ${bin_root}/${DATA_DIR}/db/${g_model_root}.g)
add_custom_command(
OUTPUT ${output_file}
COMMAND asc2g "${CMAKE_CURRENT_SOURCE_DIR}/${g_model}" ${output_file}
DEPENDS asc2g "${CMAKE_CURRENT_SOURCE_DIR}/${g_model}"
)
add_custom_target(${g_model_root}.g ALL DEPENDS ${output_file})
set_target_properties(${g_model_root}.g PROPERTIES FOLDER "${folder}")
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
string(REPLACE "${CMAKE_CFG_INTDIR}" "\${BUILD_TYPE}" output_file "${output_file}")
endif(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
install(FILES ${output_file} DESTINATION ${DATA_DIR}/db)
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
set(BUILT_MODELS "${BUILT_MODELS};${output_file}")
endmacro(ADD_G_TARGET g_model folder)
# Get our root path
if(CMAKE_CONFIGURATION_TYPES)
set(bin_root "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
else(CMAKE_CONFIGURATION_TYPES)
set(bin_root "${CMAKE_BINARY_DIR}")
endif(CMAKE_CONFIGURATION_TYPES)
# Make sure the db directories are there
if(CMAKE_CONFIGURATION_TYPES)
foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${CFG_TYPE}/${DATA_DIR}/db")
endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
else(CMAKE_CONFIGURATION_TYPES)
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${DATA_DIR}/db")
endif(CMAKE_CONFIGURATION_TYPES)
add_subdirectory(comgeom)
add_subdirectory(nist)
add_subdirectory(faa)
foreach(g_input ${G_BENCHMARK_MODELS})
g_target(${g_input} "BRL-CAD Geometry Models/Benchmark")
ADD_G_TARGET(${g_input} "BRL-CAD Geometry Models/Benchmark")
endforeach(g_input ${G_BENCHMARK_MODELS})
CMAKEFILES(${G_BENCHMARK_MODELS})
foreach(g_input ${G_SAMPLE_MODELS})
g_target(${g_input} "BRL-CAD Geometry Models/Sample")
ADD_G_TARGET(${g_input} "BRL-CAD Geometry Models/Sample")
endforeach(g_input ${G_SAMPLE_MODELS})
CMAKEFILES(${G_SAMPLE_MODELS})
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY AND TARGET gcv)
brlcad_adddata(1647260.dsp db)
brlcad_adddata(ebm_logo.bw db)
brlcad_adddata(terra.bin db)
brlcad_adddata(vol_data.bw db)
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY AND TARGET gcv)
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${BUILT_MODELS}")
if(SH_EXEC)
if(TARGET mged OR TARGET gcv)
set(conversion_g_files)
set(conversion_g_files_fp)
set(conversion_deps_list)
macro(Sh_Conversion_Test gfile depends_list)
if(TARGET mged)
add_custom_target(
convert-${gfile}
COMMAND
${SH_EXEC} ${CMAKE_SOURCE_DIR}/sh/conversion.sh GED=$<TARGET_FILE:mged>
${CMAKE_BINARY_DIR}/${DATA_DIR}/db/${gfile}
)
else()
add_custom_target(
convert-${gfile}
COMMAND
${SH_EXEC} ${CMAKE_SOURCE_DIR}/sh/conversion.sh GED=$<TARGET_FILE:gcv>
${CMAKE_BINARY_DIR}/${DATA_DIR}/db/${gfile}
)
endif(TARGET mged)
set_target_properties(convert-${gfile} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
set_target_properties(convert-${gfile} PROPERTIES FOLDER "BRL-CAD Conversion Tests")
set(conversion_g_files ${conversion_g_files} ${gfile})
if(NOT "${depends_list}" STREQUAL "")
add_dependencies(convert-${gfile} ${depends_list})
set(conversion_deps_list ${conversion_deps_list} ${depends_list})
endif(NOT "${depends_list}" STREQUAL "")
endmacro(Sh_Conversion_Test)
foreach(g_input ${G_BENCHMARK_MODELS})
get_filename_component(GROOT "${g_input}" NAME_WE)
if(TARGET mged)
sh_conversion_test(${GROOT}.g "mged")
else()
sh_conversion_test(${GROOT}.g "gcv")
endif(TARGET mged)
endforeach(g_input ${G_BENCHMARK_MODELS})
foreach(g_input ${G_SAMPLE_MODELS})
get_filename_component(GROOT "${g_input}" NAME_WE)
if(TARGET mged)
sh_conversion_test(${GROOT}.g "mged")
else()
sh_conversion_test(${GROOT}.g "gcv")
endif(TARGET mged)
endforeach(g_input ${G_SAMPLE_MODELS})
list(REMOVE_DUPLICATES conversion_deps_list)
foreach(gfile ${conversion_g_files})
set(conversion_g_files_fp ${conversion_g_files_fp} "${CMAKE_BINARY_DIR}/${DATA_DIR}/db/${gfile}")
endforeach(gfile ${conversion_g_files})
if(TARGET mged)
add_custom_target(
convert
COMMAND ${SH_EXEC} ${CMAKE_SOURCE_DIR}/sh/conversion.sh GED=$<TARGET_FILE:mged> ${conversion_g_files_fp}
)
else()
add_custom_target(
convert
COMMAND ${SH_EXEC} ${CMAKE_SOURCE_DIR}/sh/conversion.sh GED=$<TARGET_FILE:gcv> ${conversion_g_files_fp}
)
endif(TARGET mged)
set_target_properties(convert PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
set_target_properties(convert PROPERTIES FOLDER "BRL-CAD Conversion Tests")
add_dependencies(convert ${conversion_deps_list})
endif(TARGET mged OR TARGET gcv)
endif(SH_EXEC)
cmakefiles(
${G_BENCHMARK_MODELS}
${G_SAMPLE_MODELS}
1647260.dsp
CMakeLists.txt
aet.rt
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
BRLCAD_ADDDATA(terra.dsp db)
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
CMAKEFILES(
cornell.rt
cube.rt
db.php
ebm_logo.bw
include/ctype.inc
include/debug.inc
terra.bin
to_g.cmake.in
traffic_light.rt
vol_data.bw
include
)
# Local Variables:
-68
View File
@@ -1,68 +0,0 @@
title {Untitled BRL-CAD Database}
units mm
put {xyzringtrc.s} tgc V {0.31168735027313232421875 0.31356084346771240234375 0.2343517243862152099609375} H {-0.02296111360192298889160156 -0.02476786263287067413330078 0.03948847576975822448730469} A {-0.003937630914151668548583984 -0.02411045134067535400390625 -0.01741208322346210479736328} B {0.02662250958383083343505859 -0.01068659685552120208740234 0.008777192793786525726318359} C {-3.937628207495436072349548E-05 -0.0002411044843029230833053589 -0.0001741207961458712816238403} D {0.0002662249607965350151062012 -0.0001068659257725812494754791 8.77717902767471969127655E-05}
put {viewdirtrc.s} tgc V {0.08660250157117843627929688 0.08660250157117843627929688 0.08660250157117843627929688} H {-0.07794228941202163696289062 -0.07794228941202163696289062 -0.07794228941202163696289062} A {0 0.02828427031636238098144531 -0.02828427031636238098144531} B {0.03265986219048500061035156 -0.01632993109524250030517578 -0.01632993109524250030517578} C {0 0.000212132028536871075630188 -0.000212132028536871075630188} D {0.0002449489838909357786178589 -0.0001224744919454678893089294 -0.0001224744919454678893089294}
put {twistpanel.r} comb region yes tree {l twistpanel.c}
attr set {twistpanel.r} {color} {232/198/232} {shader} {glass {tr 0.6}} {region} {R} {region_id} {1000} {material_id} {1} {los} {100}
put {xyzringcut.c} comb region no tree {- {- {- {- {- {- {- {- {- {- {l ringxyztor.s} {l cut0.s}} {l cut1.s}} {l cut2.s}} {l cut4.s}} {l xrcc.s}} {l yrcc.s}} {l zrcc.s}} {l viewdirrcc.s}} {l xyzcutrcc.s}} {l xyzringtrc.s}}
put {viewdirrcc.s} tgc V {0.779421329498291015625 0.779421329498291015625 0.779421329498291015625} H {-0.6928203105926513671875 -0.6928203105926513671875 -0.6928203105926513671875} A {0 0.007071067579090595245361328 -0.007071067579090595245361328} B {0.008164965547621250152587891 -0.004082482773810625076293945 -0.004082482773810625076293945} C {0 0.007071067579090595245361328 -0.007071067579090595245361328} D {0.008164965547621250152587891 -0.004082482773810625076293945 -0.004082482773810625076293945}
put {twistpanel.c} comb region no tree {- {- {- {l twistrcc.s} {l twisttor.s}} {l twisttrc.s}} {l viewdirrcc.s}}
put {ringxytor.s} tor V {0 0 0} H {0 0 1} r_a 0.5 r_h 0.009999999776482582092285156
put {twistring.r} comb region yes tree {l twistring.c}
attr set {twistring.r} {color} {232/198/232} {shader} {mirror {tr .1 re 0.4}} {region} {R} {region_id} {1000} {material_id} {1} {los} {100}
put {xyringtrc.s} tgc V {0.3913685381412506103515625 0.3006020486354827880859375 -0.0009004921885207295417785645} H {-0.03143119439482688903808594 0.04401883110404014587402344 -0.0006720747915096580982208252} A {0.02089671231806278228759766 0.01464617997407913208007812 -0.01800444535911083221435547} B {-0.01446941774338483810424805 -0.01072130445390939712524414 -0.02551533468067646026611328} C {0.0002089670742861926555633545 0.0001464617671445012092590332 -0.0001800443860702216625213623} D {-0.0001446941751055419445037842 -0.0001072130180546082556247711 -0.0002551533398218452930450439}
put {xyzcutrcc.s} arb8 V1 {0.285196959972381591796875 0.223926544189453125 0.2792418301105499267578125} V2 {0.3270788453519344329833984 0.2655878327786922454833984 0.2198253460228443145751953} V3 {0.3691307827830314636230469 0.3075636327266693115234375 0.2788994473521597683429718} V4 {0.3272488489747047424316406 0.2659022919833660125732422 0.3383159413933753967285156} V5 {0.2260562554001808166503906 0.2832767628133296966552734 0.2791691728780278936028481} V6 {0.2679381202906370162963867 0.3249380290508270263671875 0.2197526805102825164794922} V7 {0.3099901042878627777099609 0.366913974285125732421875 0.2788267984578851610422134} V8 {0.2681080885231494903564453 0.3252525255084037780761719 0.3382433503866195678710938}
put {xyringcut.c} comb region no tree {- {- {- {- {- {- {- {- {- {l ringxytor.s} {l cut0.s}} {l cut1.s}} {l cut3.s}} {l xrcc.s}} {l yrcc.s}} {l zrcc.s}} {l ringxyztor.s}} {l xycutrcc.s}} {l xyringtrc.s}}
put {testdisks.c} comb region no tree {u {- {- {- {l xyzrcc.s} {l cut0.s}} {l cut1.s}} {l cut2.s}} {- {- {- {- {- {l xyrcc.s} {l cut0.s}} {l cut1.s}} {l cut2.s}} {l cut3.s}} {l cut0.s}}}
put {twistring.c} comb region no tree {u {- {- {l twisttor.s} {l twistcut.s}} {l twisttrc.s}} {l twisttrc.s}}
put {halfplane.s} half N {0 0 1} d -0.536277353763580322265625
put {halfplane.r} comb region yes tree {l halfplane.s}
attr set {halfplane.r} {color} {255/255/255} {shader} {stack {{phong {sp 0.05 di 0.95}} }} {region} {R} {region_id} {1002} {material_id} {1} {los} {100}
put {twisttor.s} tor V {0.449999988079071044921875 0.449999988079071044921875 0.449999988079071044921875} H {-0.577350269189625731058868 -0.577350269189625731058868 -0.577350269189625731058868} r_a 0.1500000016475442066177237 r_h 0.01000000030444709100962974
put {twistcut.s} part V {0.3950000000000000177635684 0.3850000000000000088817842 0.5649999999999999467092948} H {0.0003640000000000000114804 -0.0003699999999999999946917462 -0.0005000000000000000104083409} r_v 0.02800000000000000058286709 r_h 0.02800000000000000058286709
put {twisttrc.s} tgc V {0.37255561351776123046875 0.40711653232574462890625 0.57051956653594970703125} H {0.03641721233725547790527344 -0.03706122934818267822265625 -0.0005011741304770112037658691} A {0.01779515855014324188232422 0.01750466972589492797851562 -0.001385415205731987953186035} B {0.001156966434791684150695801 0.0007993413601070642471313477 0.02496042102575302124023438} C {0.0001779512967914342880249023 0.0001750463998178020119667053 -1.385413543175673112273216E-05} D {1.156978123617591336369514E-05 7.993325198185630142688751E-06 0.0002496042288839817047119141}
put {xyzpanel.r} comb region yes tree {l xyzcut.c}
attr set {xyzpanel.r} {color} {205/253/172} {shader} {glass {tr 0.6}} {region} {R} {region_id} {1003} {material_id} {1} {los} {100}
put {twistrcc.s} tgc V {0.4472982883453369140625 0.4472982883453369140625 0.4472982883453369140625} H {0.005773502867668867111206055 0.005773502867668867111206055 0.005773502867668867111206055} A {0 -0.1060660183429718017578125 0.1060660183429718017578125} B {0.1224744841456413269042969 -0.06123724207282066345214844 -0.06123724207282066345214844} C {0 -0.1060660183429718017578125 0.1060660183429718017578125} D {0.1224744841456413269042969 -0.06123724207282066345214844 -0.06123724207282066345214844}
put {xycutrcc.s} arb8 V1 {0.4098457992076873779296875 0.330240428447723388671875 -0.03679068386554718017578125} V2 {0.3675903864204883575439453 0.3863152638077735900878906 -0.03679068386160150305741467} V3 {0.3675903864204883575439453 0.3863152638077735900878906 0.03342260420322418212890625} V4 {0.4098457992100617008901509 0.3302404284445723536833839 0.03342260420322418212890625} V5 {0.3537709638476371765136719 0.2879850156605243682861328 -0.03679068386554718017578125} V6 {0.3115155547857284545898438 0.3440598426386713981628418 -0.03679068386160150305741467} V7 {0.3115155547857284545898438 0.3440598426386713981628418 0.03342260420322418212890625} V8 {0.3537709638476371765136719 0.2879850156605243682861328 0.03342260420322418212890625}
put {cutdisks.c} comb region no tree {- {- {- {- {- {l disks.c} {l cut0.s}} {l cut1.s}} {l cut2.s}} {l cut3.s}} {l cut4.s}}
put {twistcut.s.backu} ell V {0.3945335447788238525390625 0.383843958377838134765625 0.5655720233917236328125} A {0.03095294535160064697265625 -0.0002858481311704963445663452 -0.0002035317302215844392776489} B {0.0002871743054129183292388916 0.03095294535160064697265625 0.0002016565413214266300201416} C {0.0002016565558733418583869934 -0.0002035317156696692109107971 0.03095364384353160858154297}
put {xyzring.r} comb region yes tree {u {l xyzringcut.c} {l xyzringtrc.s}}
attr set {xyzring.r} {color} {230/253/215} {shader} {mirror {tr .1 re 0.4}} {region} {R} {region_id} {1005} {material_id} {1} {los} {100}
put {viewdir.r} comb region yes tree {l viewdir.c}
attr set {viewdir.r} {color} {253/227/198} {shader} {phong {tr .1 ri 1.5 sh 2}} {region} {R} {region_id} {1001} {material_id} {1} {los} {100}
put {xypanel.r} comb region yes tree {l xycut.c}
attr set {xypanel.r} {color} {178/221/243} {shader} {glass {tr 0.6}} {region} {R} {region_id} {1002} {material_id} {1} {los} {100}
put {diagram.r} comb region no tree {u {u {u {l arrows.r} {l twistpanel.r}} {u {l twistring.r} {l xypanel.r}}} {u {u {l xyring.r} {l xyzpanel.r}} {u {l xyzring.r} {l viewdir.r}}}}
put {viewdir.c} comb region no tree {u {l viewdirrcc.s} {- {- {- {l viewdirtrc.s} {l xrcc.s}} {l yrcc.s}} {l zrcc.s}}}
put {arrows.r} comb region yes tree {l coordinates.c}
attr set {arrows.r} {color} {217/217/254} {shader} {mirror {tr .1 re 0.4}} {region} {R} {region_id} {1001} {material_id} {1} {los} {100}
put {xyring.r} comb region yes tree {u {l xyringcut.c} {l xyringtrc.s}}
attr set {xyring.r} {color} {206/230/242} {shader} {mirror {tr .1 re 0.4}} {region} {R} {region_id} {1004} {material_id} {1} {los} {100}
put {ground.s} ell V {0 0 -10000.08984375} A {10000 0 0} B {0 6.12303176911188629105709E-13 10000} C {0 -10000 6.12303176911188629105709E-13}
put {xyzcut.c} comb region no tree {- {- {- {- {- {- {- {- {- {- {- {l xyzrcc.s} {l cut0.s}} {l cut1.s}} {l cut2.s}} {l cut4.s}} {l xrcc.s}} {l yrcc.s}} {l zrcc.s}} {l viewdirtrc.s}} {l viewdirrcc.s}} {l ringxyztor.s}} {l xyzringtrc.s}}
put {ground.r} comb region yes tree {l ground.c}
attr set {ground.r} {color} {255/255/255} {shader} {stack {{checker {b {192 192 192} s 8192.0}} {phong {sp 0.8 sh 4 em .5}} }} {region} {R} {region_id} {1001} {material_id} {1} {los} {100}
put {xyzrcc.s} tgc V {0.005014000460505485534667969 -0.004998999647796154022216797 7.123547086408665851564592E-19} H {-0.009999999776482582092285156 0.009999999776482582092285156 0} A {-0.356000006198883056640625 -0.356000006198883056640625 0} B {0 0 0.5} C {-0.356000006198883056640625 -0.356000006198883056640625 0} D {0 0 0.5}
put {ground.c} comb region no tree {l ground.s}
put {disks2.c} comb region no tree {u {- {- {- {- {l xyzrcc.s} {l cut0.s}} {l cut1.s}} {l cut2.s}} {l xyrcc.s}} {- {- {- {l xyrcc.s} {l cut0.s}} {l cut1.s}} {l cut2.s}}}
put {light.s} ell V {-98.451141357421875 103.03456878662109375 200.0417633056640625} A {14 0 0} B {0 14 0} C {0 0 14}
put {light.r} comb region yes tree {l light.s}
attr set {light.r} {color} {255/255/255} {shader} {light {a 270 d {1 0 0} s 16 v 0}} {region} {R} {region_id} {1002} {material_id} {1} {los} {100}
put {xyrcc.s} tgc V {0 0 -0.004999999888241291046142578} H {0 0 0.009999999776482582092285156} A {0 -0.5 0} B {0.5 0 0} C {0 -0.5 0} D {0.5 0 0}
put {xycut.c} comb region no tree {- {- {- {- {- {- {- {- {- {- {- {l xyrcc.s} {l cut0.s}} {l cut1.s}} {l cut3.s}} {l xrcc.s}} {l yrcc.s}} {l zrcc.s}} {l xyzrcc.s}} {l ringxytor.s}} {l viewdirtrc.s}} {l xyringtrc.s}} {l viewdirrcc.s}}
put {disks.c} comb region no tree {u {- {l xyzrcc.s} {l xyrcc.s}} {l xyrcc.s}}
put {rings.c} comb region no tree {u {l ringxytor.s} {l ringxyztor.s}}
put {ztec.s} tgc V {0 0 1} H {0 0 0.1000000014901161193847656} A {0.02999999932944774627685547 0 0} B {0 0.02999999932944774627685547 0} C {0.0003000000142492353916168213 0 0} D {0 0.0003000000142492353916168213 0}
put {ytec.s} tgc V {0 1 0} H {0 0.1000000014901161193847656 0} A {0.02999999932944774627685547 0 0} B {0 0 0.02999999932944774627685547} C {0.0003000000142492353916168213 0 0} D {0 0 0.0003000000142492353916168213}
put {xtec.s} tgc V {1 0 0} H {0.1000000014901161193847656 0 0} A {0 0.02999999932944774627685547 0} B {0 0 0.02999999932944774627685547} C {0 0.0003000000142492353916168213 0} D {0 0 0.0003000000142492353916168213}
put {zrcc.s} tgc V {0 0 0} H {0 0 1} A {0 -0.009999999776482582092285156 0} B {0.009999999776482582092285156 0 0} C {0 -0.009999999776482582092285156 0} D {0.009999999776482582092285156 0 0}
put {yrcc.s} tgc V {0 0 0} H {0 1 0} A {0 0 0.009999999776482582092285156} B {0.009999999776482582092285156 0 0} C {0 0 0.009999999776482582092285156} D {0.009999999776482582092285156 0 0}
put {xrcc.s} tgc V {0 0 0} H {1 0 0} A {0 0 -0.009999999776482582092285156} B {0 0.009999999776482582092285156 0} C {0 0 -0.009999999776482582092285156} D {0 0.009999999776482582092285156 0}
put {cut4.s} arb8 V1 {1 1 1} V2 {1 -1 1} V3 {-1 -1 1} V4 {-1 1 1} V5 {-1 -1 -1} V6 {-1 -1 -1} V7 {-1 -1 -1} V8 {-1 -1 -1}
put {cut3.s} arb8 V1 {1.010072231292724609375 1.0000178813934326171875 1.010089874267578125} V2 {1.010072231292724831419605 1.0000178813934326171875 -1.0000002384185791015625} V3 {-1.0000178813934326171875 -1.010072231292724609375 -1.0000002384185791015625} V4 {-1.0000178813934326171875 -1.010072231292724609375 1.01008987426757901317842} V5 {-1.0000178813934326171875 1.0000178813934326171875 -1.0000002384185791015625} V6 {-1.0000178813934326171875 1.0000178813934326171875 -1.0000002384185791015625} V7 {-1.0000178813934326171875 1.0000178813934326171875 -1.0000002384185791015625} V8 {-1.0000178813934326171875 1.0000178813934326171875 -1.0000002384185791015625}
put {cut2.s} arb8 V1 {1 -1 -1.0051000118255615234375} V2 {1 1 -1.0051000118255615234375} V3 {1 1 -0.0051000118255615234375} V4 {1 -1 -0.0051000118255615234375} V5 {-1 -1 -1.0051000118255615234375} V6 {-1 1 -1.0051000118255615234375} V7 {-1 1 -0.0051000118255615234375} V8 {-1 -1 -0.0051000118255615234375}
put {cut1.s} arb8 V1 {0 -1 -1} V2 {0 1 -1} V3 {0 1 1} V4 {0 -1 1} V5 {-1 -1 -1} V6 {-1 1 -1} V7 {-1 1 1} V8 {-1 -1 1}
put {cut0.s} arb8 V1 {1 -1 -1} V2 {1 0 -1} V3 {1 0 1} V4 {1 -1 1} V5 {-1 -1 -1} V6 {-1 0 -1} V7 {-1 0 1} V8 {-1 -1 1}
put {coordinates.c} comb region no tree {u {u {u {u {u {- {- {l xrcc.s} {l yrcc.s}} {l zrcc.s}} {- {- {l yrcc.s} {l xrcc.s}} {l zrcc.s}}} {- {- {l zrcc.s} {l xrcc.s}} {l yrcc.s}}} {l xtec.s}} {l ytec.s}} {l ztec.s}}
put {ringxyztor.s} tor V {0 0 0} H {-0.7071067811865475727373109 0.7071067811865475727373109 0} r_a 0.4999999914428644998132256 r_h 0.009999999670806607177109271
-13
View File
@@ -1,13 +0,0 @@
#!/bin/sh
rt -M -p50 -W \
$*\
aet.g\
'diagram.r' \
<<EOF
viewsize 3.58095758486442e+00;
orientation 4.58468551319667e-01 5.46381543126676e-01 5.36927647047512e-01 4.50535790606452e-01;
eye_pt 2.16300884070308e+00 6.60866025843505e-01 3.68751836397137e-01;
start 0; clean;
end;
EOF
-191
View File
@@ -1,191 +0,0 @@
title {Annual Gift Man}
units in
put {body.black.s1} arb8 V1 {228.5999999999999658939487 -228.5999999999999658939487 88.89999999999999147348717} V2 {228.5999999999999658939487 228.5999999999999658939487 88.89999999999999147348717} V3 {228.5999999999999658939487 228.5999999999999658939487 63.49999999999999289457264} V4 {228.5999999999999658939487 -228.5999999999999658939487 63.49999999999999289457264} V5 {-228.5999999999999658939487 -228.5999999999999658939487 88.89999999999999147348717} V6 {-228.5999999999999658939487 228.5999999999999658939487 88.89999999999999147348717} V7 {-228.5999999999999658939487 228.5999999999999658939487 63.49999999999999289457264} V8 {-228.5999999999999658939487 -228.5999999999999658939487 63.49999999999999289457264}
put {body.gold.s2} arb8 V1 {228.5999999999999658939487 -38.10000000000000852651283 88.89999999999994884092303} V2 {228.5999999999999658939487 38.10000000000000852651283 88.89999999999994884092303} V3 {228.5999999999999658939487 38.10000000000000852651283 63.49999999999998578914528} V4 {228.5999999999999658939487 -38.10000000000000852651283 63.49999999999998578914528} V5 {177.7999999999999545252649 -38.10000000000000852651283 88.89999999999994884092303} V6 {177.7999999999999545252649 38.10000000000000852651283 88.89999999999994884092303} V7 {177.7999999999999545252649 38.10000000000000852651283 63.49999999999998578914528} V8 {177.7999999999999545252649 -38.10000000000000852651283 63.49999999999998578914528}
put {body.gold.s1} arb8 V1 {228.5999999999999943156581 -50.80000000000000426325641 101.5999999999999801048034} V2 {228.5999999999999943156581 50.80000000000000426325641 101.5999999999999801048034} V3 {228.5999999999999943156581 50.80000000000000426325641 50.79999999999999715782906} V4 {228.5999999999999943156581 -50.80000000000000426325641 50.79999999999999715782906} V5 {177.8000000000000113686838 -50.80000000000000426325641 101.5999999999999801048034} V6 {177.8000000000000113686838 50.80000000000000426325641 101.5999999999999801048034} V7 {177.8000000000000113686838 50.80000000000000426325641 50.79999999999999715782906} V8 {177.8000000000000113686838 -50.80000000000000426325641 50.79999999999999715782906}
put {body.gold.c} comb region no tree {- {l body.gold.s1} {l body.gold.s2}}
put {missile2.s2} tgc V {-117.4750000000000227373675 -277.8124999999999431565811 12.70000000000000284217094} H {-3.110602869834276865189663E-15 0 -25.39999999999999857891453} A {0 9.524999999999998578914528 0} B {-9.524999999999998578914528 0 1.166476076187853824446124E-15} C {0 0.8255000000000000115463195 0} D {-0.8255000000000000115463195 0 1.010945932696140237566435E-16}
put {missile1.s2} tgc V {-117.4749999999999943156581 277.8124999999999431565811 12.70000000000000284217094} H {-3.110602869834276865189663E-15 0 -25.39999999999999857891453} A {0 -9.524999999999998578914528 0} B {-9.524999999999998578914528 0 1.166476076187853824446124E-15} C {0 -0.8255000000000000115463195 0} D {-0.8255000000000000115463195 0 1.010945932696140237566435E-16}
put {missile2.s1} tgc V {-117.4750000000000227373675 -277.8124999999999431565811 12.70000000000000284217094} H {0 0 101.5999999999999943156581} A {0 9.524999999999998578914528 0} B {9.524999999999998578914528 0 0} C {0 9.524999999999998578914528 0} D {9.524999999999998578914528 0 0}
put {missile1.s1} tgc V {-117.4749999999999943156581 277.8124999999999431565811 12.70000000000000284217094} H {0 0 101.5999999999999943156581} A {0 -9.524999999999998578914528 0} B {9.524999999999998578914528 0 0} C {0 -9.524999999999998578914528 0} D {9.524999999999998578914528 0 0}
put {rt_leg.s1i2} arb8 V1 {25.40000000000000568434189 -98.42500000000002557953849 -241.2999999999999829469743} V2 {25.40000000000000213162821 -104.7750000000000198951966 -241.2999999999999829469743} V3 {25.40000000000000213162821 -104.7750000000000198951966 -12.7000000000000010658141} V4 {25.40000000000000568434189 -98.42500000000002557953849 -12.7000000000000010658141} V5 {-76.20000000000003126388037 -98.42500000000001136868377 -241.2999999999999829469743} V6 {-76.20000000000003126388037 -104.7750000000000056843419 -241.2999999999999829469743} V7 {-76.20000000000003126388037 -104.7750000000000056843419 -12.7000000000000010658141} V8 {-76.20000000000003126388037 -98.42500000000001136868377 -12.7000000000000010658141}
put {lt_leg.s1i2} arb8 V1 {25.40000000000001634248292 98.42500000000002557953849 -241.2999999999999829469743} V2 {25.40000000000001634248292 104.7750000000000198951966 -241.2999999999999829469743} V3 {25.40000000000001634248292 104.7750000000000198951966 -12.7000000000000010658141} V4 {25.40000000000001634248292 98.42500000000002557953849 -12.7000000000000010658141} V5 {-76.20000000000001705302566 98.42500000000002557953849 -241.2999999999999829469743} V6 {-76.20000000000001705302566 104.7750000000000198951966 -241.2999999999999829469743} V7 {-76.20000000000001705302566 104.7750000000000198951966 -12.7000000000000010658141} V8 {-76.20000000000001705302566 98.42500000000002557953849 -12.7000000000000010658141}
put {mustache.r} comb region yes tree {n {- {l head.s8} {l head.s1}} {l head.s8i}}
attr set {mustache.r} {region} {R} {region_id} {1037} {material_id} {1} {los} {100} {color} {255/255/255}
put {button.s6a} tgc V {-228.600000000000051159077 -126.9999999999999715782906 38.10000000000002273736754} H {317.5978069738537215016549 0 328.8821567148312965400692} A {11.41951933037608313270539 0 -11.02770163103658696002185} B {0 -15.87500000000000177635684 0} C {11.41951933037608490906223 0 -11.02770163103658873637869} D {0 -15.87500000000000177635684 0}
put {button.r6a} comb region yes tree {- {n {- {l button.s6a} {l button.s6}} {l body.s2a}} {l body.s2}}
attr set {button.r6a} {region} {R} {region_id} {1036} {material_id} {1} {los} {100} {color} {255/255/255}
put {button.s5a} tgc V {-228.600000000000051159077 -126.9999999999999715782906 38.10000000000002273736754} H {391.8968898810059044990339 0 235.4754078488767561339046} A {8.176229439197108206371922 0 -13.60753089864603637693108} B {0 -15.87500000000000177635684 0} C {8.176229439197108206371922 0 -13.60753089864603637693108} D {0 -15.87500000000000177635684 0}
put {button.r5a} comb region yes tree {- {n {- {l button.s5a} {l button.s5}} {l body.s2a}} {l body.s2}}
attr set {button.r5a} {region} {R} {region_id} {1035} {material_id} {1} {los} {100} {color} {255/255/255}
put {button.s4a} tgc V {-228.600000000000051159077 -126.9999999999999715782906 38.10000000000002273736754} H {439.4888473829994381958386 0 126.0213990795319745075176} A {4.375743023594861114133892 0 -15.26002942302081066827668} B {0 -15.87499999999999822364316 0} C {4.375743023594861114133892 0 -15.26002942302081066827668} D {0 -15.87499999999999822364316 0}
put {button.r4a} comb region yes tree {- {n {- {l button.s4a} {l button.s4}} {l body.s2a}} {l body.s2}}
attr set {button.r4a} {region} {R} {region_id} {1034} {material_id} {1} {los} {100} {color} {255/255/255}
put {button.s3a} tgc V {-228.6000000000000227373675 127 38.10000000000002273736754} H {317.5978069738537215016549 0 328.8821567148312965400692} A {11.41951933037608313270539 0 -11.02770163103658696002185} B {0 15.87500000000000177635684 0} C {11.41951933037608490906223 0 -11.02770163103658873637869} D {0 15.87500000000000177635684 0}
put {button.r3a} comb region yes tree {- {n {- {l button.s3a} {l button.s3}} {l body.s2a}} {l body.s2}}
attr set {button.r3a} {region} {R} {region_id} {1033} {material_id} {1} {los} {100} {color} {255/255/255}
put {button.s2a} tgc V {-228.6000000000000227373675 127 38.10000000000002273736754} H {391.8968898810059044990339 0 235.4754078488767561339046} A {8.176229439197108206371922 0 -13.60753089864603637693108} B {0 15.87500000000000177635684 0} C {8.176229439197108206371922 0 -13.60753089864603637693108} D {0 15.87500000000000177635684 0}
put {button.r2a} comb region yes tree {- {n {- {l button.s2a} {l button.s2}} {l body.s2a}} {l body.s2}}
attr set {button.r2a} {region} {R} {region_id} {1032} {material_id} {1} {los} {100} {color} {255/255/255}
put {button.s1a} tgc V {-228.6000000000000227373675 127 38.10000000000002273736754} H {439.4888473829994381958386 0 126.0213990795319745075176} A {4.375743023594861114133892 0 -15.26002942302081066827668} B {0 15.875 0} C {4.375743023594861114133892 0 -15.26002942302081066827668} D {0 15.875 0}
put {button.r1a} comb region yes tree {- {n {- {l button.s1a} {l button.s1}} {l body.s2a}} {l body.s2}}
attr set {button.r1a} {region} {R} {region_id} {1031} {material_id} {1} {los} {100} {color} {255/255/255}
put {rt_arm.s4i} tgc V {-117.4750000000000227373675 -266.6999999999999886313162 11.11250000000000248689958} H {0 0 114.3000000000000113686838} A {0 23.81249999999999644728632 0} B {23.81249999999999644728632 0 0} C {0 23.81249999999999644728632 0} D {23.81249999999999644728632 0 0}
put {lt_arm.s4i} tgc V {-117.4749999999999943156581 266.6999999999999886313162 11.11250000000000248689958} H {0 0 114.3000000000000113686838} A {0 -23.81249999999999644728632 0} B {23.81249999999999644728632 0 0} C {0 -23.81249999999999644728632 0} D {23.81249999999999644728632 0 0}
put {missile2.r} comb region yes tree {u {l missile2.s1} {l missile2.s2}}
attr set {missile2.r} {region} {R} {region_id} {1024} {material_id} {1} {los} {100} {color} {255/150/50}
put {missile1.r} comb region yes tree {u {l missile1.s1} {l missile1.s2}}
attr set {missile1.r} {region} {R} {region_id} {1023} {material_id} {1} {los} {100} {color} {255/150/50}
put {rt_ear.s2i} arb8 V1 {-104.7750000000000056843419 -152.3999999999999772626325 495.2999999999999545252649} V2 {-104.7750000000000198951966 -203.1999999999999886313162 495.2999999999999545252649} V3 {-104.7750000000000198951966 -203.1999999999999886313162 596.8999999999999772626325} V4 {-104.7750000000000056843419 -152.3999999999999772626325 596.8999999999999772626325} V5 {-130.1750000000000113686838 -152.399999999999948840923 495.2999999999999545252649} V6 {-130.1750000000000113686838 -203.1999999999999602096068 495.2999999999999545252649} V7 {-130.1750000000000113686838 -203.1999999999999602096068 596.8999999999999772626325} V8 {-130.1750000000000113686838 -152.399999999999948840923 596.8999999999999772626325}
put {lt_ear.s2i} arb8 V1 {-104.7749999999999914734872 152.3999999999999772626325 495.2999999999999545252649} V2 {-104.7749999999999914734872 203.1999999999999886313162 495.2999999999999545252649} V3 {-104.7749999999999914734872 203.1999999999999886313162 596.8999999999999772626325} V4 {-104.7749999999999914734872 152.3999999999999772626325 596.8999999999999772626325} V5 {-130.1749999999999829469743 152.3999999999999772626325 495.2999999999999545252649} V6 {-130.1749999999999829469743 203.1999999999999886313162 495.2999999999999545252649} V7 {-130.1749999999999829469743 203.1999999999999886313162 596.8999999999999772626325} V8 {-130.1749999999999829469743 152.3999999999999772626325 596.8999999999999772626325}
put {rt_leg.s1i} arb8 V1 {25.40000000000000213162821 -123.8250000000000312638804 -241.2999999999999829469743} V2 {25.40000000000000213162821 -130.1750000000000113686838 -241.2999999999999829469743} V3 {25.40000000000000213162821 -130.1750000000000113686838 -12.7000000000000010658141} V4 {25.40000000000000213162821 -123.8250000000000312638804 -12.7000000000000010658141} V5 {-76.20000000000003126388037 -123.8250000000000170530257 -241.2999999999999829469743} V6 {-76.20000000000003126388037 -130.1750000000000113686838 -241.2999999999999829469743} V7 {-76.20000000000003126388037 -130.1750000000000113686838 -12.7000000000000010658141} V8 {-76.20000000000003126388037 -123.8250000000000170530257 -12.7000000000000010658141}
put {lt_leg.s1i} arb8 V1 {25.40000000000001634248292 123.8250000000000312638804 -241.2999999999999829469743} V2 {25.40000000000001634248292 130.1750000000000113686838 -241.2999999999999829469743} V3 {25.40000000000001634248292 130.1750000000000113686838 -12.7000000000000010658141} V4 {25.40000000000001634248292 123.8250000000000312638804 -12.7000000000000010658141} V5 {-76.20000000000001705302566 123.8250000000000312638804 -241.2999999999999829469743} V6 {-76.20000000000001705302566 130.1750000000000113686838 -241.2999999999999829469743} V7 {-76.20000000000001705302566 130.1750000000000113686838 -12.7000000000000010658141} V8 {-76.20000000000001705302566 123.8250000000000312638804 -12.7000000000000010658141}
put {annual_gift_man} comb region no tree {u {u {u {l body {0.984807753012208 0 -0.17364817766693 75.4019057580597 0 1 0 0 0.17364817766693 0 0.984807753012208 27.1522734574961 0 0 0 1}} {l head {0.984807753012208 0 -0.17364817766693 75.4019057580597 0 1 0 0 0.17364817766693 0 0.984807753012208 27.1522734574961 0 0 0 1}}} {u {l hat {0.984807753012208 0 -0.17364817766693 75.4019057580597 0 1 0 0 0.17364817766693 0 0.984807753012208 27.1522734574961 0 0 0 1}} {l legs {0.984807753012208 0 -0.17364817766693 75.4019057580597 0 1 0 0 0.17364817766693 0 0.984807753012208 27.1522734574961 0 0 0 1}}}} {l arms {0.984807753012208 0 -0.17364817766693 75.4019057580597 0 1 0 0 0.17364817766693 0 0.984807753012208 27.1522734574961 0 0 0 1}}}
put {button.s6} tgc V {-228.600000000000051159077 -126.9999999999999715782906 38.10000000000002273736754} H {317.5978069738537215016549 0 328.8821567148312965400692} A {9.135615464300869348335254 0 -8.822161304829272410188423} B {0 -12.69999999999999396038675 0} C {9.135615464300869348335254 0 -8.822161304829272410188423} D {0 -12.69999999999999396038675 0}
put {button.r6} comb region yes tree {- {n {l button.s6} {l body.s4i}} {l body.s2}}
attr set {button.r6} {region} {R} {region_id} {1010} {material_id} {1} {los} {100}
put {button.s5} tgc V {-228.600000000000051159077 -126.9999999999999715782906 38.10000000000002273736754} H {391.8968898810059044990339 0 235.4754078488767561339046} A {6.540983551357687275640274 0 -10.8860247189168308779017} B {0 -12.69999999999999396038675 0} C {6.540983551357687275640274 0 -10.8860247189168308779017} D {0 -12.69999999999999396038675 0}
put {button.r5} comb region yes tree {- {n {l button.s5} {l body.s4i}} {l body.s2}}
attr set {button.r5} {region} {R} {region_id} {1009} {material_id} {1} {los} {100}
put {button.s4} tgc V {-228.600000000000051159077 -126.9999999999999715782906 38.10000000000002273736754} H {439.4888473829994381958386 0 126.0213990795319745075176} A {3.500594418875888624853587 0 -12.20802353841664888989271} B {0 -12.69999999999999396038675 0} C {3.500594418875888624853587 0 -12.20802353841664888989271} D {0 -12.69999999999999396038675 0}
put {button.r4} comb region yes tree {- {n {l button.s4} {l body.s4i}} {l body.s2}}
attr set {button.r4} {region} {R} {region_id} {1008} {material_id} {1} {los} {100}
put {button.s3} tgc V {-228.6000000000000227373675 127 38.10000000000002273736754} H {317.5978069738537215016549 0 328.8821567148312965400692} A {9.135615464300869348335254 0 -8.822161304829272410188423} B {0 12.69999999999999928945726 0} C {9.135615464300869348335254 0 -8.822161304829272410188423} D {0 12.69999999999999928945726 0}
put {button.r3} comb region yes tree {- {n {l button.s3} {l body.s4i}} {l body.s2}}
attr set {button.r3} {region} {R} {region_id} {1007} {material_id} {1} {los} {100}
put {button.s2} tgc V {-228.6000000000000227373675 127 38.10000000000002273736754} H {391.8968898810059044990339 0 235.4754078488767561339046} A {6.540983551357687275640274 0 -10.8860247189168308779017} B {0 12.69999999999999928945726 0} C {6.540983551357687275640274 0 -10.8860247189168308779017} D {0 12.69999999999999928945726 0}
put {button.r2} comb region yes tree {- {n {l button.s2} {l body.s4i}} {l body.s2}}
attr set {button.r2} {region} {R} {region_id} {1006} {material_id} {1} {los} {100}
put {button.s1} tgc V {-228.6000000000000227373675 127 38.10000000000002273736754} H {439.4888473829994381958386 0 126.0213990795319745075176} A {3.500594418875888624853587 0 -12.20802353841664888989271} B {0 12.69999999999999928945726 0} C {3.500594418875888624853587 0 -12.20802353841664888989271} D {0 12.69999999999999928945726 0}
put {button.r1} comb region yes tree {- {n {l button.s1} {l body.s4i}} {l body.s2}}
attr set {button.r1} {region} {R} {region_id} {1005} {material_id} {1} {los} {100}
put {rt_arm.s5} tgc V {-117.4750000000000227373675 -228.5999999999999658939487 304.7999999999999545252649} H {0 -41.27499999999999857891453 0} A {0 0 50.79999999999999715782906} B {50.79999999999999715782906 0 0} C {0 0 50.79999999999999715782906} D {50.79999999999999715782906 0 0}
put {lt_arm.s5} tgc V {-117.4749999999999943156581 228.5999999999999943156581 304.7999999999999545252649} H {0 41.27499999999999857891453 0} A {0 0 50.79999999999999715782906} B {50.79999999999999715782906 0 0} C {0 0 50.79999999999999715782906} D {50.79999999999999715782906 0 0}
put {rt_arm.s4} tgc V {-117.4750000000000227373675 -266.6999999999999886313162 12.70000000000000284217094} H {0 0 114.2999999999999971578291} A {0 25.39999999999999502620085 0} B {25.39999999999999857891453 0 0} C {0 25.39999999999999502620085 0} D {25.39999999999999857891453 0 0}
put {lt_arm.s4} tgc V {-117.4749999999999943156581 266.6999999999999886313162 12.70000000000000284217094} H {0 0 114.2999999999999971578291} A {0 -25.39999999999999502620085 0} B {25.39999999999999857891453 0 0} C {0 -25.39999999999999502620085 0} D {25.39999999999999857891453 0 0}
put {rt_arm.s3} arb8 V1 {-79.37500000000002842170943 -228.5999999999999943156581 -101.5999999999999943156581} V2 {-79.37500000000002842170943 -203.1999999999999886313162 -101.5999999999999943156581} V3 {-79.37500000000002842170943 -203.1999999999999886313162 -38.10000000000001563194019} V4 {-79.37500000000002842170943 -228.5999999999999943156581 -25.4000000000000198951966} V5 {-155.5750000000000170530257 -228.5999999999999658939487 -101.5999999999999943156581} V6 {-155.5749999999999602096068 -203.1999999999999602096068 -101.5999999999999801048034} V7 {-155.5750000000000454747351 -203.1999999999999602096068 -38.10000000000001563194019} V8 {-155.5750000000000738964445 -228.5999999999999658939487 -25.400000000000037658765}
put {rt_eye.s2} tgc V {-76.19999999999998863131623 -44.44999999999998863131623 603.25} H {50.79999999999999715782906 0 0} A {0 0 -6.349999999999998756550212} B {0 -6.349999999999996980193373 0} C {0 0 -6.349999999999998756550212} D {0 -6.349999999999996980193373 0}
put {lt_arm.s3} arb8 V1 {-79.375 228.5999999999999943156581 -101.5999999999999943156581} V2 {-79.375 203.1999999999999886313162 -101.5999999999999943156581} V3 {-79.375 203.1999999999999886313162 -38.10000000000001563194019} V4 {-79.375 228.5999999999999943156581 -25.4000000000000198951966} V5 {-155.5749999999999886313162 228.5999999999999943156581 -101.5999999999999943156581} V6 {-155.5749999999999317878974 203.1999999999999886313162 -101.5999999999999801048034} V7 {-155.5750000000000170530257 203.1999999999999886313162 -38.10000000000001563194019} V8 {-155.5750000000000454747351 228.5999999999999943156581 -25.400000000000037658765}
put {rt_arm.r3} comb region yes tree {l rt_arm.gray.s2}
attr set {rt_arm.r3} {region} {R} {region_id} {1022} {material_id} {1} {los} {100} {color} {50/50/50}
put {rt_arm.s2} arb8 V1 {-79.37500000000002842170943 -228.5999999999999943156581 -101.5999999999999943156581} V2 {-79.37500000000002842170943 -266.6999999999999886313162 -101.5999999999999943156581} V3 {-79.37500000000002842170943 -266.6999999999999886313162 304.7999999999999545252649} V4 {-79.37500000000002842170943 -228.5999999999999943156581 304.7999999999999545252649} V5 {-155.5750000000000170530257 -228.5999999999999658939487 -101.5999999999999943156581} V6 {-155.5750000000000170530257 -266.6999999999999886313162 -101.5999999999999943156581} V7 {-155.5750000000000170530257 -266.6999999999999886313162 304.7999999999999545252649} V8 {-155.5750000000000170530257 -228.5999999999999658939487 304.7999999999999545252649}
put {lt_eye.s2} tgc V {-76.19999999999998863131623 44.44999999999999573674359 603.25} H {50.79999999999999715782906 0 0} A {0 0 -6.349999999999998756550212} B {0 6.349999999999999644728632 0} C {0 0 -6.349999999999998756550212} D {0 6.349999999999999644728632 0}
put {rt_eye.r2} comb region yes tree {n {l rt_eye.s1} {l rt_eye.s2}}
attr set {rt_eye.r2} {region} {R} {region_id} {1030} {material_id} {1} {los} {100} {color} {0/0/0}
put {lt_arm.r3} comb region yes tree {l lt_arm.gray.s2}
attr set {lt_arm.r3} {region} {R} {region_id} {1021} {material_id} {1} {los} {100} {color} {50/50/50}
put {lt_arm.s2} arb8 V1 {-79.375 228.5999999999999943156581 -101.5999999999999943156581} V2 {-79.375 266.6999999999999886313162 -101.5999999999999943156581} V3 {-79.375 266.6999999999999886313162 304.7999999999999545252649} V4 {-79.375 228.5999999999999943156581 304.7999999999999545252649} V5 {-155.5749999999999886313162 228.5999999999999943156581 -101.5999999999999943156581} V6 {-155.5749999999999886313162 266.6999999999999886313162 -101.5999999999999943156581} V7 {-155.5749999999999886313162 266.6999999999999886313162 304.7999999999999545252649} V8 {-155.5749999999999886313162 228.5999999999999943156581 304.7999999999999545252649}
put {rt_eye.s1} ell V {-50.80000000000000426325641 -44.44999999999998863131623 603.25} A {19.04999999999999715782906 0 0} B {0 -19.04999999999999715782906 0} C {0 0 19.04999999999999715782906}
put {rt_arm.r2} comb region yes tree {n {l rt_arm.c} {l rt_arm.gray.s}}
attr set {rt_arm.r2} {region} {R} {region_id} {1019} {material_id} {1} {los} {100} {color} {50/50/50}
put {rt_arm.s1} tgc V {-117.4750000000000227373675 -228.5999999999999658939487 304.7999999999999545252649} H {0 -38.09999999999999431565811 0} A {0 0 76.19999999999998863131623} B {76.19999999999998863131623 0 0} C {0 0 76.19999999999998863131623} D {76.19999999999998863131623 0 0}
put {lt_eye.r2} comb region yes tree {n {l lt_eye.s1} {l lt_eye.s2}}
attr set {lt_eye.r2} {region} {R} {region_id} {1028} {material_id} {1} {los} {100} {color} {0/0/0}
put {lt_eye.s1} ell V {-50.79999999999999715782906 44.44999999999999573674359 603.25} A {19.04999999999999715782906 0 0} B {0 19.04999999999999715782906 0} C {0 0 19.04999999999999715782906}
put {rt_eye.r1} comb region yes tree {- {l rt_eye.s1} {l rt_eye.s2}}
attr set {rt_eye.r1} {region} {R} {region_id} {1029} {material_id} {1} {los} {100} {color} {255/255/255}
put {lt_arm.r2} comb region yes tree {n {l lt_arm.c} {l lt_arm.gray.s}}
attr set {lt_arm.r2} {region} {R} {region_id} {1020} {material_id} {1} {los} {100} {color} {50/50/50}
put {lt_arm.s1} tgc V {-117.4749999999999943156581 228.5999999999999943156581 304.7999999999999545252649} H {0 38.09999999999999431565811 0} A {0 0 76.19999999999998863131623} B {76.19999999999998863131623 0 0} C {0 0 76.19999999999998863131623} D {76.19999999999998863131623 0 0}
put {rt_arm.r1} comb region yes tree {- {- {l rt_arm.c} {l rt_arm.gray.s}} {l rt_arm.gray.s2}}
attr set {rt_arm.r1} {region} {R} {region_id} {1018} {material_id} {1} {los} {100} {color} {255/0/0}
put {lt_eye.r1} comb region yes tree {- {l lt_eye.s1} {l lt_eye.s2}}
attr set {lt_eye.r1} {region} {R} {region_id} {1027} {material_id} {1} {los} {100} {color} {255/255/255}
put {lt_arm.r1} comb region yes tree {- {- {l lt_arm.c} {l lt_arm.gray.s}} {l lt_arm.gray.s2}}
attr set {lt_arm.r1} {region} {R} {region_id} {1017} {material_id} {1} {los} {100} {color} {255/0/0}
put {rt_ear.s2} tgc V {-130.1750000000000113686838 -152.3999999999999772626325 546.1000000000000227373675} H {25.39999999999999857891453 0 0} A {0 0 -50.7999999999999900524017} B {0 -50.79999999999997584154698 0} C {0 0 -50.7999999999999900524017} D {0 -50.79999999999997584154698 0}
put {lt_ear.s2} tgc V {-130.1749999999999829469743 152.4000000000000056843419 546.1000000000000227373675} H {25.39999999999999857891453 0 0} A {0 0 -50.7999999999999900524017} B {0 50.79999999999999715782906 0} C {0 0 -50.7999999999999900524017} D {0 50.79999999999999715782906 0}
put {rt_ear.s1} arb8 V1 {-104.7750000000000056843419 -76.19999999999997442046151 533.3999999999999772626325} V2 {-104.7750000000000056843419 -152.4000000000000056843419 533.3999999999999772626325} V3 {-104.7750000000000056843419 -152.4000000000000056843419 558.7999999999999545252649} V4 {-104.7750000000000056843419 -76.19999999999997442046151 558.7999999999999545252649} V5 {-130.1749999999999829469743 -76.19999999999997442046151 533.3999999999999772626325} V6 {-130.1750000000000113686838 -152.3999999999999772626325 533.3999999999999772626325} V7 {-130.1750000000000113686838 -152.3999999999999772626325 558.7999999999999545252649} V8 {-130.1749999999999829469743 -76.19999999999997442046151 558.7999999999999545252649}
put {rt_leg.s3} tgc V {-25.40000000000001278976924 -101.5999999999999943156581 -12.69999999999999928945726} H {0 -25.39999999999998792077349 0} A {0 0 76.19999999999997442046151} B {76.19999999999998863131623 0 0} C {0 0 76.19999999999997442046151} D {76.19999999999998863131623 0 0}
put {lt_ear.s1} arb8 V1 {-104.7749999999999914734872 76.19999999999998863131623 533.3999999999999772626325} V2 {-104.7749999999999914734872 152.4000000000000056843419 533.3999999999999772626325} V3 {-104.7749999999999914734872 152.4000000000000056843419 558.7999999999999545252649} V4 {-104.7749999999999914734872 76.19999999999998863131623 558.7999999999999545252649} V5 {-130.1749999999999829469743 76.19999999999998863131623 533.3999999999999772626325} V6 {-130.1749999999999829469743 152.4000000000000056843419 533.3999999999999772626325} V7 {-130.1749999999999829469743 152.4000000000000056843419 558.7999999999999545252649} V8 {-130.1749999999999829469743 76.19999999999998863131623 558.7999999999999545252649}
put {lt_leg.s3} tgc V {-25.39999999999999857891453 101.5999999999999943156581 -12.69999999999999928945726} H {0 25.39999999999999857891453 0} A {0 0 76.19999999999997442046151} B {76.19999999999998863131623 0 0} C {0 0 76.19999999999997442046151} D {76.19999999999998863131623 0 0}
put {rt_leg.r3} comb region yes tree {n {l rt_leg.c} {l rt_leg.black.s}}
attr set {rt_leg.r3} {region} {R} {region_id} {1014} {material_id} {1} {los} {100} {color} {0/0/0}
put {rt_leg.s2} arb8 V1 {76.19999999999998863131623 -76.20000000000000284217094 -317.4999999999999431565811} V2 {76.19999999999994599875208 -152.3999999999999772626325 -317.4999999999999431565811} V3 {101.5999999999999801048034 -165.100000000000051159077 -355.5999999999999090505298} V4 {101.6000000000000369482223 -63.50000000000000710542736 -355.5999999999999090505298} V5 {-126.9999999999999857891453 -76.19999999999990336618794 -317.4999999999998863131623} V6 {-126.9999999999999857891453 -152.399999999999948840923 -317.4999999999999431565811} V7 {-127.0000000000000284217094 -165.0999999999999943156581 -355.5999999999999090505298} V8 {-127.0000000000000426325641 -63.49999999999993605115378 -355.5999999999999090505298}
put {lt_leg.r3} comb region yes tree {n {l lt_leg.c} {l lt_leg.black.s}}
attr set {lt_leg.r3} {region} {R} {region_id} {1013} {material_id} {1} {los} {100} {color} {0/0/0}
put {lt_leg.s2} arb8 V1 {76.20000000000000284217094 76.19999999999998863131623 -317.4999999999999431565811} V2 {76.1999999999999602096068 152.3999999999999772626325 -317.4999999999999431565811} V3 {101.5999999999999943156581 165.100000000000051159077 -355.5999999999999090505298} V4 {101.600000000000051159077 63.49999999999999289457264 -355.5999999999999090505298} V5 {-126.9999999999999715782906 76.19999999999991757704265 -317.4999999999998863131623} V6 {-126.9999999999999715782906 152.3999999999999772626325 -317.4999999999999431565811} V7 {-127.0000000000000142108547 165.1000000000000227373675 -355.5999999999999090505298} V8 {-127.0000000000000284217094 63.4999999999999502620085 -355.5999999999999090505298}
put {rt_leg.r2} comb region yes tree {n {l rt_leg.c} {l rt_leg.white.s}}
attr set {rt_leg.r2} {region} {R} {region_id} {1015} {material_id} {1} {los} {100} {color} {255/255/255}
put {rt_leg.s1} arb8 V1 {50.79999999999998294697434 -101.5999999999999943156581 -317.5} V2 {50.79999999999998294697434 -127 -317.5} V3 {50.79999999999998294697434 -127 -12.69999999999999928945726} V4 {50.79999999999998294697434 -101.5999999999999943156581 -12.69999999999999928945726} V5 {-101.6000000000000085265128 -101.5999999999999801048034 -317.5} V6 {-101.6000000000000085265128 -126.9999999999999857891453 -317.5} V7 {-101.6000000000000085265128 -126.9999999999999857891453 -12.69999999999999928945726} V8 {-101.6000000000000085265128 -101.5999999999999801048034 -12.69999999999999928945726}
put {lt_leg.r2} comb region yes tree {n {l lt_leg.c} {l lt_leg.white.s}}
attr set {lt_leg.r2} {region} {R} {region_id} {1012} {material_id} {1} {los} {100} {color} {255/255/255}
put {lt_leg.s1} arb8 V1 {50.79999999999999715782906 101.5999999999999943156581 -317.5} V2 {50.79999999999999715782906 127 -317.5} V3 {50.79999999999999715782906 127 -12.69999999999999928945726} V4 {50.79999999999999715782906 101.5999999999999943156581 -12.69999999999999928945726} V5 {-101.5999999999999943156581 101.5999999999999943156581 -317.5} V6 {-101.5999999999999943156581 127 -317.5} V7 {-101.5999999999999943156581 127 -12.69999999999999928945726} V8 {-101.5999999999999943156581 101.5999999999999943156581 -12.69999999999999928945726}
put {rt_leg.r1} comb region yes tree {- {- {- {- {l rt_leg.c} {l rt_leg.white.s}} {l rt_leg.black.s}} {l rt_leg.s1i}} {l rt_leg.s1i2}}
attr set {rt_leg.r1} {region} {R} {region_id} {1016} {material_id} {1} {los} {100} {color} {255/0/0}
put {lt_leg.r1} comb region yes tree {- {- {- {- {l lt_leg.c} {l lt_leg.white.s}} {l lt_leg.black.s}} {l lt_leg.s1i}} {l lt_leg.s1i2}}
attr set {lt_leg.r1} {region} {R} {region_id} {1011} {material_id} {1} {los} {100} {color} {255/0/0}
put {body.s3i2} arb8 V1 {-6.151326253166899959978764 231.3729373086425198380311 390.9270626913569799398829} V2 {-6.151326253166907065406122 175.6740115273925368910568 446.6259884726068776217289} V3 {-6.151326253166899959978764 222.1160604959457600671158 493.068037441160242906335} V4 {-6.151326253166892854551406 277.8149862771957714357995 437.369111659910345224489} V5 {-231.13999999999995793587 231.37293730864257668145 390.9270626913569799398829} V6 {-231.13999999999995793587 175.6740115273925653127662 446.6259884726068776217289} V7 {-231.13999999999995793587 222.1160604959457884888252 493.068037441160242906335} V8 {-231.13999999999995793587 277.8149862771958282792184 437.369111659910345224489}
put {body.s3i1} arb8 V1 {-6.151326253166928381688194 -231.37293730864257668145 390.9270626913570367833017} V2 {-6.151326253166928381688194 -175.6740115273925368910568 446.6259884726068776217289} V3 {-6.151326253166928381688194 -222.1160604959457600671158 493.068037441160242906335} V4 {-6.151326253166928381688194 -277.8149862771958282792184 437.369111659910345224489} V5 {-231.1399999999999863575795 -231.37293730864257668145 390.9270626913570367833017} V6 {-231.1399999999999863575795 -175.6740115273925368910568 446.6259884726068776217289} V7 {-231.1399999999999863575795 -222.1160604959457600671158 493.068037441160242906335} V8 {-231.1399999999999863575795 -277.8149862771958282792184 437.369111659910345224489}
put {rt_ear.r} comb region yes tree {u {l rt_ear.s1} {n {l rt_ear.s2} {l rt_ear.s2i}}}
attr set {rt_ear.r} {region} {R} {region_id} {1026} {material_id} {1} {los} {100} {color} {50/50/50}
put {lt_ear.r} comb region yes tree {u {l lt_ear.s1} {n {l lt_ear.s2} {l lt_ear.s2i}}}
attr set {lt_ear.r} {region} {R} {region_id} {1025} {material_id} {1} {los} {100} {color} {50/50/50}
put {rt_arm.c} comb region no tree {u {u {u {u {l rt_arm.s1} {l rt_arm.s2}} {l rt_arm.s3}} {- {l rt_arm.s4} {l rt_arm.s4i}}} {l rt_arm.s5}}
put {lt_arm.c} comb region no tree {u {u {u {u {l lt_arm.s1} {l lt_arm.s2}} {l lt_arm.s3}} {- {l lt_arm.s4} {l lt_arm.s4i}}} {l lt_arm.s5}}
put {rt_leg.c} comb region no tree {u {u {l rt_leg.s1} {l rt_leg.s2}} {l rt_leg.s3}}
put {lt_leg.c} comb region no tree {u {u {l lt_leg.s1} {l lt_leg.s2}} {l lt_leg.s3}}
put {body.s4i} tgc V {-228.6000000000000227373675 -228.5999999999999943156581 38.09999999999999431565811} H {0 457.1999999999999886313162 0} A {0 0 381.0000000000000568434189} B {457.1999999999999886313162 0 0} C {0 0 381.0000000000000568434189} D {457.1999999999999886313162 0 0}
put {body.s2i} arb8 V1 {228.5999999999999943156581 -228.5999999999999943156581 342.8999999999999772626325} V2 {228.5999999999999943156581 228.5999999999999943156581 342.8999999999999772626325} V3 {228.5999999999999943156581 228.5999999999999943156581 38.09999999999999431565811} V4 {228.5999999999999943156581 -228.5999999999999943156581 38.09999999999999431565811} V5 {-228.5999999999999943156581 -228.5999999999999943156581 342.8999999999999772626325} V6 {-228.5999999999999943156581 228.5999999999999943156581 342.8999999999999772626325} V7 {-228.5999999999999943156581 228.5999999999999943156581 38.09999999999999431565811} V8 {-228.5999999999999943156581 -228.5999999999999943156581 38.09999999999999431565811}
put {buttons} comb region no tree {u {u {u {u {l button.r1} {l button.r1a}} {u {l button.r2} {l button.r2a}}} {u {u {l button.r3} {l button.r3a}} {u {l button.r4} {l button.r4a}}}} {u {u {l button.r5} {l button.r5a}} {u {l button.r6} {l button.r6a}}}}
attr set {buttons} {color} {0/255/0}
put {head.s9i} arb8 V1 {-98.42500000000002557953849 -76.1999999999999602096068 514.3499999999996816768544} V2 {-98.42500000000002557953849 76.1999999999999602096068 514.3499999999996816768544} V3 {-98.42500000000002557953849 76.1999999999999602096068 457.2000000000000454747351} V4 {-98.42500000000002557953849 -76.1999999999999602096068 457.2000000000000454747351} V5 {-9.525000000000012789769244 -76.1999999999999602096068 514.3499999999996816768544} V6 {-9.525000000000012789769244 76.1999999999999602096068 514.3499999999996816768544} V7 {-9.525000000000012789769244 76.1999999999999602096068 457.2000000000000454747351} V8 {-9.525000000000012789769244 -76.1999999999999602096068 457.2000000000000454747351}
put {body.s2a} tgc V {-228.6000000000000227373675 -228.5999999999999943156581 38.09999999999999431565811} H {0 457.1999999999999886313162 0} A {0 0 361.9499999999999886313162} B {438.1499999999999772626325 0 0} C {0 0 361.9500000000000454747351} D {438.1499999999999772626325 0 0}
put {head.s8i} arb8 V1 {-98.42500000000001136868377 -69.84999999999999431565811 514.3499999999997953636921} V2 {-98.42500000000001136868377 69.84999999999999431565811 514.3499999999997953636921} V3 {-98.42500000000001136868377 25.39999999999999857891453 546.1000000000000227373675} V4 {-98.42500000000001136868377 -25.39999999999999857891453 546.1000000000000227373675} V5 {-9.525000000000019895196601 -69.85000000000027853275242 514.3499999999994543031789} V6 {-9.525000000000019895196601 69.85000000000027853275242 514.3499999999995679900167} V7 {-9.525000000000019895196601 25.40000000000017266188479 546.1000000000000227373675} V8 {-9.525000000000019895196601 -25.40000000000007673861546 546.1000000000000227373675}
put {head.s7i} arb8 V1 {-98.42500000000001136868377 -63.49999999999999289457264 514.3499999999997953636921} V2 {-98.42500000000001136868377 63.49999999999999289457264 514.3499999999997953636921} V3 {-98.42500000000001136868377 63.49999999999999289457264 463.5499999999998408384272} V4 {-98.42500000000001136868377 -63.49999999999999289457264 463.5499999999998408384272} V5 {-9.525000000000019895196601 -63.49999999999999289457264 514.3499999999997953636921} V6 {-9.525000000000019895196601 63.49999999999999289457264 514.3499999999997953636921} V7 {-9.525000000000019895196601 63.49999999999999289457264 463.5499999999998408384272} V8 {-9.525000000000019895196601 -63.49999999999999289457264 463.5499999999998408384272}
put {head.s4i} arb8 V1 {-3.110602869834276076328758E-15 -25.39999999999999502620085 587.3749999999998863131623} V2 {-7.776507174585689796391442E-15 -63.49999999999998578914528 587.3749999999998863131623} V3 {-7.776507174585689796391442E-15 -63.49999999999998578914528 619.125} V4 {-3.110602869834276076328758E-15 -25.39999999999999502620085 619.125} V5 {-50.7999999999999900524017 -25.39999999999998792077349 587.3749999999998863131623} V6 {-50.79999999999999715782906 -63.49999999999997868371793 587.3749999999998863131623} V7 {-50.79999999999999715782906 -63.49999999999997868371793 619.125} V8 {-50.7999999999999900524017 -25.39999999999998792077349 619.125}
put {head.s3i} arb8 V1 {0 25.39999999999999502620085 587.3749999999998863131623} V2 {0 63.49999999999998578914528 587.3749999999998863131623} V3 {0 63.49999999999998578914528 619.125} V4 {0 25.39999999999999502620085 619.125} V5 {-50.7999999999999900524017 25.39999999999999502620085 587.3749999999998863131623} V6 {-50.7999999999999900524017 63.49999999999998578914528 587.3749999999998863131623} V7 {-50.7999999999999900524017 63.49999999999998578914528 619.125} V8 {-50.7999999999999900524017 25.39999999999999502620085 619.125}
put {head.s2i} arb8 V1 {-98.42500000000001136868377 -107.9499999999999886313162 527.0499999999998408384272} V2 {-98.42500000000001136868377 107.9499999999999886313162 527.0499999999998408384272} V3 {-98.42500000000001136868377 107.9499999999999886313162 565.1499999999998635757947} V4 {-98.42500000000001136868377 -107.9499999999999886313162 565.1499999999998635757947} V5 {-136.5249999999999772626325 -107.9499999999999886313162 527.0499999999998408384272} V6 {-136.5249999999999772626325 107.9499999999999886313162 527.0499999999998408384272} V7 {-136.5249999999999772626325 107.9499999999999886313162 565.1499999999998635757947} V8 {-136.5249999999999772626325 -107.9499999999999886313162 565.1499999999998635757947}
put {head.s1i} tgc V {-117.4749999999999943156581 0 444.5} H {0 0 203.2000000000000454747351} A {0 -100.0125000000000028421709 0} B {100.0125000000000170530257 0 0} C {0 -100.0125000000000028421709 0} D {100.0125000000000170530257 0 0}
put {beard.r} comb region yes tree {- {n {- {l head.s8} {l head.s1}} {l head.s9}} {l head.s9i}}
attr set {beard.r} {region} {R} {region_id} {1038} {material_id} {1} {los} {100} {color} {255/255/255}
put {body.s5} arb8 V1 {31.75 -25.39999999999999857891453 444.5} V2 {31.75 25.39999999999999857891453 444.5} V3 {31.75 25.39999999999999857891453 342.8999999999999772626325} V4 {31.75 -25.39999999999999857891453 342.8999999999999772626325} V5 {-228.5999999999999943156581 -25.39999999999999857891453 444.5} V6 {-228.5999999999999943156581 25.39999999999999857891453 444.5} V7 {-228.5999999999999943156581 25.39999999999999857891453 342.8999999999999772626325} V8 {-228.5999999999999943156581 -25.39999999999999857891453 342.8999999999999772626325}
put {body.s4} arb8 V1 {228.5999999999999943156581 -25.39999999999999857891453 38.09999999999999431565811} V2 {228.5999999999999943156581 25.39999999999999857891453 38.09999999999999431565811} V3 {228.5999999999999943156581 25.39999999999999857891453 342.8999999999999772626325} V4 {228.5999999999999943156581 -25.39999999999999857891453 342.8999999999999772626325} V5 {-228.5999999999999943156581 -25.39999999999999857891453 38.09999999999999431565811} V6 {-228.5999999999999943156581 25.39999999999999857891453 38.09999999999999431565811} V7 {-228.5999999999999943156581 25.39999999999999857891453 342.8999999999999772626325} V8 {-228.5999999999999943156581 -25.39999999999999857891453 342.8999999999999772626325}
put {body.r4} comb region yes tree {u {- {n {l body.c} {l body.white.s1}} {l body.gold.s1}} {- {n {l body.c} {l body.white.s2}} {l body.gold.s1}}}
attr set {body.r4} {region} {R} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/255}
put {body.s3} arb8 V1 {-6.349999999999999644728632 -228.600000000000051159077 342.8999999999998635757947} V2 {-6.349999999999999644728632 228.600000000000051159077 342.8999999999998635757947} V3 {-6.349999999999999644728632 228.600000000000051159077 444.5000000000000568434189} V4 {-6.349999999999999644728632 -228.600000000000051159077 444.5000000000000568434189} V5 {-228.6000000000000795807864 -228.600000000000051159077 342.8999999999998635757947} V6 {-228.6000000000000795807864 228.600000000000051159077 342.8999999999998635757947} V7 {-228.6000000000000795807864 228.600000000000051159077 444.5000000000000568434189} V8 {-228.6000000000000795807864 -228.600000000000051159077 444.5000000000000568434189}
put {body.r3} comb region yes tree {n {l body.c} {l body.gold.c}}
attr set {body.r3} {region} {R} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/215/0}
put {body.s2} tgc V {-228.6000000000000227373675 -228.5999999999999943156581 38.09999999999999431565811} H {0 457.1999999999999886313162 0} A {0 0 355.5999999999999658939487} B {431.7999999999998976818461 0 0} C {0 0 355.5999999999999658939487} D {431.7999999999998976818461 0 0}
put {body.r2} comb region yes tree {- {n {l body.c} {l body.black.s1}} {l body.gold.c}}
attr set {body.r2} {region} {R} {region_id} {1000} {material_id} {1} {los} {100} {color} {0/0/0}
put {body.s1} arb8 V1 {228.5999999999999658939487 -228.5999999999999658939487 -12.69999999999999928945726} V2 {228.5999999999999658939487 228.5999999999999658939487 -12.69999999999999928945726} V3 {228.5999999999999658939487 228.5999999999999658939487 38.09999999999999431565811} V4 {228.5999999999999658939487 -228.5999999999999658939487 38.09999999999999431565811} V5 {-228.5999999999999658939487 -228.5999999999999658939487 -12.69999999999999928945726} V6 {-228.5999999999999658939487 228.5999999999999658939487 -12.69999999999999928945726} V7 {-228.5999999999999658939487 228.5999999999999658939487 38.09999999999999431565811} V8 {-228.5999999999999658939487 -228.5999999999999658939487 38.09999999999999431565811}
put {body.r1} comb region yes tree {- {- {- {- {l body.c} {l body.white.s1}} {l body.white.s2}} {l body.black.s1}} {l body.gold.s1}}
attr set {body.r1} {region} {R} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/0/0}
put {head.s9} arb8 V1 {-98.42500000000001136868377 -88.89999999999997726263246 514.3499999999996816768544} V2 {-98.42500000000001136868377 88.89999999999997726263246 514.3499999999996816768544} V3 {-98.42500000000001136868377 88.89999999999997726263246 444.4999999999998863131623} V4 {-98.42500000000001136868377 -88.89999999999997726263246 444.4999999999998863131623} V5 {-9.525000000000016342482922 -88.89999999999997726263246 514.3499999999996816768544} V6 {-9.525000000000016342482922 88.89999999999997726263246 514.3499999999996816768544} V7 {-9.525000000000016342482922 88.89999999999997726263246 444.4999999999998863131623} V8 {-9.525000000000016342482922 -88.89999999999997726263246 444.4999999999998863131623}
put {head.s8} tgc V {-117.4749999999999943156581 0 444.5} H {0 0 203.1999999999999886313162} A {0 -107.9499999999999886313162 0} B {107.9499999999999744204615 0 0} C {0 -107.9499999999999886313162 0} D {107.9499999999999744204615 0 0}
put {head.s6} ell V {-15.875 0 546.1000000000000227373675} A {25.39999999999999857891453 0 0} B {0 25.39999999999999857891453 0} C {0 0 6.349999999999999644728632}
put {head.s5} tgc V {-15.875 0 546.1000000000000227373675} H {0 0 69.84999999999999431565811} A {0 -25.39999999999999857891453 0} B {25.39999999999999857891453 0 0} C {0 -1.587499999999999911182158 0} D {1.587499999999999911182158 0 0}
put {head.s1} tgc V {-117.4749999999999943156581 0 444.5} H {0 0 203.1999999999999886313162} A {0 -101.6000000000000085265128 0} B {101.6000000000000227373675 0 0} C {0 -101.6000000000000085265128 0} D {101.6000000000000227373675 0 0}
put {head.r1} comb region yes tree {u {u {- {- {- {- {- {l head.s1} {l head.s1i}} {l head.s2i}} {l head.s3i}} {l head.s4i}} {l head.s7i}} {l head.s5}} {l head.s6}}
attr set {head.r1} {region} {R} {region_id} {1002} {material_id} {1} {los} {100} {color} {50/50/50}
put {rt_arm} comb region no tree {u {u {l rt_arm.r1} {l rt_arm.r2}} {u {l rt_arm.r3} {l missile2.r}}}
put {lt_arm} comb region no tree {u {u {l lt_arm.r1} {l lt_arm.r2}} {u {l lt_arm.r3} {l missile1.r}}}
put {rt_leg} comb region no tree {u {u {l rt_leg.r1} {l rt_leg.r2}} {l rt_leg.r3}}
put {lt_leg} comb region no tree {u {u {l lt_leg.r1} {l lt_leg.r2}} {l lt_leg.r3}}
put {rt_leg.white.s} arb8 V1 {127 -1.555301434917138590367013E-14 -253.9999999999999147348717} V2 {126.9999999999999715782906 -203.2000000000001023181539 -253.9999999999999147348717} V3 {126.9999999999999715782906 -203.2000000000001023181539 -279.3999999999999204192136} V4 {127 -1.555301434917138590367013E-14 -279.3999999999999204192136} V5 {-152.3999999999999772626325 1.866361721900566119113798E-14 -253.9999999999999147348717} V6 {-152.4000000000000056843419 -203.2000000000000454747351 -253.9999999999999147348717} V7 {-152.4000000000000056843419 -203.2000000000000454747351 -279.3999999999999204192136} V8 {-152.3999999999999772626325 1.866361721900566119113798E-14 -279.3999999999999204192136}
put {lt_leg.white.s} arb8 V1 {127 0 -253.9999999999999147348717} V2 {127 203.2000000000000738964445 -253.9999999999999147348717} V3 {127 203.2000000000000738964445 -279.3999999999999204192136} V4 {127 0 -279.3999999999999204192136} V5 {-152.3999999999999772626325 0 -253.9999999999999147348717} V6 {-152.3999999999999772626325 203.2000000000000738964445 -253.9999999999999147348717} V7 {-152.3999999999999772626325 203.2000000000000738964445 -279.3999999999999204192136} V8 {-152.3999999999999772626325 0 -279.3999999999999204192136}
put {body.c} comb region no tree {u {u {u {u {l body.s1} {n {l body.s2} {l body.s2i}}} {- {- {l body.s3} {l body.s3i1}} {l body.s3i2}}} {n {l body.s4} {l body.s4i}}} {l body.s5}}
put {hat.s3} ell V {-117.4749999999999943156581 0 889} A {38.09999999999999431565811 0 0} B {0 38.09999999999999431565811 0} C {0 0 38.09999999999999431565811}
put {hat.r3} comb region yes tree {l hat.s3}
attr set {hat.r3} {region} {R} {region_id} {1004} {material_id} {1} {los} {100} {color} {255/255/255}
put {hat.s2} tgc V {-117.4749999999999943156581 0 685.8000000000000682121026} H {0 0 203.1999999999999886313162} A {0 -101.5999999999999943156581 0} B {101.5999999999999943156581 0 0} C {0 -12.69999999999999928945726 0} D {12.69999999999999928945726 0 0}
put {hat.r2} comb region yes tree {l hat.s2}
attr set {hat.r2} {region} {R} {region_id} {1003} {material_id} {1} {los} {100} {color} {255/0/0}
put {hat.s1} tgc V {-117.4749999999999943156581 0 647.7000000000000454747351} H {0 0 38.09999999999999431565811} A {0 -114.2999999999999829469743 0} B {114.2999999999999829469743 0 0} C {0 -114.2999999999999829469743 0} D {114.2999999999999829469743 0 0}
put {hat.r1} comb region yes tree {l hat.s1}
attr set {hat.r1} {region} {R} {region_id} {1001} {material_id} {1} {los} {100} {color} {255/255/255}
put {rt_leg.black.s} arb8 V1 {127 -1.555301434917138590367013E-14 -355.5999999999999090505298} V2 {126.9999999999999715782906 -203.2000000000001023181539 -355.5999999999999090505298} V3 {126.9999999999999715782906 -203.2000000000001023181539 -279.3999999999999204192136} V4 {127 -1.555301434917138590367013E-14 -279.3999999999999204192136} V5 {-152.3999999999999772626325 1.866361721900566119113798E-14 -355.5999999999999090505298} V6 {-152.4000000000000056843419 -203.2000000000000454747351 -355.5999999999999090505298} V7 {-152.4000000000000056843419 -203.2000000000000454747351 -279.3999999999999204192136} V8 {-152.3999999999999772626325 1.866361721900566119113798E-14 -279.3999999999999204192136}
put {lt_leg.black.s} arb8 V1 {127 0 -355.5999999999999090505298} V2 {127 203.2000000000000738964445 -355.5999999999999090505298} V3 {127 203.2000000000000738964445 -279.3999999999999204192136} V4 {127 0 -279.3999999999999204192136} V5 {-152.3999999999999772626325 0 -355.5999999999999090505298} V6 {-152.3999999999999772626325 203.2000000000000738964445 -355.5999999999999090505298} V7 {-152.3999999999999772626325 203.2000000000000738964445 -279.3999999999999204192136} V8 {-152.3999999999999772626325 0 -279.3999999999999204192136}
put {rt_arm.gray.s2} tgc V {-117.4750000000000227373675 -228.5999999999999658939487 304.7999999999999545252649} H {0 -41.27499999999999857891453 0} A {0 0 25.39999999999999857891453} B {25.39999999999999857891453 0 0} C {0 0 25.39999999999999857891453} D {25.39999999999999857891453 0 0}
put {lt_arm.gray.s2} tgc V {-117.4749999999999943156581 228.5999999999999943156581 304.7999999999999545252649} H {0 41.27499999999999857891453 0} A {0 0 25.39999999999999857891453} B {25.39999999999999857891453 0 0} C {0 0 25.39999999999999857891453} D {25.39999999999999857891453 0 0}
put {arms} comb region no tree {u {l lt_arm {-0.5 0 -0.866025403784439 87.752043073497 0 1 0 0 0.866025403784439 0 -0.5 558.936334309577 0 0 0 1}} {l rt_arm {-0.17364817766693 0 -0.984807753012208 162.295083446698 0 1 0 0 0.984807753012208 0 -0.17364817766693 473.418255337989 0 0 0 1}}}
put {eyes} comb region no tree {u {u {l lt_eye.r1} {l lt_eye.r2}} {u {l rt_eye.r1} {l rt_eye.r2}}}
put {body} comb region no tree {u {u {u {l body.r1} {l body.r2}} {u {l body.r3} {l body.r4}}} {l buttons}}
put {legs} comb region no tree {u {l lt_leg {0.707106781186548 0 -0.707106781186547 -16.4197438789308 0 1 0 0 0.707106781186547 0 0.707106781186548 14.2407683632075 0 0 0 1}} {l rt_leg {0.984807753012208 0 0.17364817766693 1.8194487828801 0 1 0 0 -0.17364817766693 0 0.984807753012208 -4.60360524948499 0 0 0 1}}}
put {head} comb region no tree {u {u {u {l head.r1} {l lt_ear.r}} {u {l rt_ear.r} {l eyes}}} {u {l mustache.r} {l beard.r}}}
put {hat} comb region no tree {u {u {l hat.r1} {l hat.r2}} {l hat.r3}}
put {rt_arm.gray.s} arb8 V1 {-76.20000000000001705302566 -177.7999999999999545252649 -12.69999999999999928945726} V2 {-76.20000000000001705302566 -279.3999999999999772626325 -12.69999999999999928945726} V3 {-76.20000000000001705302566 -279.3999999999999772626325 -114.2999999999999971578291} V4 {-76.20000000000001705302566 -177.7999999999999545252649 -114.2999999999999971578291} V5 {-165.1000000000000227373675 -177.7999999999999261035555 -12.69999999999999928945726} V6 {-165.1000000000000227373675 -279.3999999999999772626325 -12.69999999999999928945726} V7 {-165.1000000000000227373675 -279.3999999999999772626325 -114.2999999999999971578291} V8 {-165.1000000000000227373675 -177.7999999999999261035555 -114.2999999999999971578291}
put {lt_arm.gray.s} arb8 V1 {-76.19999999999998863131623 177.7999999999999545252649 -12.69999999999999928945726} V2 {-76.19999999999998863131623 279.3999999999999772626325 -12.69999999999999928945726} V3 {-76.19999999999998863131623 279.3999999999999772626325 -114.2999999999999971578291} V4 {-76.19999999999998863131623 177.7999999999999545252649 -114.2999999999999971578291} V5 {-165.0999999999999943156581 177.7999999999999545252649 -12.69999999999999928945726} V6 {-165.0999999999999943156581 279.3999999999999772626325 -12.69999999999999928945726} V7 {-165.0999999999999943156581 279.3999999999999772626325 -114.2999999999999971578291} V8 {-165.0999999999999943156581 177.7999999999999545252649 -114.2999999999999971578291}
put {body.white.s2} arb8 V1 {228.6000000000000227373675 -25.39999999999999857891453 38.09999999999999431565811} V2 {228.6000000000000227373675 25.39999999999999857891453 38.09999999999999431565811} V3 {228.6000000000000227373675 25.39999999999999857891453 444.5000000000000568434189} V4 {228.6000000000000227373675 -25.39999999999999857891453 444.5000000000000568434189} V5 {-228.6000000000000227373675 -25.39999999999999857891453 38.09999999999999431565811} V6 {-228.6000000000000227373675 25.39999999999999857891453 38.09999999999999431565811} V7 {-228.6000000000000227373675 25.39999999999999857891453 444.5000000000000568434189} V8 {-228.6000000000000227373675 -25.39999999999999857891453 444.5000000000000568434189}
put {body.white.s1} arb8 V1 {228.5999999999999658939487 -228.5999999999999658939487 -12.69999999999999928945726} V2 {228.5999999999999658939487 228.5999999999999658939487 -12.69999999999999928945726} V3 {228.5999999999999658939487 228.5999999999999658939487 63.49999999999999289457264} V4 {228.5999999999999658939487 -228.5999999999999658939487 63.49999999999999289457264} V5 {-228.5999999999999658939487 -228.5999999999999658939487 -12.69999999999999928945726} V6 {-228.5999999999999658939487 228.5999999999999658939487 -12.69999999999999928945726} V7 {-228.5999999999999658939487 228.5999999999999658939487 63.49999999999999289457264} V8 {-228.5999999999999658939487 -228.5999999999999658939487 63.49999999999999289457264}
-43
View File
@@ -1,43 +0,0 @@
title {Single Row 7-ball Deep Groove 608Z Ball Bearing, 8mm ID x 22mm OD x 7mm}
units mm
put {ballgroove.s} tor V {0 0 0} H {0 1 0} r_a 7.5 r_h 2
put {innerringrightround.s} tor V {0 3.399999999999999911182158 0} H {0 1 0} r_a 4.099999999999999644728632 r_h 0.1000000000000000055511151
put {outerringmainin.s} tgc V {0 -3.5 0} H {0 7 0} A {0 0 9.599999999999999644728632} B {9.599999999999999644728632 0 0} C {0 0 9.599999999999999644728632} D {9.599999999999999644728632 0 0}
put {outerringmaincenter.s} tgc V {0 -3.399999999999999911182158 0} H {0 6.799999999999999822364316 0} A {0 0 11} B {11 0 0} C {0 0 11} D {11 0 0}
put {innerring2.s} tgc V {0 -3.399999999999999911182158 0} H {0 6.799999999999999822364316 0} A {0 0 5.400000000000000355271368} B {5.400000000000000355271368 0 0} C {0 0 5.400000000000000355271368} D {5.400000000000000355271368 0 0}
put {innerring2leftround.s} tor V {0 -3.399999999999999911182158 0} H {0 1 0} r_a 5.299999999999999822364316 r_h 0.1000000000000000055511151
put {outerringmaininrightround.s} tor V {0 3.399999999999999911182158 0} H {0 0.9999999999999998889776975 0} r_a 9.599999999999999644728632 r_h 0.1000000000000000055511151
put {outerringinner2.s} tgc V {0 -2.200000000000000177635684 0} H {0 4.400000000000000355271368 0} A {0 0 9.5} B {9.5 0 0} C {0 0 9.5} D {9.5 0 0}
put {outerringmainleftround.s} tor V {0 -3.399999999999999911182158 0} H {0 0.9999999999999998889776975 0} r_a 10.90000000000000035527137 r_h 0.1000000000000000055511151
put {outerring.r} comb region yes tree {u {u {u {u {u {u {u {u {u {- {- {l outerringmaincenter.s} {l outerringmainfullcut.s}} {l ballgroove.s}} {- {- {l outerringmainout.s} {l outerringmainin.s}} {l ballgroove.s}}} {- {- {l outerringinner.s} {l outerringinnercut.s}} {l ballgroove.s}}} {- {- {l outerringinner2.s} {l outerringinnercut2.s}} {l ballgroove.s}}} {l outerringmainleftround.s}} {l outerringmainrightround.s}} {l outerringmaininleftround.s}} {l outerringmaininrightround.s}} {l outerringinnerrightround.s}} {l outerringinnerleftround.s}}
attr set {outerring.r} {region} {R} {region_id} {1010} {material_id} {1} {los} {100}
put {innerring.s} tgc V {0 -3.5 0} H {0 7 0} A {0 0 5.299999999999999822364316} B {5.299999999999999822364316 0 0} C {0 0 5.299999999999999822364316} D {5.299999999999999822364316 0 0}
put {innerring.r} comb region yes tree {u {u {u {u {u {u {u {u {- {- {l innneroutercenter.s} {l ballgroove.s}} {l shaftcut1.s}} {- {- {l innerring.s} {l ballgroove.s}} {l shaftcut2.s}}} {- {- {l innerring2.s} {l ballgroove.s}} {l shaftcut1.s}}} {- {l innerlefttrc.s} {l shaftcut1.s}}} {- {l innerrighttrc.s} {l shaftcut1.s}}} {l innerring2leftround.s}} {l innerring2rightround.s}} {l innerringleftround.s}} {l innerringrightround.s}}
attr set {innerring.r} {region} {R} {region_id} {1004} {material_id} {1} {los} {100}
put {shaftcut2.s} tgc V {0 -3.5 0} H {0 7 0} A {0 0 4.099999999999999644728632} B {4.099999999999999644728632 0 0} C {0 0 4.099999999999999644728632} D {4.099999999999999644728632 0 0}
put {shaftcut1.s} tgc V {0 -3.5 0} H {0 7 0} A {0 0 4} B {4 0 0} C {0 0 4} D {4 0 0}
put {outerringinner.s} tgc V {0 -2.299999999999999822364316 0} H {0 4.599999999999999644728632 0} A {0 0 9.5} B {9.5 0 0} C {0 0 9.5} D {9.5 0 0}
put {innerringleftround.s} tor V {0 -3.399999999999999911182158 0} H {0 1 0} r_a 4.099999999999999644728632 r_h 0.1000000000000000055511151
put {outerringinnercut2.s} tgc V {0 -2.299999999999999822364316 0} H {0 4.599999999999999644728632 0} A {0 0 9} B {9 0 0} C {0 0 9} D {9 0 0}
put {outerringinnerrightround.s} tor V {0 2.200000000000000177635684 0} H {0 0.9999999999999998889776975 0} r_a 9.099999999999999644728632 r_h 0.1000000000000000055511151
put {innerrighttrc.s} tgc V {0 2.5 0} H {0 0.2000000000000000111022302 0} A {0 0 6.200000000000000177635684} B {6.200000000000000177635684 0 0} C {0 0 5.400000000000000355271368} D {5.400000000000000355271368 0 0}
put {outerringmaininleftround.s} tor V {0 -3.399999999999999911182158 0} H {0 0.9999999999999998889776975 0} r_a 9.599999999999999644728632 r_h 0.1000000000000000055511151
put {outerringinnercut.s} tgc V {0 -2.299999999999999822364316 0} H {0 4.599999999999999644728632 0} A {0 0 9.099999999999999644728632} B {9.099999999999999644728632 0 0} C {0 0 9.099999999999999644728632} D {9.099999999999999644728632 0 0}
put {innneroutercenter.s} tgc V {0 -2.5 0} H {0 5 0} A {0 0 6.200000000000000177635684} B {6.200000000000000177635684 0 0} C {0 0 6.200000000000000177635684} D {6.200000000000000177635684 0 0}
put {bearing} comb region no tree {u {u {l outerring.r} {l innerring.r}} {l balls.r}}
attr set {bearing} {shader} {glass}
put {balls.r} comb region yes tree {u {u {u {l ball101} {l ball201}} {u {l ball301} {l ball401}}} {u {u {l ball501} {l ball601}} {l ball701}}}
attr set {balls.r} {region} {R} {region_id} {1011} {material_id} {1} {los} {100}
put {innerlefttrc.s} tgc V {0 -2.5 0} H {0 -0.2000000000000000111022302 0} A {0 0 -6.200000000000000177635684} B {6.200000000000000177635684 0 0} C {0 0 -5.400000000000000355271368} D {5.400000000000000355271368 0 0}
put {ball701} ell V {1.836909530733565887317127E-15 0 -7.5} A {2 0 4.898425415289509032845672E-16} B {0 2 0} C {-4.898425415289509032845672E-16 0 2}
put {ball601} ell V {5.57358619108045960643949 0 -5.018479547691433673151096} A {1.338261212717715586961731 0 1.486289650954789154368996} B {0 2 0} C {-1.486289650954789154368996 0 1.338261212717715586961731}
put {ball501} ell V {7.386058147591560540945466 0 1.302361332501977386755243} A {-0.3472963553338606623732687 0 1.969615506024416040631309} B {0 2 0} C {-1.969615506024416040631309 0 -0.3472963553338606623732687}
put {ball401} ell V {3.521036720894181293317615 0 6.622106946441951969006823} A {-1.765895185717853754781004 0 0.9389431255717817226269517} B {0 2 0} C {-0.9389431255717817226269517 0 -1.765895185717853754781004}
put {ball301} ell V {-3.050524823068503366130244 0 6.851590932319505888870026} A {-1.827090915285201511153446 0 -0.8134732861516008606272976} B {0 2 0} C {0.8134732861516008606272976 0 -1.827090915285201511153446}
put {ball201} ell V {-7.277217947069973824625322 0 1.814414216997508377815507} A {-0.4838437911993355711182119 0 -1.940591452551992945885218} B {0 2 0} C {1.940591452551992945885218 0 -0.4838437911993355711182119}
put {ball101} ell V {-5.910080652050415217502177 0 -4.617461064942436799185543} A {1.231322950651316583403627 0 -1.576021507213444028394633} B {0 2 0} C {1.576021507213444028394633 0 1.231322950651316583403627}
put {outerringmainfullcut.s} tgc V {0 -3.5 0} H {0 7 0} A {0 0 9.5} B {9.5 0 0} C {0 0 9.5} D {9.5 0 0}
put {outerringmainout.s} tgc V {0 -3.5 0} H {0 7 0} A {0 0 10.90000000000000035527137} B {10.90000000000000035527137 0 0} C {0 0 10.90000000000000035527137} D {10.90000000000000035527137 0 0}
put {innerring2rightround.s} tor V {0 3.399999999999999911182158 0} H {0 1 0} r_a 5.299999999999999822364316 r_h 0.1000000000000000055511151
put {outerringinnerleftround.s} tor V {0 -2.200000000000000177635684 0} H {0 0.9999999999999998889776975 0} r_a 9.099999999999999644728632 r_h 0.1000000000000000055511151
put {outerringmainrightround.s} tor V {0 3.399999999999999911182158 0} H {0 0.9999999999999998889776975 0} r_a 10.90000000000000035527137 r_h 0.1000000000000000055511151
-26
View File
@@ -1,26 +0,0 @@
set(
CHESS_PARTS
bishop.asc
chessboard.asc
king.asc
knight.asc
pawn.asc
queen.asc
rook.asc
)
foreach(piece ${CHESS_PARTS})
g_target(${piece} "BRL-CAD Geometry Models/Sample/Chess")
endforeach(piece ${CHESS_PARTS})
cmakefiles(
${CHESS_PARTS}
CMakeLists.txt
)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
-27
View File
@@ -1,27 +0,0 @@
title {Bishop by Jeff Sieu. Made for Google Code-in 2017}
units mm
put {bottomtor.s} tor V {0 0 9} H {6.12323399573676603586882E-17 0 1} r_a 11.78466675885103676080234 r_h 3.825815710827906279689614
put {bottometo.s} eto V {0 0 20} N {0 0 0.06032399549610674427402301} C {2.864077970686895735497046 1.71612229850775266370988 1.889299368274914403542653} r 7.634087276719064618646371 r_d 1.673109642593672896637713
put {head_fill.s} tgc V {0 0 58.80223912679091569088996} H {0 0 22.65963591768163354345234} A {5.387125525462328923254063 0 0} B {0 5.387125525462328923254063 0} C {5.200376920059111007788033 0 0} D {0 5.200376920059111007788033 0}
put {head_bulb.c} comb region no tree {u {u {u {l head_tip.s} {l headeto1.s}} {u {l headeto2.s} {l headeto3.s}}} {u {l headtor.s} {l head_fill.s}}}
put {head_tip.s} ell V {0 0 87.04042899999969051805238} A {4.122892005997910835901621 0 0} B {0 4.122892005997910835901621 0} C {0 0 1.842941974166217855568561}
put {headeto3.s} eto V {4.688718984760804335454747E-15 0 59.13440800000000763247954} N {-7.947115565380555332745523E-18 0 -0.06489312323286719474957351} C {-4.236592184243099801221888 2.53851689495714083477651 -2.794683321910145679112247} r 6.747558139033351665148075 r_d 2.154325975943817361724086
put {headeto2.s} eto V {0 0 69.75203000000003328295861} N {1.448859083826348923311558E-17 0 0.05915416121754862865955715} C {3.216284115722051861752107 0.07864296900740583295963404 7.027901354553716117834483} r 5.71636407530149437405953 r_d 5.245951427846474501848206
put {headeto1.s} eto V {0 0 78.93410500000000240561349} N {-6.702751448643837023482541E-18 0 -0.05473211911638976162608472} C {-4.89647969165551177894713 -1.380861880325698898275277 -7.149314636959307023289512} r 5.669699999999999739941359 r_d 2.770284953476933154092876
put {bodytor.s} tor V {0 0 25} H {6.12323399573676603586882E-17 0 1} r_a 8.61686192136895989790446 r_h 0.9710977822416242410952236
put {bodycut.s} tor V {0 0 44.99824699999995658572516} H {6.12323399573676603586882E-17 0 1} r_a 84.47809976324354863663757 r_h 78.38786126059979153524182
put {headtor.s} tor V {0 0 61.97812700000005747824616} H {3.061616997868383634231992E-16 0 1} r_a 8.239894264539179502548905 r_h 0.9722303169289367996697138
put {baseeto.s} eto V {0 0 5} N {-5.470978323999804257192075E-18 0 -0.04467392825269222295103688} C {9.315747832292275987242647 -1.365449293915910411456593 -4.391804451322707691929281} r 10.59850529883725656077331 r_d 4.265499428605880716247611
put {headcut.s} rpc V {12.21216100000001958392204 7.476746999999903664502199 83.68170200000177771926246} H {-23.87939453125 2.601874869850522123907568E-16 1.438855652391413561129983E-15} B {-6.645126338810317127466624E-16 -8.09669190546901518246159 -9.5641987525274494430505} r 1.903339211850920698054779
put {bishop.r} comb region yes tree {l bishop.c {1 0 0 0 0 1 0 0 0 0 1 0.960356 0 0 0 1}}
attr set {bishop.r} {region} {R} {shader} {plastic {re 0.1 sp 0.9 di 0.1 sh 50 ex 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/217}
put {bottom.c} comb region no tree {u {u {l bottometo.s} {l bottomtor.s}} {u {l baseeto.s} {l base_filler.s}}}
put {bishop.c} comb region no tree {u {u {l head.c} {l body.c}} {l bottom.c}}
put {scene.g} comb region no tree {u {l bishop.r} {l tile.r}}
put {body.s} tgc V {0 0 5.912562917080187219198706} H {0 0 56.83007219556699851636949} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {tile.s} arb8 V1 {28.5 -28.5 0} V2 {28.5 28.5 0} V3 {28.5 28.5 -1} V4 {28.5 -28.5 -1} V5 {-28.5 -28.5 0} V6 {-28.5 28.5 0} V7 {-28.5 28.5 -1} V8 {-28.5 -28.5 -1}
put {tile.r} comb region yes tree {l tile.s}
attr set {tile.r} {oshader} {plastic {sh 1}} {region} {R} {shader} {plastic {re 0.5 sh 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/255}
put {body.c} comb region no tree {u {- {l body.s} {l bodycut.s}} {l bodytor.s}}
put {head.c} comb region no tree {- {l head_bulb.c} {l headcut.s}}
put {base_filler.s} tgc V {0 0 -0.8138631382182293094729175} H {0 0 12.74035922868059600432389} A {16.38855503646686528895771 0 0} B {0 16.38855503646686528895771 0} C {9.863417071382475143082047 0 0} D {0 4.931708535691237571541023 0}
-83
View File
@@ -1,83 +0,0 @@
title {Chessboard by Jeff Sieu. Made for Google Code-in 2017}
units mm
put {board_cuts.c} comb region no tree {u {u {l boardcut1.s} {l boardcut2.s}} {u {l boardcut3.s} {l boardcut4.s}}}
put {tiles_dark.r} comb region yes tree {l tiles_dark.c}
attr set {tiles_dark.r} {oshader} {plastic} {region} {R} {shader} {plastic {re 0.1 sp 0.8 di 0.2}} {region_id} {1000} {material_id} {1} {los} {100} {color} {75/45/47}
put {wood_plane.s} arb8 V1 {313.5 -313.5 -15} V2 {313.5 313.5 -15} V3 {313.5 313.5 5} V4 {313.5 -313.5 5} V5 {-313.5 -313.5 -15} V6 {-313.5 313.5 -15} V7 {-313.5 313.5 5} V8 {-313.5 -313.5 5}
put {tiles_dark.c} comb region no tree {u {u {u {u {u {l a1.s} {l c1.s}} {u {l e1.s} {l g1.s}}} {u {u {l b2.s} {l d2.s}} {u {l f2.s} {l h2.s}}}} {u {u {u {l a3.s} {l c3.s}} {u {l e3.s} {l g3.s}}} {u {u {l b4.s} {l d4.s}} {u {l f4.s} {l h4.s}}}}} {u {u {u {u {l a5.s} {l c5.s}} {u {l e5.s} {l g5.s}}} {u {u {l b6.s} {l d6.s}} {u {l f6.s} {l h6.s}}}} {u {u {u {l a7.s} {l c7.s}} {u {l e7.s} {l g7.s}}} {u {u {l b8.s} {l d8.s}} {u {l f8.s} {l h8.s}}}}}}
put {boardcut4.s} tgc V {-313.5 -313.5 5} H {-3.839267715326952574428091E-14 627 3.839267715326952574428091E-14} A {3.749399456654646756500121E-32 -6.123233995736770226692379E-16 10} B {42.75 2.617682533177467341666965E-15 0} C {3.74939945665464456697127E-32 -6.123233995736766282387853E-16 10} D {42.75 2.617682533177467341666965E-15 0}
put {boardcut3.s} tgc V {313.5 -313.5 5} H {-627 0 3.839267715326952574428091E-14} A {6.123233995736770226692379E-16 0 10} B {0 42.75 0} C {6.123233995736766282387853E-16 0 10} D {0 42.75 0}
put {boardcut2.s} tgc V {313.5 -313.5 5} H {-3.839267715326952574428091E-14 627 3.839267715326952574428091E-14} A {3.749399456654646756500121E-32 -6.123233995736770226692379E-16 10} B {42.75 2.617682533177467341666965E-15 0} C {3.74939945665464456697127E-32 -6.123233995736766282387853E-16 10} D {42.75 2.617682533177467341666965E-15 0}
put {boardcut1.s} tgc V {313.5 313.5 5} H {-627 0 3.839267715326952574428091E-14} A {6.123233995736770226692379E-16 0 10} B {0 42.75 0} C {6.123233995736766282387853E-16 0 10} D {0 42.75 0}
put {border.r} comb region yes tree {- {- {l wood_plane.s} {l tiles.c}} {l board_cuts.c}}
attr set {border.r} {oshader} {plastic} {region} {R} {shader} {plastic {re 0.1 sp 0.8 di 0.2}} {region_id} {1002} {material_id} {1} {los} {100} {color} {245/227/174}
put {tiles.c} comb region no tree {u {l tiles_light.r} {l tiles_dark.r}}
put {board.g} comb region no tree {u {l tiles.c} {l border.r}}
put {tiles_light.r} comb region yes tree {l tiles_light.c}
attr set {tiles_light.r} {oshader} {plastic} {region} {R} {shader} {plastic {re 0.1 sp 0.8 di 0.2}} {region_id} {1001} {material_id} {1} {los} {100} {color} {255/255/255}
put {h8.s} arb8 V1 {228 171 0} V2 {228 228 0} V3 {228 228 5} V4 {228 171 5} V5 {171 171 0} V6 {171 228 0} V7 {171 228 5} V8 {171 171 5}
put {g8.s} arb8 V1 {171 171 0} V2 {171 228 0} V3 {171 228 5} V4 {171 171 5} V5 {114 171 0} V6 {114 228 0} V7 {114 228 5} V8 {114 171 5}
put {f8.s} arb8 V1 {114 171 0} V2 {114 228 0} V3 {114 228 5} V4 {114 171 5} V5 {57 171 0} V6 {57 228 0} V7 {57 228 5} V8 {57 171 5}
put {h7.s} arb8 V1 {228 114 0} V2 {228 171 0} V3 {228 171 5} V4 {228 114 5} V5 {171 114 0} V6 {171 171 0} V7 {171 171 5} V8 {171 114 5}
put {e8.s} arb8 V1 {57 171 0} V2 {57 228 0} V3 {57 228 5} V4 {57 171 5} V5 {0 171 0} V6 {0 228 0} V7 {0 228 5} V8 {0 171 5}
put {g7.s} arb8 V1 {171 114 0} V2 {171 171 0} V3 {171 171 5} V4 {171 114 5} V5 {114 114 0} V6 {114 171 0} V7 {114 171 5} V8 {114 114 5}
put {d8.s} arb8 V1 {0 171 0} V2 {0 228 0} V3 {0 228 5} V4 {0 171 5} V5 {-57 171 0} V6 {-57 228 0} V7 {-57 228 5} V8 {-57 171 5}
put {f7.s} arb8 V1 {114 114 0} V2 {114 171 0} V3 {114 171 5} V4 {114 114 5} V5 {57 114 0} V6 {57 171 0} V7 {57 171 5} V8 {57 114 5}
put {h6.s} arb8 V1 {228 57 0} V2 {228 114 0} V3 {228 114 5} V4 {228 57 5} V5 {171 57 0} V6 {171 114 0} V7 {171 114 5} V8 {171 57 5}
put {c8.s} arb8 V1 {-57 171 0} V2 {-57 228 0} V3 {-57 228 5} V4 {-57 171 5} V5 {-114 171 0} V6 {-114 228 0} V7 {-114 228 5} V8 {-114 171 5}
put {e7.s} arb8 V1 {57 114 0} V2 {57 171 0} V3 {57 171 5} V4 {57 114 5} V5 {0 114 0} V6 {0 171 0} V7 {0 171 5} V8 {0 114 5}
put {g6.s} arb8 V1 {171 57 0} V2 {171 114 0} V3 {171 114 5} V4 {171 57 5} V5 {114 57 0} V6 {114 114 0} V7 {114 114 5} V8 {114 57 5}
put {b8.s} arb8 V1 {-114 171 0} V2 {-114 228 0} V3 {-114 228 5} V4 {-114 171 5} V5 {-171 171 0} V6 {-171 228 0} V7 {-171 228 5} V8 {-171 171 5}
put {d7.s} arb8 V1 {0 114 0} V2 {0 171 0} V3 {0 171 5} V4 {0 114 5} V5 {-57 114 0} V6 {-57 171 0} V7 {-57 171 5} V8 {-57 114 5}
put {f6.s} arb8 V1 {114 57 0} V2 {114 114 0} V3 {114 114 5} V4 {114 57 5} V5 {57 57 0} V6 {57 114 0} V7 {57 114 5} V8 {57 57 5}
put {h5.s} arb8 V1 {228 0 0} V2 {228 57 0} V3 {228 57 5} V4 {228 0 5} V5 {171 0 0} V6 {171 57 0} V7 {171 57 5} V8 {171 0 5}
put {a8.s} arb8 V1 {-171 171 0} V2 {-171 228 0} V3 {-171 228 5} V4 {-171 171 5} V5 {-228 171 0} V6 {-228 228 0} V7 {-228 228 5} V8 {-228 171 5}
put {c7.s} arb8 V1 {-57 114 0} V2 {-57 171 0} V3 {-57 171 5} V4 {-57 114 5} V5 {-114 114 0} V6 {-114 171 0} V7 {-114 171 5} V8 {-114 114 5}
put {e6.s} arb8 V1 {57 57 0} V2 {57 114 0} V3 {57 114 5} V4 {57 57 5} V5 {0 57 0} V6 {0 114 0} V7 {0 114 5} V8 {0 57 5}
put {g5.s} arb8 V1 {171 0 0} V2 {171 57 0} V3 {171 57 5} V4 {171 0 5} V5 {114 0 0} V6 {114 57 0} V7 {114 57 5} V8 {114 0 5}
put {b7.s} arb8 V1 {-114 114 0} V2 {-114 171 0} V3 {-114 171 5} V4 {-114 114 5} V5 {-171 114 0} V6 {-171 171 0} V7 {-171 171 5} V8 {-171 114 5}
put {d6.s} arb8 V1 {0 57 0} V2 {0 114 0} V3 {0 114 5} V4 {0 57 5} V5 {-57 57 0} V6 {-57 114 0} V7 {-57 114 5} V8 {-57 57 5}
put {f5.s} arb8 V1 {114 0 0} V2 {114 57 0} V3 {114 57 5} V4 {114 0 5} V5 {57 0 0} V6 {57 57 0} V7 {57 57 5} V8 {57 0 5}
put {h4.s} arb8 V1 {228 -57 0} V2 {228 0 0} V3 {228 0 5} V4 {228 -57 5} V5 {171 -57 0} V6 {171 0 0} V7 {171 0 5} V8 {171 -57 5}
put {a7.s} arb8 V1 {-171 114 0} V2 {-171 171 0} V3 {-171 171 5} V4 {-171 114 5} V5 {-228 114 0} V6 {-228 171 0} V7 {-228 171 5} V8 {-228 114 5}
put {c6.s} arb8 V1 {-57 57 0} V2 {-57 114 0} V3 {-57 114 5} V4 {-57 57 5} V5 {-114 57 0} V6 {-114 114 0} V7 {-114 114 5} V8 {-114 57 5}
put {e5.s} arb8 V1 {57 0 0} V2 {57 57 0} V3 {57 57 5} V4 {57 0 5} V5 {0 0 0} V6 {0 57 0} V7 {0 57 5} V8 {0 0 5}
put {g4.s} arb8 V1 {171 -57 0} V2 {171 0 0} V3 {171 0 5} V4 {171 -57 5} V5 {114 -57 0} V6 {114 0 0} V7 {114 0 5} V8 {114 -57 5}
put {b6.s} arb8 V1 {-114 57 0} V2 {-114 114 0} V3 {-114 114 5} V4 {-114 57 5} V5 {-171 57 0} V6 {-171 114 0} V7 {-171 114 5} V8 {-171 57 5}
put {d5.s} arb8 V1 {0 0 0} V2 {0 57 0} V3 {0 57 5} V4 {0 0 5} V5 {-57 0 0} V6 {-57 57 0} V7 {-57 57 5} V8 {-57 0 5}
put {f4.s} arb8 V1 {114 -57 0} V2 {114 0 0} V3 {114 0 5} V4 {114 -57 5} V5 {57 -57 0} V6 {57 0 0} V7 {57 0 5} V8 {57 -57 5}
put {h3.s} arb8 V1 {228 -114 0} V2 {228 -57 0} V3 {228 -57 5} V4 {228 -114 5} V5 {171 -114 0} V6 {171 -57 0} V7 {171 -57 5} V8 {171 -114 5}
put {a6.s} arb8 V1 {-171 57 0} V2 {-171 114 0} V3 {-171 114 5} V4 {-171 57 5} V5 {-228 57 0} V6 {-228 114 0} V7 {-228 114 5} V8 {-228 57 5}
put {c5.s} arb8 V1 {-57 0 0} V2 {-57 57 0} V3 {-57 57 5} V4 {-57 0 5} V5 {-114 0 0} V6 {-114 57 0} V7 {-114 57 5} V8 {-114 0 5}
put {e4.s} arb8 V1 {57 -57 0} V2 {57 0 0} V3 {57 0 5} V4 {57 -57 5} V5 {0 -57 0} V6 {0 0 0} V7 {0 0 5} V8 {0 -57 5}
put {g3.s} arb8 V1 {171 -114 0} V2 {171 -57 0} V3 {171 -57 5} V4 {171 -114 5} V5 {114 -114 0} V6 {114 -57 0} V7 {114 -57 5} V8 {114 -114 5}
put {b5.s} arb8 V1 {-114 0 0} V2 {-114 57 0} V3 {-114 57 5} V4 {-114 0 5} V5 {-171 0 0} V6 {-171 57 0} V7 {-171 57 5} V8 {-171 0 5}
put {d4.s} arb8 V1 {0 -57 0} V2 {0 0 0} V3 {0 0 5} V4 {0 -57 5} V5 {-57 -57 0} V6 {-57 0 0} V7 {-57 0 5} V8 {-57 -57 5}
put {f3.s} arb8 V1 {114 -114 0} V2 {114 -57 0} V3 {114 -57 5} V4 {114 -114 5} V5 {57 -114 0} V6 {57 -57 0} V7 {57 -57 5} V8 {57 -114 5}
put {h2.s} arb8 V1 {228 -171 0} V2 {228 -114 0} V3 {228 -114 5} V4 {228 -171 5} V5 {171 -171 0} V6 {171 -114 0} V7 {171 -114 5} V8 {171 -171 5}
put {a5.s} arb8 V1 {-171 0 0} V2 {-171 57 0} V3 {-171 57 5} V4 {-171 0 5} V5 {-228 0 0} V6 {-228 57 0} V7 {-228 57 5} V8 {-228 0 5}
put {c4.s} arb8 V1 {-57 -57 0} V2 {-57 0 0} V3 {-57 0 5} V4 {-57 -57 5} V5 {-114 -57 0} V6 {-114 0 0} V7 {-114 0 5} V8 {-114 -57 5}
put {e3.s} arb8 V1 {57 -114 0} V2 {57 -57 0} V3 {57 -57 5} V4 {57 -114 5} V5 {0 -114 0} V6 {0 -57 0} V7 {0 -57 5} V8 {0 -114 5}
put {g2.s} arb8 V1 {171 -171 0} V2 {171 -114 0} V3 {171 -114 5} V4 {171 -171 5} V5 {114 -171 0} V6 {114 -114 0} V7 {114 -114 5} V8 {114 -171 5}
put {b4.s} arb8 V1 {-114 -57 0} V2 {-114 0 0} V3 {-114 0 5} V4 {-114 -57 5} V5 {-171 -57 0} V6 {-171 0 0} V7 {-171 0 5} V8 {-171 -57 5}
put {d3.s} arb8 V1 {0 -114 0} V2 {0 -57 0} V3 {0 -57 5} V4 {0 -114 5} V5 {-57 -114 0} V6 {-57 -57 0} V7 {-57 -57 5} V8 {-57 -114 5}
put {f2.s} arb8 V1 {114 -171 0} V2 {114 -114 0} V3 {114 -114 5} V4 {114 -171 5} V5 {57 -171 0} V6 {57 -114 0} V7 {57 -114 5} V8 {57 -171 5}
put {h1.s} arb8 V1 {228 -228 0} V2 {228 -171 0} V3 {228 -171 5} V4 {228 -228 5} V5 {171 -228 0} V6 {171 -171 0} V7 {171 -171 5} V8 {171 -228 5}
put {a4.s} arb8 V1 {-171 -57 0} V2 {-171 0 0} V3 {-171 0 5} V4 {-171 -57 5} V5 {-228 -57 0} V6 {-228 0 0} V7 {-228 0 5} V8 {-228 -57 5}
put {c3.s} arb8 V1 {-57 -114 0} V2 {-57 -57 0} V3 {-57 -57 5} V4 {-57 -114 5} V5 {-114 -114 0} V6 {-114 -57 0} V7 {-114 -57 5} V8 {-114 -114 5}
put {e2.s} arb8 V1 {57 -171 0} V2 {57 -114 0} V3 {57 -114 5} V4 {57 -171 5} V5 {0 -171 0} V6 {0 -114 0} V7 {0 -114 5} V8 {0 -171 5}
put {g1.s} arb8 V1 {171 -228 0} V2 {171 -171 0} V3 {171 -171 5} V4 {171 -228 5} V5 {114 -228 0} V6 {114 -171 0} V7 {114 -171 5} V8 {114 -228 5}
put {b3.s} arb8 V1 {-114 -114 0} V2 {-114 -57 0} V3 {-114 -57 5} V4 {-114 -114 5} V5 {-171 -114 0} V6 {-171 -57 0} V7 {-171 -57 5} V8 {-171 -114 5}
put {d2.s} arb8 V1 {0 -171 0} V2 {0 -114 0} V3 {0 -114 5} V4 {0 -171 5} V5 {-57 -171 0} V6 {-57 -114 0} V7 {-57 -114 5} V8 {-57 -171 5}
put {f1.s} arb8 V1 {114 -228 0} V2 {114 -171 0} V3 {114 -171 5} V4 {114 -228 5} V5 {57 -228 0} V6 {57 -171 0} V7 {57 -171 5} V8 {57 -228 5}
put {a3.s} arb8 V1 {-171 -114 0} V2 {-171 -57 0} V3 {-171 -57 5} V4 {-171 -114 5} V5 {-228 -114 0} V6 {-228 -57 0} V7 {-228 -57 5} V8 {-228 -114 5}
put {c2.s} arb8 V1 {-57 -171 0} V2 {-57 -114 0} V3 {-57 -114 5} V4 {-57 -171 5} V5 {-114 -171 0} V6 {-114 -114 0} V7 {-114 -114 5} V8 {-114 -171 5}
put {e1.s} arb8 V1 {57 -228 0} V2 {57 -171 0} V3 {57 -171 5} V4 {57 -228 5} V5 {0 -228 0} V6 {0 -171 0} V7 {0 -171 5} V8 {0 -228 5}
put {b2.s} arb8 V1 {-114 -171 0} V2 {-114 -114 0} V3 {-114 -114 5} V4 {-114 -171 5} V5 {-171 -171 0} V6 {-171 -114 0} V7 {-171 -114 5} V8 {-171 -171 5}
put {d1.s} arb8 V1 {0 -228 0} V2 {0 -171 0} V3 {0 -171 5} V4 {0 -228 5} V5 {-57 -228 0} V6 {-57 -171 0} V7 {-57 -171 5} V8 {-57 -228 5}
put {a2.s} arb8 V1 {-171 -171 0} V2 {-171 -114 0} V3 {-171 -114 5} V4 {-171 -171 5} V5 {-228 -171 0} V6 {-228 -114 0} V7 {-228 -114 5} V8 {-228 -171 5}
put {c1.s} arb8 V1 {-57 -228 0} V2 {-57 -171 0} V3 {-57 -171 5} V4 {-57 -228 5} V5 {-114 -228 0} V6 {-114 -171 0} V7 {-114 -171 5} V8 {-114 -228 5}
put {b1.s} arb8 V1 {-114 -228 0} V2 {-114 -171 0} V3 {-114 -171 5} V4 {-114 -228 5} V5 {-171 -228 0} V6 {-171 -171 0} V7 {-171 -171 5} V8 {-171 -228 5}
put {a1.s} arb8 V1 {-171 -228 0} V2 {-171 -171 0} V3 {-171 -171 5} V4 {-171 -228 5} V5 {-228 -228 0} V6 {-228 -171 0} V7 {-228 -171 5} V8 {-228 -228 5}
put {tiles_light.c} comb region no tree {u {u {u {u {u {l b1.s} {l d1.s}} {u {l f1.s} {l h1.s}}} {u {u {l a2.s} {l c2.s}} {u {l e2.s} {l g2.s}}}} {u {u {u {l b3.s} {l d3.s}} {u {l f3.s} {l h3.s}}} {u {u {l a4.s} {l c4.s}} {u {l e4.s} {l g4.s}}}}} {u {u {u {u {l b5.s} {l d5.s}} {u {l f5.s} {l h5.s}}} {u {u {l a6.s} {l c6.s}} {u {l e6.s} {l g6.s}}}} {u {u {u {l b7.s} {l d7.s}} {u {l f7.s} {l h7.s}}} {u {u {l a8.s} {l c8.s}} {u {l e8.s} {l g8.s}}}}}}
put {b} comb region no tree {l board.g}
-35
View File
@@ -1,35 +0,0 @@
title {King by Jeff Sieu. Made for Google Code-in 2017}
units mm
put {bottomtor.s} tor V {0 0 9} H {6.12323399573676603586882E-17 0 1} r_a 11.78466675885103676080234 r_h 3.825815710827906279689614
put {bottometo.s} eto V {0 0 20} N {0 0 0.06032399549610674427402301} C {2.864077970686895735497046 1.71612229850775266370988 1.889299368274914403542653} r 8.344052226122400384156208 r_d 1.673109642593672896637713
put {crossbase.s} arb8 V1 {-1.399999999999999911182158 -2.100000000000000088817842 98.5} V2 {-1.399999999999999911182158 2.100000000000000088817842 98.5} V3 {1.399999999999999911182158 2.100000000000000088817842 98.5} V4 {1.399999999999999911182158 -2.100000000000000088817842 98.5} V5 {-1.399999999999999911182158 -3 94} V6 {-1.399999999999999911182158 3 94} V7 {1.399999999999999911182158 3 94} V8 {1.399999999999999911182158 -3 94}
put {crossrpp2.s} arb8 V1 {1.399999999999999911182158 -5.5 97.84354270490985072683543} V2 {1.399999999999999911182158 5.5 97.84354270490985072683543} V3 {1.399999999999999911182158 5.5 102.5708639999999007841325} V4 {1.399999999999999911182158 -5.5 102.5708639999999007841325} V5 {-1.399999999999999911182158 -5.5 97.84354270490985072683543} V6 {-1.399999999999999911182158 5.5 97.84354270490985072683543} V7 {-1.399999999999999911182158 5.5 102.5708639999999007841325} V8 {-1.399999999999999911182158 -5.5 102.5708639999999007841325}
put {crossrpp1.s} arb8 V1 {1.399999999999999911182158 -2 93.79999999999999715782906} V2 {1.399999999999999911182158 2 93.79999999999999715782906} V3 {1.399999999999999911182158 2 104.7999999999999971578291} V4 {1.399999999999999911182158 -2 104.7999999999999971578291} V5 {-1.399999999999999911182158 -2 93.79999999999999715782906} V6 {-1.399999999999999911182158 2 93.79999999999999715782906} V7 {-1.399999999999999911182158 2 104.7999999999999971578291} V8 {-1.399999999999999911182158 -2 104.7999999999999971578291}
put {crowncut1.s} eto V {0 0 81.72700899999993850997271} N {0 0 0.6853489141366997383642001} C {7.936978064717960634766314 0.7583105325216803471732874 14.21238543732845016620558} r 19.09763828673395735791019 r_d 8.357084880198749843316364
put {crossrcc2.s} tgc V {0 0 90.50940899999976352319209} H {0 0 3.460360060764851031223088} A {5.74552092081112419919009 0 0} B {0 5.74552092081112419919009 0} C {5.74552092081112419919009 0 0} D {0 5.74552092081112419919009 0}
put {crosscap1.s} arb8 V1 {1.399999999999999911182158 -2 104.7999999999999971578291} V2 {1.399999999999999911182158 2 104.7999999999999971578291} V3 {-1.399999999999999911182158 2 104.7999999999999971578291} V4 {-1.399999999999999911182158 -2 104.7999999999999971578291} V5 {1.399999999999999911182158 0 106.7999999999999971578291} V6 {1.399999999999999911182158 0 106.7999999999999971578291} V7 {-1.399999999999999911182158 0 106.7999999999999971578291} V8 {-1.399999999999999911182158 0 106.7999999999999971578291}
put {crossrcc1.s} tgc V {0 0 92.2746839999997803261067} H {0 0 2.791740440327786565433144} A {4.517371551035873622481631 0 0} B {0 4.517371551035873622481631 0} C {4.517371551035873622481631 0 0} D {0 4.517371551035873622481631 0}
put {crowntop.s} ell V {0 0 89.56678299999987302726367} A {14.0447366829880344596404 0 0} B {0 14.44069976610209771195059 0} C {0 0 3.638257540532901401775234}
put {crownrcc.s} tgc V {0 0 74.52245129853007199471904} H {0 0 15.07198012589280011752635} A {14.92710113237911251360401 0 0} B {0 14.92710113237911251360401 0} C {14.92710113237911251360401 0 0} D {0 14.92710113237911251360401 0}
put {bodytor.s} tor V {0 0 25} H {6.12323399573676603586882E-17 0 1} r_a 9.461224391138355116481762 r_h 0.9710977822416242410952236
put {bodyjut.s} ell V {0 0 63.05140500000015180148694} A {13.30005660511547738167337 0 0} B {0 13.30005660511547738167337 0} C {0 0 3.569547284150617283415841}
put {bodycut.s} tor V {0 0 52.17296999999997808572516} H {6.12323399573676603586882E-17 0 1} r_a 107.7000000000000028421709 r_h 101.8122462061219977158544
put {necktor.s} tor V {0 0 75.48642500000005384208634} H {3.061616997868383634231992E-16 0 1} r_a 8.239894264539179502548905 r_h 0.9722303169289367996697138
put {baseeto.s} eto V {0 0 5} N {-5.470978323999804257192075E-18 0 -0.04467392825269222295103688} C {9.315747832292275987242647 -1.365449293915910411456593 -4.391804451322707691929281} r 10.59850529883725656077331 r_d 4.265499428605880716247611
put {necketo.s} eto V {4.688718984760806702037463E-15 0 73.78394899999960898639983} N {-6.414480946927261832397496E-18 0 -0.05237821183539019542774184} C {-3.419547585807252154666003 2.04895324878489937248105 -2.255716904279041923331306} r 6.983691090436433768218194 r_d 1.738855162288100331124951
put {bottom.c} comb region no tree {u {u {l bottometo.s} {l bottomtor.s}} {u {l baseeto.s} {l base_filler.s}}}
put {cross.c} comb region no tree {u {u {u {l crossbase.s} {l crosscap1.s}} {u {l crossrpp1.s} {l crossrpp2.s}}} {u {l crossrcc1.s} {l crossrcc2.s}}}
put {crown.c} comb region no tree {u {- {l crownrcc.s} {l crowncut1.s}} {- {l crowntop.s} {l crownrcc.s}}}
attr set {crown.c} {inherit} {1}
put {scene.g} comb region no tree {u {l king.r} {l tile.r}}
put {body.s} tgc V {0 0 5.912562917080187219198706} H {0 0 69.67849364592308347710059} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {tile.s} arb8 V1 {28.5 -28.5 0} V2 {28.5 28.5 0} V3 {28.5 28.5 -1} V4 {28.5 -28.5 -1} V5 {-28.5 -28.5 0} V6 {-28.5 28.5 0} V7 {-28.5 28.5 -1} V8 {-28.5 -28.5 -1}
put {king.r} comb region yes tree {l king.c {1 0 0 0 0 1 0 0 0 0 1 0.960356 0 0 0 1}}
attr set {king.r} {region} {R} {shader} {plastic {re 0.1 sp 0.9 di 0.1 sh 50 ex 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/217}
put {tile.r} comb region yes tree {l tile.s}
attr set {tile.r} {region} {R} {shader} {plastic {re 0.5 sh 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/255}
put {body.c} comb region no tree {u {u {- {l body.s} {l bodycut.s}} {l bodytor.s}} {l bodyjut.s}}
put {king.c} comb region no tree {u {u {u {l cross.c} {l neck.c}} {u {l crown.c} {l body.c}}} {l bottom.c}}
put {neck.c} comb region no tree {u {u {l necketo.s} {l necktor.s}} {l neck_filler.s}}
put {base_filler.s} tgc V {0 0 -0.8138631382182293094729175} H {0 0 12.74035922868059600432389} A {16.38855503646686528895771 0 0} B {0 16.38855503646686528895771 0} C {9.863417071382475143082047 0 0} D {0 4.931708535691237571541023 0}
put {neck_filler.s} tgc V {0 0 72.44353981907315187527274} H {0 0 8.98374965637291111875129} A {7.656920043513968821002891 0 0} B {0 7.656920043513968821002891 0} C {7.142477262139500737703202 0 0} D {0 7.142477262139500737703202 0}
-37
View File
@@ -1,37 +0,0 @@
title {Knight by Jeff Sieu. Made for Google Code-in 2017}
units mm
put {nosebridge.s} tgc V {9.352709000000004380126484 -3.525789999999890511617195 80.78344850000023313896236} H {-19.14158212483127030623109 -1.101398557933205700619376E-15 -4.008762911514063843746032E-16} A {3.673940397442060361078391E-16 -5.638155724715451455608672 -2.052120859954011056203171} B {0 -1.636701665453711651565527 4.496800868217849078689596} C {3.673940397442060361078391E-16 -5.638155724715451455608672 -2.052120859954010612113962} D {0 -1.636701665453711651565527 4.496800868217849078689596}
put {bottomtor2.s} tor V {0 0 9.596580000000059840203903} H {6.12323399573676603586882E-17 0 1} r_a 13.70450855072022378067231 r_h 3.825815710827906279689614
put {bottomtor1.s} tor V {0 0 28.10273999999994032350514} H {6.12323399573676603586882E-17 0 1} r_a 12.58196306773280248592073 r_h 1.732851834446541783307794
put {bodysidecutleft.s} tgc V {53.6557214677912170941454 -33.67507614822139316856919 95.69336050000360671674571} H {-20.22449106457484546695014 143.9047313715058749039599 6.169122640972837335375385E-15} A {41.33529643904953587707496 5.809297064214792527536702 -2.55302085840457415599758} B {-6.045441934467547184794967 -0.8496314556149066055112939 -99.81347984218669466827123} C {41.33529643904953587707496 5.809297064214792527536702 -2.55302085840457415599758} D {-6.045441934467546296616547 -0.8496314556149064944889915 -99.81347984218669466827123}
put {headsidecutleft.s} tgc V {22.4313670000000300319698 -28.39713199999998138878254 66.36153450000099951466837} H {6.936023102199139422907592 58.60216329849748717606417 21.47832101088326695048636} A {20.34482858059398324712674 -2.407969144867709410107182 0} B {0.8235739520514423483987798 6.958341187070909761303028 -19.25132668795071921863382} C {20.34482858059398324712674 -2.407969144867709410107182 0} D {0.8235739520514423483987798 6.958341187070909761303028 -19.25132668795071921863382}
put {bottometo.s} eto V {0 0 20} N {0 0 0.06032399549610674427402301} C {2.864077970686895735497046 1.71612229850775266370988 1.889299368274914403542653} r 12.40790665756528099450406 r_d 1.673109642593672896637713
put {bodyrcc2.s} tgc V {1.17739012233862844939333E-14 11.10387200000011453937532 69.77637950000288924456981} H {0 -6.924928138629929286196329 19.02608369223165496464389} A {13.69742765710896037489874 0 0} B {0 12.87137169313410289817057 4.684796170477387278197057} C {13.69742765710896037489874 0 0} D {0 12.87137169313410289817057 4.684796170477387278197057}
put {bodycut.s} tor V {0 0 44.16302899999998743396645} H {6.12323399573676603586882E-17 0 1} r_a 107.6761975244730109579905 r_h 97.57911721751440836669644
put {baseeto.s} eto V {0 0 5} N {-5.470978323999804257192075E-18 0 -0.04467392825269222295103688} C {9.315747832292275987242647 -1.365449293915910411456593 -4.391804451322707691929281} r 12.99673099698723177652937 r_d 4.265499428605880716247611
put {bodyrcc.s} tgc V {1.177390122338628764937692E-14 -5.261487999999998166344994 23.35826750000251195160672} H {0 28.82813499219855302158066 49.9317944939421209937791} A {18.70346099816892859735162 0 0} B {0 16.19767236310574887170333 -9.351730499084462522318972} C {18.70346099816892859735162 0 0} D {0 16.19767236310574887170333 -9.351730499084462522318972}
put {headrcc.s} tgc V {2.364945229490083123615446E-14 -22.43134200000001854391485 70.83590250000071364411269} H {0 21.66504172617712953297087 7.885430312463741486794788} A {8.668888204531146612907833 0 0} B {0 2.96493438618794336036899 -8.146090276215920411573279} C {8.668888204531146612907833 0 0} D {0 2.96493438618794336036899 -8.146090276215920411573279}
put {bodybottomsph.s} ell V {0 0 60.84612300000016915646484} A {33.54831727294207155409822 0 0} B {0 33.54831727294207155409822 0} C {0 0 33.54831727294207155409822}
put {toptor.s} tor V {-1.290968171125081238436545E-14 26.0108720000002442418463 8.970701999999491249582206} H {1 0 0} r_a 65.14638440000000230156729 r_h 16.28659610000000057539182
put {earcut.s} tgc V {6.942508314766508912183652E-14 -13.66162200000000304100922 85.5714520000014005063349} H {0 30.34242292565693688288775 11.04373878045554668858586} A {5 0 0} B {0 2.052120859954011500292381 -5.638155724715449679251833} C {5 0 0} D {0 2.052120859954011500292381 -5.638155724715449679251833}
put {knight.r} comb region yes tree {l knight.c {1 0 0 0 0 1 0 0 0 0 1 0.960356 0 0 0 1}}
attr set {knight.r} {region} {R} {shader} {plastic {re 0.1 sp 0.9 di 0.1 sh 50 ex 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/217}
put {bottom.c} comb region no tree {u {u {u {l bottometo.s} {l bottomtor1.s}} {u {l bottomtor2.s} {l baseeto.s}}} {l base_filler.s}}
put {bodyfrontcutright.s} tgc V {-13.74871600000018645459932 -33.1595789999997947461452 63.90854050000422859056926} H {-41.4843562340515603636959 49.43913057838897628926134 -5.652944372718708048669131E-15} A {-20.4576653316778021007849 -17.16601943455906820190648 -3.9911764866229089143701} B {4.529143121461073562272759 3.800402322767091778388249 -39.56063453447669076012971} C {-20.4576653316778021007849 -17.16601943455906820190648 -3.9911764866229089143701} D {4.529143121461073562272759 3.800402322767091778388249 -39.56063453447669076012971}
put {eararb.s} arb8 V1 {-26.90565549999994132690517 -0.4176225000000420295442893 84.91516750000046442892199} V2 {-26.90565549999994132690517 7.334443121211129401615381 86.28206582524249768084701} V3 {26.30018901632412564595143 7.334443121211129401615381 86.28206582524249768084701} V4 {26.30018901632412564595143 -0.4176225000000420295442893 84.91516750000046442892199} V5 {-26.90565549999994132690517 2.091511985363494030565334 93.35068228383262578518043} V6 {-26.90565549999994132690517 2.091511985363494030565334 93.35068228383262578518043} V7 {26.300189016324097224242 2.091511985363494030565334 93.35068228383262578518043} V8 {26.300189016324097224242 2.091511985363494030565334 93.35068228383262578518043}
put {knight.c} comb region no tree {u {u {l head.c} {l body.c}} {u {l base.c} {l bottom.c}}}
put {mouth.s} arb8 V1 {-14.69511850000539787686193 -22.33384350000072160469244 67.49057449999915547778073} V2 {-14.69511850000507457991716 -22.33384350000071805197877 65.1856549462537060435352} V3 {14.5501529284419532928041 -22.33384350000074292097452 65.18565494625448764054454} V4 {14.55015292844173302455602 -22.3338435000007464736882 67.49057449999935442974675} V5 {-14.69511850000531438809048 -12.88574518707542360118623 69.9097041027158496717675} V6 {-14.69511850000531438809048 -12.88574518707542360118623 69.9097041027158496717675} V7 {14.55015292844241514558234 -12.88574518707783234106046 69.90970410271543755698076} V8 {14.55015292844241514558234 -12.88574518707783234106046 69.90970410271543755698076}
put {bodyfrontcut.s} tgc V {-30.07391999999968135171002 -30.49249499999977786046657 57.49796150000538830227015} H {64.53820143527930497384659 5.398293464965921771651639E-15 1.446468374443825363721499E-15} A {1.653406732298293568477734E-15 -23.38457478442728287859609 13.50109054667402830318679} B {2.449293598294706907385594E-15 -20 -34.64101615137754208717524} C {1.653406732298293568477734E-15 -23.38457478442728287859609 13.50109054667402830318679} D {2.449293598294706907385594E-15 -20 -34.64101615137754208717524}
put {scene.g} comb region no tree {u {l knight.r} {l tile.r}}
put {tile.s} arb8 V1 {28.5 -28.5 0} V2 {28.5 28.5 0} V3 {28.5 28.5 -1} V4 {28.5 -28.5 -1} V5 {-28.5 -28.5 0} V6 {-28.5 28.5 0} V7 {-28.5 28.5 -1} V8 {-28.5 -28.5 -1}
put {tile.r} comb region yes tree {l tile.s}
attr set {tile.r} {region} {R} {shader} {plastic {re 0.5 sh 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/255}
put {base.s} tgc V {0 0 5.912562917080187219198706} H {0 0 23.32946212598685420402944} A {20.43520228184366160917307 0 0} B {0 20.43520228184366160917307 0} C {20.43520228184366160917307 0 0} D {0 20.43520228184366160917307 0}
put {body.c} comb region no tree {u {- {- {- {- {- {n {n {l bodyrcc.s} {l bodybottomsph.s}} {l bodysidesph.s}} {l bodysidecutleft.s}} {l bodysidecutright.s}} {l bodyfrontcutleft.s}} {l bodyfrontcutright.s}} {l bodyfrontcut.s}} {- {- {- {- {- {- {- {- {n {n {l bodyrcc2.s} {l bodysidesph.s}} {l toptor.s}} {l bodysidecutleft.s}} {l bodysidecutright.s}} {l bodyfrontcutleft.s}} {l bodyfrontcutright.s}} {l bodyfrontcut.s}} {l bodysidecutleft.s}} {l bodysidecutright.s}} {l bodyfrontcut.s}}}
put {base.c} comb region no tree {u {u {u {u {l bottomtor1.s} {l bottomtor1.s}} {- {- {l base.s} {l bodycut.s}} {l bottomtor1.s}}} {l bottomtor1.s}} {l bottomtor1.s}}
put {head.c} comb region no tree {u {u {- {- {- {- {- {n {l headrcc.s} {l toptor.s}} {l bodysidecutleft.s}} {l bodysidecutright.s}} {l headsidecutleft.s}} {l headsidecutright.s}} {l mouth.s}} {- {- {- {- {l nosebridge.s} {l bodysidecutleft.s}} {l bodysidecutright.s}} {l headsidecutleft.s}} {l headsidecutright.s}}} {- {- {- {- {- {l eararb.s} {l bodysidecutleft.s}} {l bodysidecutright.s}} {l headsidecutleft.s}} {l headsidecutright.s}} {l earcut.s}}}
put {bodyfrontcutleft.s} tgc V {13.74871600000018645459932 -33.1595789999997947461452 63.90854050000422859056926} H {41.48435623405157457455061 49.43913057838896918383398 -5.65294437271870647094732E-15} A {20.45766533167779854807122 -17.16601943455906820190648 -3.99117648662290935845931} B {-4.529143121461062904131722 3.800402322767092222477459 -39.56063453447669076012971} C {20.45766533167779854807122 -17.16601943455906820190648 -3.99117648662290935845931} D {-4.529143121461062904131722 3.800402322767092222477459 -39.56063453447669076012971}
put {bodysidecutright.s} tgc V {-53.6557214677912170941454 -33.67507614822139316856919 95.69336050000360671674571} H {20.22449106457484901966382 143.9047313715058749039599 6.169122640972837335375385E-15} A {-41.33529643904954298250232 5.809297064214777428503567 -2.553020858404567494659432} B {6.045441934467558731114423 -0.8496314556149066055112939 -99.81347984218669466827123} C {-41.33529643904954298250232 5.809297064214777428503567 -2.553020858404567494659432} D {6.045441934467559619292842 -0.8496314556149064944889915 -99.81347984218669466827123}
put {headsidecutright.s} tgc V {-22.4313670000000300319698 -28.39713199999998138878254 66.36153450000099951466837} H {-6.936023102199119882982359 58.60216329849748717606417 21.47832101088326695048636} A {-20.34482858059398324712674 -2.407969144867712074642441 0} B {-0.8235739520514422373764774 6.958341187070909761303028 -19.2513266879507227713475} C {-20.34482858059398324712674 -2.407969144867712074642441 0} D {-0.8235739520514422373764774 6.958341187070909761303028 -19.2513266879507227713475}
put {bodysidesph.s} ell V {1.591615728102624416351318E-12 -17.12677000000023497250368 59.51325500000131540900838} A {40 0 0} B {0 40 0} C {0 0 57.67733156681060791015625}
put {base_filler.s} tgc V {0 0 -0.8138631382182293094729175} H {0 0 12.74035922868059600432389} A {16.38855503646686528895771 0 0} B {0 16.38855503646686528895771 0} C {9.863417071382475143082047 0 0} D {0 4.931708535691237571541023 0}
-51
View File
@@ -1,51 +0,0 @@
title {Pawn by Jeff Sieu. Made for Google Code-in 2017}
units mm
put {crowninset.s} tgc V {0 0 58} H {0 0 0.5999999999999999777955395} A {16.89118510350817103926602 0 0} B {0 16.89118510350817103926602 0} C {16.89118510350817103926602 0 0} D {0 16.89118510350817103926602 0}
put {crowninner.s} tgc V {0 0 4} H {0 0 6} A {10.16165733953459060501245 0 0} B {0 10.16165733953459060501245 0} C {11.34243115837037585436065 0 0} D {0 11.34243115837037585436065 0}
put {crowninsetsolid.s} tgc V {0 0 58} H {0 0 0.5999999999999999777955395} A {12.45527182860042714196425 0 0} B {0 12.45527182860042714196425 0} C {12.45527182860042714196425 0 0} D {0 12.45527182860042714196425 0}
put {bottomtor.s} tor V {0 0 9} H {6.12323399573676603586882E-17 0 1} r_a 9.486078136436923102792207 r_h 3.825815710827906279689614
put {bottometo.s} eto V {0 0 20} N {0 0 0.05994492135330928977987597} C {2.846080192311732925958268 1.705338238468419920224051 1.877427068825471501156699} r 5.027862554501921543703702 r_d 1.662595872768639404526425
put {1_bodytor.s} tor V {0 0 25} H {6.12323399573676603586882E-17 0 1} r_a 10.44723380101833853927928 r_h 0.9710977822416242410952236
put {1_bodycut.s} tor V {0 0 41} H {6.12323399573676603586882E-17 0 1} r_a 86.63076947877770805916953 r_h 78.38786126059979153524182
put {1_bodyeto.s} eto V {-0.2528320000000000011830537 0 53} N {0 0 0.03930267507158188844407221} C {11.02968444236560330296015 0 11.02968444236560330296015} r 16.28367943394245997978942 r_d 4.327199580192768735287245
put {1_baseeto.s} eto V {0 0 5} N {-5.470978323999804257192075E-18 0 -0.04467392825269222295103688} C {9.315747832292275987242647 -1.365449293915910411456593 -4.391804451322707691929281} r 10.59850529883725656077331 r_d 4.265499428605880716247611
put {1_bodytop.c} comb region no tree {- {l bodytop.s} {l 1_bodyeto.s}}
put {crowncut3.s} arb8 V1 {-13.99038105676657828269072 5.767949192431094829203175 4} V2 {11.9903810567665729536202 -9.232050807568883854514752 4.000000000000001776356839} V3 {11.9903810567665729536202 -9.232050807568883854514752 10.00000000000000355271368} V4 {-13.99038105676657828269072 5.767949192431094829203175 10} V5 {-11.99038105676654808462445 9.232050807568848327377964 4} V6 {13.99038105676657472997704 -5.767949192431118810020507 4.000000000000001776356839} V7 {13.99038105676657472997704 -5.767949192431118810020507 10.00000000000000355271368} V8 {-11.99038105676654808462445 9.232050807568848327377964 10}
put {crowncut2.s} arb8 V1 {-11.99038105676656940090652 -9.232050807568908723510503 3.999999999999998223643161} V2 {13.99038105676658183540439 5.767949192431108151879471 3.99999999999999866773237} V3 {13.99038105676658538811807 5.767949192431077065634781 10.00000000000000355271368} V4 {-11.99038105676654453191077 -9.232050807568926487078897 10} V5 {-13.99038105676658716447491 -5.767949192431157889870974 3.99999999999999866773237} V6 {11.99038105676657472997704 9.232050807568862538232679 3.99999999999999911182158} V7 {11.990381056766564071836 9.232050807568855432805321 10.00000000000000355271368} V8 {-13.99038105676657472997704 -5.767949192431152560800456 10}
put {crowncut1.s} arb8 V1 {1.999999999999999777955395 -14.99999999999999822364316 4} V2 {1.999999999999999777955395 14.99999999999999822364316 4} V3 {1.999999999999999777955395 14.99999999999999822364316 10} V4 {1.999999999999999777955395 -14.99999999999999822364316 10} V5 {-1.999999999999999777955395 -14.99999999999999822364316 4} V6 {-1.999999999999999777955395 14.99999999999999822364316 4} V7 {-1.999999999999999777955395 14.99999999999999822364316 10} V8 {-1.999999999999999777955395 -14.99999999999999822364316 10}
put {crownrcc.s} tgc V {0 0 -2.292185375575158445826673} H {0 0 12.29218537557515844582667} A {14.16165733953459238136929 0 0} B {0 14.16165733953459238136929 0} C {14.16165733953459238136929 0 0} D {0 14.16165733953459238136929 0}
put {1_bottom.c} comb region no tree {u {u {l 1_bottometo.s} {l 1_bottomtor.s}} {u {l 1_baseeto.s} {l 1_base_filler.s}}}
put {bodyjut.s} tgc V {0 0 42} H {0 0 2.264716425774114583191476} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {bodytor.s} tor V {0 0 25.00000000000000355271368} H {6.12323399573676603586882E-17 0 1} r_a 6.146768722816724483948292 r_h 0.8241116028491989320414746
put {bodytop.s} tgc V {0 0 45.57436401080622090375982} H {0 0 10.23282399021384136972301} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {bodycut.s} tor V {0 0 37.96582364986083035773845} H {6.12323399573676603586882E-17 0 1} r_a 67.81451175298326461415854 r_h 63.43019393270687800168162
put {bodyeto.s} eto V {-0.2528320000000000011830537 0 53} N {0 0 0.03930267507158188844407221} C {11.02968444236560330296015 0 11.02968444236560330296015} r 16.28367943394245997978942 r_d 4.327199580192768735287245
put {baseeto.s} eto V {0 0 4.281399000000007504240784} N {-4.792704526346514451144025E-18 0 -0.03913540238445389202182056} C {8.160812227361974535710942 -1.196165406603733272206114 -3.847323061096424634541791} r 9.284537665853610732824563 r_d 3.736676917349199378293179
put {necketo.s} eto V {0 0 40.72638399999996039468897} N {-3.291837815534646033062117E-18 0 -0.02687989563869803977258499} C {4.168219486530275297297976 -0.6109538876782616423355421 -1.965060156692675530365477} r 5.706605353654313539379928 r_d 2.566512146398107763189955
put {bodytop.c} comb region no tree {u {l head.s} {l necketo.s}}
put {1_scene.g} comb region no tree {u {l rook.r {1 0 0 -58 0 1 0 0 0 0 1 0 0 0 0 1}} {l 1_tile.r {1 0 0 -58 0 1 0 0 0 0 1 0 0 0 0 1}}}
put {1_base_filler.s} tgc V {0 0 -0.8138631382182293094729175} H {0 0 12.74035922868059600432389} A {16.38855503646686528895771 0 0} B {0 16.38855503646686528895771 0} C {9.863417071382475143082047 0 0} D {0 4.931708535691237571541023 0}
put {bottom.c} comb region no tree {u {u {l bottometo.s} {l bottomtor.s}} {u {l baseeto.s} {l base_filler.s}}}
put {1_body.s} tgc V {0 0 5.912562917080187219198706} H {0 0 49.90908570176724623479458} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {1_tile.s} arb8 V1 {28.5 -28.5 0} V2 {28.5 28.5 0} V3 {28.5 28.5 -1} V4 {28.5 -28.5 -1} V5 {-28.5 -28.5 0} V6 {-28.5 28.5 0} V7 {-28.5 28.5 -1} V8 {-28.5 -28.5 -1}
put {1_tile.r} comb region yes tree {l 1_tile.s}
attr set {1_tile.r} {region} {R} {color} {255/255/255} {los} {100} {material_id} {1} {region_id} {1000} {shader} {plastic {re 0.5 sh 1}}
put {1_body.c} comb region no tree {u {u {- {l 1_body.s} {l 1_bodycut.s}} {l 1_bodytor.s}} {l bodyjut.s}}
put {crown.c} comb region no tree {u {- {- {- {- {- {l crownrcc.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}} {l crowninner.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}}} {l crowncut1.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}}} {l crowncut2.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}}} {l crowncut3.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}}} {l crowninset.s}} {l crowninsetsolid.s}}
put {scene.g} comb region no tree {u {l pawn.r} {l tile.r}}
put {body.s} tgc V {0 0 -0.6898679999999998146975599} H {0 0 42.85638383046779154028627} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {pawn.r} comb region yes tree {l pawn.c {1 0 0 0 0 1 0 0 0 0 1 0.991685000000004 0 0 0 1}}
attr set {pawn.r} {region} {R} {shader} {plastic {re 0.1 sp 0.9 di 0.1 sh 50 ex 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/217}
put {rook.r} comb region yes tree {l rook.c {1 0 0 0 0 1 0 0 0 0 1 1.090422 0 0 0 1}}
attr set {rook.r} {region} {R} {color} {255/255/217} {los} {100} {material_id} {1} {region_id} {1000} {shader} {plastic {re 0.1 sp 0.9 di 0.1 sh 50 ex 1}}
put {tile.s} arb8 V1 {28.5 -28.5 0} V2 {28.5 28.5 0} V3 {28.5 28.5 -1} V4 {28.5 -28.5 -1} V5 {-28.5 -28.5 0} V6 {-28.5 28.5 0} V7 {-28.5 28.5 -1} V8 {-28.5 -28.5 -1}
put {tile.r} comb region yes tree {l tile.s}
attr set {tile.r} {oshader} {plastic {sh 1}} {region} {R} {shader} {plastic {re 0.5 sh 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/255}
put {body.c} comb region no tree {u {- {l body.s} {l bodycut.s}} {l bodytor.s}}
put {pawn.c} comb region no tree {u {u {l top.c} {l body.c}} {u {l bottom.c} {l bodytop.c}}}
put {rook.c} comb region no tree {u {u {l crown.c} {l 1_body.c}} {u {l 1_bottom.c} {l 1_bodytop.c}}}
put {head.s} ell V {0 0 52.26777799999997853319655} A {10.18854239405582262634198 0 0} B {0 10.18854239405582262634198 0} C {0 0 10.18854239405582262634198}
put {top.c} comb region no tree {u {l head.s} {l necketo.s}}
put {1_bottomtor.s} tor V {0 0 9} H {6.12323399573676603586882E-17 0 1} r_a 11.78466675885103676080234 r_h 3.825815710827906279689614
put {1_bottometo.s} eto V {0 0 20} N {0 0 0.07140720069529053748436098} C {3.390289200472452524337541 2.031421963671408370544214 2.236416504815224470803514} r 9.036682630367613100474955 r_d 1.980506679827312765951319
put {base_filler.s} tgc V {0 0 -0.8138631382182293094729175} H {0 0 12.74035922868059600432389} A {14.57675099872487578522851 0 0} B {0 14.57675099872487578522851 0} C {9.863417071382475143082047 0 0} D {0 4.931708535691237571541023 0}
-44
View File
@@ -1,44 +0,0 @@
title {Queen by Jeff Sieu. Made for Google Code-in 2017}
units mm
put {crown_fill.s} tgc V {0 0 85.4996148325125346900677} H {0 0 3.961725628291488110477303} A {13.92497241322581302824801 0 0} B {0 13.92497241322581302824801 0} C {10.3643310870127276501762 0 0} D {0 10.3643310870127276501762 0}
put {crown_main.c} comb region no tree {u {u {- {- {l crownrcc.s} {l crowncut1.s}} {l crowncut2.s}} {- {- {l crown_fill.s} {l crowncut2.s}} {l crownrcc.s}}} {- {- {- {l crowneto1.s} {l crownrcc.s}} {l crowncut2.s}} {l crown_fill.s}}}
put {bottomtor.s} tor V {0 0 9} H {6.12323399573676603586882E-17 0 1} r_a 11.78466675885103676080234 r_h 3.825815710827906279689614
put {bottometo.s} eto V {0 0 20} N {0 0 0.06032399549610674427402301} C {2.864077970686895735497046 1.71612229850775266370988 1.889299368274914403542653} r 7.93389995193779462567818 r_d 1.673109642593672896637713
put {head_fill.s} tgc V {0 0 67.65223912679090290112072} H {0 0 22.65963591768163354345234} A {5.387125525462328923254063 0 0} B {0 5.387125525462328923254063 0} C {5.200376920059111007788033 0 0} D {0 5.200376920059111007788033 0}
put {crowncut2.s} tgc V {0 0 86.89911600000084490602603} H {0 0 6.858375356511876574927555} A {9.438877285833902064382528 0 0} B {0 9.438877285833902064382528 0} C {15.49844917074207906182437 0 0} D {0 15.49844917074207906182437 0}
put {crowncut1.s} eto V {0 0 77.72700899999993850997271} N {0 0 0.6853489141366997383642001} C {7.936978064717960634766314 0.7583105325216803471732874 14.21238543732845016620558} r 19.09763828673395735791019 r_d 8.357084880198749843316364
put {crowneto1.s} eto V {1.577721810442023610823457E-30 0 87.39109400000032223942981} N {-1.573547818886363209483057E-17 0 -0.04282997677321952190165888} C {-1.665828485074095866025345 -1.27132480626570165682665 -1.898428097677101966667124} r 12.13000000000000078159701 r_d 1.123246664863733368378007
put {crownell8.s} ell V {-13.73660800000212844906855 2.220446049250313080847263E-14 87.68836799997369269021874} A {0 -2.442952198710223399302777 1.005777905178345307186806E-16} B {3.658968546871206317661063 0 3.323573023963026340510396} C {-0.7091037075487675034324297 0 0.7806623003868651267112}
put {crownell7.s} ell V {-9.713248667302867289663482 9.713248667302899264086591 87.68836799997369269021874} A {-1.727428065822585123711974 -1.727428065822585123711974 1.005777905178345307186806E-16} B {2.587281471640917818177741 -2.587281471640917818177741 3.323573023963026340510396} C {-0.5014120401722559350332631 0.5014120401722559350332631 0.7806623003868651267112}
put {crownell6.s} ell V {2.220446049250313080847263E-14 13.73660800000212844906855 87.68836799997369269021874} A {-2.442952198710223399302777 0 1.005777905178345307186806E-16} B {0 -3.658968546871206317661063 3.323573023963026340510396} C {0 0.7091037075487675034324297 0.7806623003868651267112}
put {crownell5.s} ell V {9.713248667302899264086591 9.713248667302867289663482 87.68836799997369269021874} A {-1.727428065822585123711974 1.727428065822585123711974 1.005777905178345307186806E-16} B {-2.587281471640917818177741 -2.587281471640917818177741 3.323573023963026340510396} C {0.5014120401722559350332631 0.5014120401722559350332631 0.7806623003868651267112}
put {crownell4.s} ell V {13.73660800000212844906855 -2.220446049250313080847263E-14 87.68836799997369269021874} A {0 2.442952198710223399302777 1.005777905178345307186806E-16} B {-3.658968546871206317661063 0 3.323573023963026340510396} C {0.7091037075487675034324297 0 0.7806623003868651267112}
put {crownell3.s} ell V {9.713248667302867289663482 -9.713248667302899264086591 87.68836799997369269021874} A {1.727428065822584901667369 1.727428065822584901667369 1.005777905178345307186806E-16} B {-2.587281471640917818177741 2.587281471640917818177741 3.323573023963026340510396} C {0.5014120401722559350332631 -0.5014120401722559350332631 0.7806623003868651267112}
put {crownell2.s} ell V {-2.220446049250313080847263E-14 -13.73660800000212844906855 87.68836799997369269021874} A {2.442952198710222955213567 0 1.005777905178345307186806E-16} B {0 3.658968546871206317661063 3.323573023963026340510396} C {0 -0.7091037075487675034324297 0.7806623003868651267112}
put {crownell1.s} ell V {-9.713248667302899264086591 -9.713248667302867289663482 87.68836799997369269021874} A {1.727428065822584679622764 -1.727428065822584679622764 1.005777905178345307186806E-16} B {2.587281471640917818177741 2.587281471640917818177741 3.323573023963026340510396} C {-0.5014120401722559350332631 -0.5014120401722559350332631 0.7806623003868651267112}
put {crownrcc.s} tgc V {0 0 70.52245129853007199471904} H {0 0 15.07198012589280011752635} A {14.92710113237911251360401 0 0} B {0 14.92710113237911251360401 0} C {14.92710113237911251360401 0 0} D {0 14.92710113237911251360401 0}
put {head_tip.s} ell V {0 0 94.91151499999973850663082} A {3.119016812725599496758377 0 0} B {0 3.119016812725599496758377 0} C {0 0 1.345488882629591875783603}
put {crownell.c} comb region no tree {u {u {u {l crownell1.s} {l crownell2.s}} {u {l crownell3.s} {l crownell4.s}}} {u {u {l crownell5.s} {l crownell6.s}} {u {l crownell7.s} {l crownell8.s}}}}
put {headeto1.s} eto V {0 0 89.57779000000000735326466} N {-5.519803738384860362821316E-18 0 -0.04507261801711288928817822} C {-4.376792271273803436315575 -1.09418866449798435347418 -4.1289869793813673837235} r 4.82069915201276888438997 r_d 2.281365997196153738713065
put {bodytor.s} tor V {0 0 25} H {6.12323399573676603586882E-17 0 1} r_a 9.140689709069368618088447 r_h 0.9710977822416242410952236
put {bodyjut.s} ell V {0 0 57.95812100000001976241037} A {13.30005660511547738167337 0 0} B {0 13.30005660511547738167337 0} C {0 0 3.569547284150617283415841}
put {bodycut.s} tor V {0 0 46.43319499999997646000338} H {6.12323399573676603586882E-17 0 1} r_a 84.47809976324354863663757 r_h 78.38786126059979153524182
put {necktor.s} tor V {0 0 70.41021300000004146113497} H {3.061616997868383634231992E-16 0 1} r_a 8.239894264539179502548905 r_h 0.9722303169289367996697138
put {baseeto.s} eto V {0 0 5} N {-5.470978323999804257192075E-18 0 -0.04467392825269222295103688} C {9.315747832292275987242647 -1.365449293915910411456593 -4.391804451322707691929281} r 10.59850529883725656077331 r_d 4.265499428605880716247611
put {necketo.s} eto V {4.688718984760804335454747E-15 0 67.98440800000000194813765} N {-7.947115565380555332745523E-18 0 -0.06489312323286719474957351} C {-4.236592184243099801221888 2.53851689495714083477651 -2.794683321910145679112247} r 6.747558139033351665148075 r_d 2.154325975943817361724086
put {bottom.c} comb region no tree {u {u {l bottometo.s} {l bottomtor.s}} {u {l baseeto.s} {l base_filler.s}}}
put {queen.r} comb region yes tree {l queen.c {1 0 0 0 0 1 0 0 0 0 1 0.960356 0 0 0 1}}
attr set {queen.r} {region} {R} {shader} {plastic {re 0.1 sp 0.9 di 0.1 sh 50 ex 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/217}
put {crown.c} comb region no tree {- {l crown_main.c} {l crownell.c}}
attr set {crown.c} {inherit} {1}
put {queen.c} comb region no tree {u {u {u {l head.c} {l neck.c}} {u {l crown.c} {l body.c}}} {l bottom.c}}
put {scene.g} comb region no tree {u {l queen.r} {l tile.r}}
put {body.s} tgc V {0 0 5.912562917080187219198706} H {0 0 59.45235824170033822611003} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {tile.s} arb8 V1 {28.5 -28.5 0} V2 {28.5 28.5 0} V3 {28.5 28.5 -1} V4 {28.5 -28.5 -1} V5 {-28.5 -28.5 0} V6 {-28.5 28.5 0} V7 {-28.5 28.5 -1} V8 {-28.5 -28.5 -1}
put {tile.r} comb region yes tree {l tile.s}
attr set {tile.r} {region} {R} {shader} {plastic {re 0.5 sh 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/255}
put {body.c} comb region no tree {u {u {- {l body.s} {l bodycut.s}} {l bodytor.s}} {l bodyjut.s}}
put {neck.c} comb region no tree {u {u {l necketo.s} {l necktor.s}} {l neck_filler.s}}
put {head.c} comb region no tree {u {u {l head_tip.s} {l headeto1.s}} {l head_fill.s}}
put {base_filler.s} tgc V {0 0 -0.8138631382182293094729175} H {0 0 12.74035922868059600432389} A {16.38855503646686528895771 0 0} B {0 16.38855503646686528895771 0} C {9.863417071382475143082047 0 0} D {0 4.931708535691237571541023 0}
put {neck_filler.s} tgc V {5.044847376139677212870351E-16 0.11939600000000516466514 64.39600271525775099235034} H {0 0 13.56002315446382588959295} A {7.491481711620123995487575 0 0} B {0 7.491481711620123995487575 0} C {7.491481711620123995487575 0 0} D {0 7.491481711620123995487575 0}
-30
View File
@@ -1,30 +0,0 @@
title {Rook by Jeff Sieu. Made for Google Code-in 2017}
units mm
put {crowninset.s} tgc V {0 0 58} H {0 0 0.5999999999999999777955395} A {16.89118510350817103926602 0 0} B {0 16.89118510350817103926602 0} C {16.89118510350817103926602 0 0} D {0 16.89118510350817103926602 0}
put {crowninner.s} tgc V {0 0 4} H {0 0 6} A {10.16165733953459060501245 0 0} B {0 10.16165733953459060501245 0} C {11.34243115837037585436065 0 0} D {0 11.34243115837037585436065 0}
put {crowninsetsolid.s} tgc V {0 0 58} H {0 0 0.5999999999999999777955395} A {12.45527182860042714196425 0 0} B {0 12.45527182860042714196425 0} C {12.45527182860042714196425 0 0} D {0 12.45527182860042714196425 0}
put {bottomtor.s} tor V {0 0 9} H {6.12323399573676603586882E-17 0 1} r_a 11.78466675885103676080234 r_h 3.825815710827906279689614
put {bottometo.s} eto V {0 0 20} N {0 0 0.07140720069529053748436098} C {3.390289200472452524337541 2.031421963671408370544214 2.236416504815224470803514} r 9.036682630367613100474955 r_d 1.980506679827312765951319
put {crowncut3.s} arb8 V1 {-13.99038105676657828269072 5.767949192431094829203175 4} V2 {11.9903810567665729536202 -9.232050807568883854514752 4.000000000000001776356839} V3 {11.9903810567665729536202 -9.232050807568883854514752 10.00000000000000355271368} V4 {-13.99038105676657828269072 5.767949192431094829203175 10} V5 {-11.99038105676654808462445 9.232050807568848327377964 4} V6 {13.99038105676657472997704 -5.767949192431118810020507 4.000000000000001776356839} V7 {13.99038105676657472997704 -5.767949192431118810020507 10.00000000000000355271368} V8 {-11.99038105676654808462445 9.232050807568848327377964 10}
put {crowncut2.s} arb8 V1 {-11.99038105676656940090652 -9.232050807568908723510503 3.999999999999998223643161} V2 {13.99038105676658183540439 5.767949192431108151879471 3.99999999999999866773237} V3 {13.99038105676658538811807 5.767949192431077065634781 10.00000000000000355271368} V4 {-11.99038105676654453191077 -9.232050807568926487078897 10} V5 {-13.99038105676658716447491 -5.767949192431157889870974 3.99999999999999866773237} V6 {11.99038105676657472997704 9.232050807568862538232679 3.99999999999999911182158} V7 {11.990381056766564071836 9.232050807568855432805321 10.00000000000000355271368} V8 {-13.99038105676657472997704 -5.767949192431152560800456 10}
put {crowncut1.s} arb8 V1 {1.999999999999999777955395 -14.99999999999999822364316 4} V2 {1.999999999999999777955395 14.99999999999999822364316 4} V3 {1.999999999999999777955395 14.99999999999999822364316 10} V4 {1.999999999999999777955395 -14.99999999999999822364316 10} V5 {-1.999999999999999777955395 -14.99999999999999822364316 4} V6 {-1.999999999999999777955395 14.99999999999999822364316 4} V7 {-1.999999999999999777955395 14.99999999999999822364316 10} V8 {-1.999999999999999777955395 -14.99999999999999822364316 10}
put {crownrcc.s} tgc V {0 0 -2.292185375575158445826673} H {0 0 12.29218537557515844582667} A {14.16165733953459238136929 0 0} B {0 14.16165733953459238136929 0} C {14.16165733953459238136929 0 0} D {0 14.16165733953459238136929 0}
put {bodyjut.s} tgc V {0 0 42} H {0 0 2.264716425774114583191476} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {bodytor.s} tor V {0 0 25} H {6.12323399573676603586882E-17 0 1} r_a 10.44723380101833853927928 r_h 0.9710977822416242410952236
put {bodytop.s} tgc V {0 0 45.57436401080622090375982} H {0 0 10.23282399021384136972301} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {bodycut.s} tor V {0 0 41} H {6.12323399573676603586882E-17 0 1} r_a 86.63076947877770805916953 r_h 78.38786126059979153524182
put {bodyeto.s} eto V {-0.2528320000000000011830537 0 53} N {0 0 0.03930267507158188844407221} C {11.02968444236560330296015 0 11.02968444236560330296015} r 16.28367943394245997978942 r_d 4.327199580192768735287245
put {baseeto.s} eto V {0 0 5} N {-5.470978323999804257192075E-18 0 -0.04467392825269222295103688} C {9.315747832292275987242647 -1.365449293915910411456593 -4.391804451322707691929281} r 10.59850529883725656077331 r_d 4.265499428605880716247611
put {bodytop.c} comb region no tree {- {l bodytop.s} {l bodyeto.s}}
put {bottom.c} comb region no tree {u {u {l bottometo.s} {l bottomtor.s}} {u {l baseeto.s} {l base_filler.s}}}
put {crown.c} comb region no tree {u {- {- {- {- {- {l crownrcc.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}} {l crowninner.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}}} {l crowncut1.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}}} {l crowncut2.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}}} {l crowncut3.s {1 0 0 0 0 1 0 0 0 0 1 58 0 0 0 1}}} {l crowninset.s}} {l crowninsetsolid.s}}
put {scene.g} comb region no tree {u {l rook.r} {l tile.r}}
put {body.s} tgc V {0 0 5.912562917080187219198706} H {0 0 49.90908570176724623479458} A {14.1579783735264754795935 0 0} B {0 14.1579783735264754795935 0} C {14.1579783735264754795935 0 0} D {0 14.1579783735264754795935 0}
put {rook.r} comb region yes tree {l rook.c {1 0 0 0 0 1 0 0 0 0 1 1.090422 0 0 0 1}}
attr set {rook.r} {region} {R} {shader} {plastic {re 0.1 sp 0.9 di 0.1 sh 50 ex 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/217}
put {tile.s} arb8 V1 {28.5 -28.5 0} V2 {28.5 28.5 0} V3 {28.5 28.5 -1} V4 {28.5 -28.5 -1} V5 {-28.5 -28.5 0} V6 {-28.5 28.5 0} V7 {-28.5 28.5 -1} V8 {-28.5 -28.5 -1}
put {tile.r} comb region yes tree {l tile.s}
attr set {tile.r} {oshader} {plastic {sh 1}} {region} {R} {shader} {plastic {re 0.5 sh 1}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/255}
put {body.c} comb region no tree {u {u {- {l body.s} {l bodycut.s}} {l bodytor.s}} {l bodyjut.s}}
put {rook.c} comb region no tree {u {u {l crown.c} {l body.c}} {u {l bottom.c} {l bodytop.c}}}
put {base_filler.s} tgc V {0 0 -0.8138631382182293094729175} H {0 0 12.74035922868059600432389} A {16.38855503646686528895771 0 0} B {0 16.38855503646686528895771 0} C {9.863417071382475143082047 0 0} D {0 4.931708535691237571541023 0}
+32 -5
View File
@@ -1,12 +1,39 @@
set(COMGEOM_V5_MODELS ADA073408.comgeom)
set(COMGEOM_V5_MODELS
ADA073408.comgeom
)
macro(ADD_COMGEOM_V5_G_TARGET comgeom_model folder)
string(REGEX REPLACE "([0-9a-z]*).comgeom" "\\1" comgeom_model_root "${comgeom_model}")
set(output_file ${bin_root}/${DATA_DIR}/db/${comgeom_model_root}.g)
set(log_file ${CMAKE_CURRENT_BINARY_DIR}/${comgeom_model_root}.log)
add_custom_command(
OUTPUT ${output_file}
COMMAND ${CMAKE_COMMAND} -E remove ${output_file}
COMMAND comgeom-g -v 5 ${CMAKE_CURRENT_SOURCE_DIR}/${comgeom_model} ${output_file} > ${log_file} 2>&1
DEPENDS comgeom-g ${CMAKE_CURRENT_SOURCE_DIR}/${comgeom_model}
)
add_custom_target(${comgeom_model_root}.g ALL DEPENDS ${output_file})
set_target_properties(${comgeom_model_root}.g PROPERTIES FOLDER "${folder}")
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
string(REPLACE "${CMAKE_CFG_INTDIR}" "\${BUILD_TYPE}" output_file "${output_file}")
endif(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
install(FILES ${output_file} DESTINATION ${DATA_DIR}/db)
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
set(BUILT_MODELS "${BUILT_MODELS};${output_file}")
set(LOG_FILES "${LOG_FILES};${log_file}")
DISTCLEAN(${log_file})
endmacro(ADD_COMGEOM_V5_G_TARGET comgeom_model folder)
foreach(comgeom_input ${COMGEOM_V5_MODELS})
g_target(${comgeom_input} "BRL-CAD Geometry Models/Sample")
ADD_COMGEOM_V5_G_TARGET(${comgeom_input} "BRL-CAD Geometry Models/Sample")
endforeach(comgeom_input ${COMGEOM_V5_MODELS})
CMAKEFILES(${COMGEOM_V5_MODELS})
cmakefiles(
${COMGEOM_V5_MODELS}
CMakeLists.txt
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${BUILT_MODELS}")
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${LOG_FILES}")
CMAKEFILES(
README_ADA073408
ADA073408_inputs.tar.gz
)
Regular → Executable
+1 -1
View File
@@ -2,7 +2,7 @@
# C U B E . R T
# BRL-CAD
#
# Copyright (c) 2004-2025 United States Government as represented by
# Copyright (c) 2004-2016 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
+1 -1
View File
@@ -2,7 +2,7 @@
/* D B . P H P
* BRL-CAD
*
* Copyright (c) 2004-2025 United States Government as represented by
* Copyright (c) 2004-2016 United States Government as represented by
* the U.S. Army Research Laboratory.
*
* This library is free software; you can redistribute it and/or
-45
View File
@@ -1,45 +0,0 @@
title {A Die by Jeff Sieu. Made for Google Code-in 2017}
units mm
put {body_outer.r} comb region yes tree {l body_outer.c}
attr set {body_outer.r} {oshader} {plastic} {region} {R} {shader} {plastic {re 0.1 ri 1.4 sh 12}} {region_id} {1000} {material_id} {1} {los} {100} {color} {255/255/255}
put {body_inner.r} comb region yes tree {l body_inner.c}
attr set {body_inner.r} {oshader} {plastic} {region} {R} {shader} {plastic {sp 0.9 di 0.1}} {region_id} {1001} {material_id} {1} {los} {100} {color} {0/0/0}
put {body_outer.c} comb region no tree {- {- {n {l body_rpp.s} {l body_sphere.s}} {l dots.c}} {l body_inner.c}}
put {body_inner.c} comb region no tree {- {n {l body_rpp_inner.s} {l body_sphere_inner.s}} {l dots.c}}
put {cube_edges.c} comb region no tree {u {u {l cube_rcc1.s} {l cube_rcc2.s}} {l cube_rcc3.s}}
put {cube_rcc3.s} tgc V {8 10 8} H {0 -20 0} A {0 0 -2} B {2 0 0} C {0 0 -2} D {2 0 0}
put {cube_rcc2.s} tgc V {8 8 10} H {0 0 -20} A {0 2 0} B {2 0 0} C {0 2 0} D {2 0 0}
put {cube_rcc1.s} tgc V {10 8 8} H {-20 0 0} A {0 0 2} B {0 2 0} C {0 0 2} D {0 2 0}
put {body_rpp_inner.s} arb8 V1 {9.900000000000000355271368 -9.900000000000000355271368 -9.900000000000000355271368} V2 {9.900000000000000355271368 9.899999999999986144416653 -9.900000000000000355271368} V3 {9.900000000000000355271368 9.899999999999986144416653 9.900000000000000355271368} V4 {9.900000000000000355271368 -9.900000000000000355271368 9.900000000000000355271368} V5 {-9.899999999999922195570434 -9.900000000000000355271368 -9.900000000000000355271368} V6 {-9.899999999999922195570434 9.899999999999986144416653 -9.900000000000000355271368} V7 {-9.899999999999922195570434 9.899999999999986144416653 9.900000000000000355271368} V8 {-9.899999999999922195570434 -9.900000000000000355271368 9.900000000000000355271368}
put {body_rpp.s} arb8 V1 {10 -10 -10} V2 {10 9.999999999999985789145285 -10} V3 {10 9.999999999999985789145285 10} V4 {10 -10 10} V5 {-9.999999999999921840299066 -10 -10} V6 {-9.999999999999921840299066 9.999999999999985789145285 -10} V7 {-9.999999999999921840299066 9.999999999999985789145285 10} V8 {-9.999999999999921840299066 -10 10}
put {body_sphere_inner.s} ell V {0 0 0} A {13.4143020316096475141876 0 0} B {0 13.4143020316096475141876 0} C {0 0 13.4143020316096475141876}
put {dots6.c} comb region no tree {u {u {u {l sph61.s} {l sph62.s}} {u {l sph63.s} {l sph64.s}}} {u {l sph65.s} {l sph66.s}}}
put {dots5.c} comb region no tree {u {u {u {l sph51.s} {l sph52.s}} {u {l sph53.s} {l sph54.s}}} {l sph55.s}}
put {dots4.c} comb region no tree {u {u {l sph41.s} {l sph42.s}} {u {l sph43.s} {l sph44.s}}}
put {dots3.c} comb region no tree {u {u {l sph31.s} {l sph32.s}} {l sph33.s}}
put {dots2.c} comb region no tree {u {l sph21.s} {l sph22.s}}
put {dots1.c} comb region no tree {l sph11.s}
put {sph66.s} ell V {5.5 -12 -3.5} A {2.751840000000000063806738 0 0} B {0 2.751840000000000063806738 0} C {0 0 2.751840000000000063806738}
put {sph65.s} ell V {-5.5 -12 -3.49999999999999955591079} A {2.751840000000000063806738 0 0} B {0 2.751840000000000063806738 0} C {0 0 2.751840000000000063806738}
put {sph55.s} ell V {12 4.5 4.5} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph64.s} ell V {-5.5 -12 3.5} A {2.751840000000000063806738 0 0} B {0 2.751840000000000063806738 0} C {0 0 2.751840000000000063806738}
put {sph54.s} ell V {12 -4.5 4.5} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph63.s} ell V {5.5 -12 3.5} A {2.751840000000000063806738 0 0} B {0 2.751840000000000063806738 0} C {0 0 2.751840000000000063806738}
put {sph44.s} ell V {-3.5 -3.5 12} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph53.s} ell V {12 -4.5 -4.5} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph62.s} ell V {0 -12 -3.5} A {2.751840000000000063806738 0 0} B {0 2.751840000000000063806738 0} C {0 0 2.751840000000000063806738}
put {sph43.s} ell V {-3.5 3.5 12} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph52.s} ell V {12 4.5 -4.5} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph61.s} ell V {0 -12 3.50000000000000044408921} A {2.751840000000000063806738 0 0} B {0 2.751840000000000063806738 0} C {0 0 2.751840000000000063806738}
put {sph33.s} ell V {-4.5 -4.5 -12} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph42.s} ell V {3.5 -3.5 12} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph51.s} ell V {12 0 0} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph32.s} ell V {0 0 -12} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph41.s} ell V {3.5 3.5 12} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph22.s} ell V {-11.99999999999999822364316 3.49999999999999911182158 3.49999999999999911182158} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph31.s} ell V {4.5 4.5 -12} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph21.s} ell V {-11.99999999999998934185896 -3.50000000000000088817842 -3.50000000000000088817842} A {2.86650000000000027000624 0 0} B {0 2.86650000000000027000624 0} C {0 0 2.86650000000000027000624}
put {sph11.s} ell V {0 12.5 0} A {2.211859722021807250769143 1.981446994437259911947535 1.852442813782255726096082} B {-1.916905671313780867848209 2.832975207637170811381111 -0.7414338272552269959447813} C {-1.919153255314234307604693 -0.5460030047066275482592346 2.875540210372395932836298}
put {dots.c} comb region no tree {u {u {u {l dots1.c} {l dots2.c}} {u {l dots3.c} {l dots4.c}}} {u {l dots5.c} {l dots6.c}}}
put {die.g} comb region no tree {u {l body_outer.r} {l body_inner.r}}
put {body_sphere.s} ell V {0 0 0} A {13.51430203160964715891623 0 0} B {0 13.51430203160964715891623 0} C {0 0 13.51430203160964715891623}
BIN
View File
Binary file not shown.
+32 -6
View File
@@ -1,14 +1,40 @@
set(FAA_SAMPLE_MODELS Business_Jet.fg4 Generic_Twin.fg4)
set(FAA_SAMPLE_MODELS
Business_Jet.fg4
Generic_Twin.fg4
)
macro(ADD_FAA_G_TARGET faa_model folder)
string(REGEX REPLACE "([0-9a-z]*).fg4" "\\1" faa_model_root "${faa_model}")
set(output_file ${bin_root}/${DATA_DIR}/db/${faa_model_root}.g)
set(log_file ${CMAKE_CURRENT_BINARY_DIR}/${faa_model_root}.log)
add_custom_command(
OUTPUT ${output_file}
COMMAND fast4-g ${CMAKE_CURRENT_SOURCE_DIR}/${faa_model} ${output_file} > ${log_file} 2>&1
DEPENDS fast4-g ${CMAKE_CURRENT_SOURCE_DIR}/${faa_model}
)
add_custom_target(${faa_model_root}.g ALL DEPENDS ${output_file})
set_target_properties(${faa_model_root}.g PROPERTIES FOLDER "${folder}")
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
string(REPLACE "${CMAKE_CFG_INTDIR}" "\${BUILD_TYPE}" output_file "${output_file}")
endif(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
install(FILES ${output_file} DESTINATION ${DATA_DIR}/db)
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
set(BUILT_MODELS "${BUILT_MODELS};${output_file}")
set(LOG_FILES "${LOG_FILES};${log_file}")
DISTCLEAN(${log_file})
endmacro(ADD_FAA_G_TARGET faa_model folder)
foreach(faa_input ${FAA_SAMPLE_MODELS})
g_target(${faa_input} "BRL-CAD Geometry Models/Sample")
ADD_FAA_G_TARGET(${faa_input} "BRL-CAD Geometry Models/Sample")
endforeach(faa_input ${FAA_SAMPLE_MODELS})
cmakefiles(
CMAKEFILES(
${FAA_SAMPLE_MODELS}
CMakeLists.txt
README
)
)
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${BUILT_MODELS}")
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${LOG_FILES}")
# Local Variables:
# tab-width: 8
+74319 -208548
View File
File diff suppressed because it is too large Load Diff
-5
View File
@@ -6,8 +6,3 @@ DOT/FAA/AR-04/16
Office of Aviation Research
Washington, D.C. 20591
http://www.tc.faa.gov/its/worldpac/techrpt/AR04-16.pdf
(Note: the Generic Twin images in that report show the model
prior to its most recent updates, which are reflected in the
version included in BRL-CAD.)
+92 -21
View File
@@ -1,35 +1,106 @@
set(
NIST_SAMPLE_MODELS
set(NIST_SAMPLE_STEP_MODELS
NIST_MBE_PMI_1.stp
NIST_MBE_PMI_2.stp
NIST_MBE_PMI_3.stp
NIST_MBE_PMI_4.stp
NIST_MBE_PMI_5.stp
NIST_MBE_PMI_6.stp
NIST_MBE_PMI_7-10.3dm
NIST_MBE_PMI_11.stp
)
set(NIST_SAMPLE_3DM_MODELS
NIST_MBE_PMI_7-10.3dm
)
foreach(im ${NIST_SAMPLE_MODELS})
g_target(${im} "BRL-CAD Geometry Models/Sample")
endforeach(im ${NIST_SAMPLE_MODELS})
macro(ADD_NIST_STEP_TARGET step_model folder)
string(REGEX REPLACE "([0-9a-z]*).stp" "\\1" step_model_root "${step_model}")
set(output_file ${bin_root}/${DATA_DIR}/db/${step_model_root}.g)
set(log_file ${CMAKE_CURRENT_BINARY_DIR}/${step_model_root}.log)
add_custom_command(
OUTPUT ${output_file}
COMMAND step-g -O ${output_file} ${CMAKE_CURRENT_SOURCE_DIR}/${step_model} > ${log_file} 2>&1
DEPENDS step-g ${CMAKE_CURRENT_SOURCE_DIR}/${step_model}
)
add_custom_target(${step_model_root}.g ALL DEPENDS ${output_file})
set_target_properties(${step_model_root}.g PROPERTIES FOLDER "${folder}")
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
string(REPLACE "${CMAKE_CFG_INTDIR}" "\${BUILD_TYPE}" output_file "${output_file}")
endif(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
install(FILES ${output_file} DESTINATION ${DATA_DIR}/db)
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
set(BUILT_MODELS "${BUILT_MODELS};${output_file}")
set(LOG_FILES "${LOG_FILES};${log_file}")
DISTCLEAN(${log_file})
endmacro(ADD_NIST_STEP_TARGET step_model folder)
cmakefiles(
${NIST_SAMPLE_MODELS}
CMakeLists.txt
# Get our root path
if(CMAKE_CONFIGURATION_TYPES)
set(bin_root "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
else(CMAKE_CONFIGURATION_TYPES)
set(bin_root "${CMAKE_BINARY_DIR}")
endif(CMAKE_CONFIGURATION_TYPES)
# The general pattern of the BRL-CAD build is to use CMAKE_CFG_INTDIR when
# multi-configuration builds complicate the location of binaries. In this
# case, however, we are using a generated script with a different mechanism
# for handling this situation, and we need to update the executable paths
# accordingly if they are configuration dependent.
if(CMAKE_CONFIGURATION_TYPES)
string(REPLACE "${CMAKE_CFG_INTDIR}" "\${BUILD_TYPE}" rbin_root "${bin_root}")
else(CMAKE_CONFIGURATION_TYPES)
set(rbin_root "${bin_root}")
endif(CMAKE_CONFIGURATION_TYPES)
# Use the CMake executable to figure out if we need an extension
get_filename_component(EXE_EXT "${CMAKE_COMMAND}" EXT)
macro(ADD_NIST_3DM_TARGET rhino_model folder)
set(CMD_EXEC ${rbin_root}/${BIN_DIR}/3dm-g${EXE_EXT})
string(REGEX REPLACE "([0-9a-z]*).3dm" "\\1" rhino_model_root "${rhino_model}")
set(output_file ${rbin_root}/${DATA_DIR}/db/${rhino_model_root}.g)
set(log_file ${CMAKE_CURRENT_BINARY_DIR}/${rhino_model_root}.log)
set(STDOUT_LOG "${log_file}")
set(STDERR_LOG "${log_file}")
set(CMD_ARGS "-o \"${output_file}\" \"${CMAKE_CURRENT_SOURCE_DIR}/${rhino_model}\"")
configure_file(${BRLCAD_CMAKE_DIR}/builddir_cmd.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/3dm-g.cmake @ONLY)
set(output_file ${bin_root}/${DATA_DIR}/db/${rhino_model_root}.g)
add_custom_command(
OUTPUT ${output_file}
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/3dm-g.cmake
DEPENDS 3dm-g ${CMAKE_CURRENT_SOURCE_DIR}/${rhino_model}
)
add_custom_target(${rhino_model_root}.g ALL DEPENDS ${output_file})
set_target_properties(${rhino_model_root}.g PROPERTIES FOLDER "${folder}")
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
string(REPLACE "${CMAKE_CFG_INTDIR}" "\${BUILD_TYPE}" output_file "${output_file}")
endif(NOT "${CMAKE_CFG_INTDIR}" STREQUAL "." AND CMAKE_CONFIGURATION_FILES)
install(FILES ${output_file} DESTINATION ${DATA_DIR}/db)
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
set(BUILT_MODELS "${BUILT_MODELS};${output_file}")
set(LOG_FILES "${LOG_FILES};${log_file}")
DISTCLEAN(${log_file})
endmacro(ADD_NIST_3DM_TARGET rhino_model folder)
foreach(step_input ${NIST_SAMPLE_STEP_MODELS})
ADD_NIST_STEP_TARGET(${step_input} "BRL-CAD Geometry Models/Sample")
endforeach(step_input ${NIST_SAMPLE_STEP_MODELS})
CMAKEFILES(${NIST_SAMPLE_STEP_MODELS})
foreach(rhino_input ${NIST_SAMPLE_3DM_MODELS})
ADD_NIST_3DM_TARGET(${rhino_input} "BRL-CAD Geometry Models/Sample")
endforeach(rhino_input ${NIST_SAMPLE_3DM_MODELS})
CMAKEFILES(${NIST_SAMPLE_3DM_MODELS})
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${BUILT_MODELS}")
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${LOG_FILES}")
CMAKEFILES(
README
pdf/1.pdf
pdf/2.pdf
pdf/3.pdf
pdf/4.pdf
pdf/5.pdf
pdf/6.pdf
pdf/7-10_assem.pdf
pdf/7.pdf
pdf/8.pdf
pdf/9.pdf
pdf/10.pdf
pdf/11.pdf
pdf
)
# Local Variables:
+63 -25513
View File
File diff suppressed because one or more lines are too long
-120
View File
File diff suppressed because one or more lines are too long
-36
View File
@@ -1,36 +0,0 @@
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}}
-24
View File
@@ -1,24 +0,0 @@
title {Example rounding methods}
units mm
put {m2cuttop.tor} tor V {0 0 500} H {0 0 1} r_a 250 r_h 50
put {m2bottom.tor} tor V {0 0 -450} H {0 0 1} r_a 200 r_h 50
put {cylinder.rcc} tgc V {0 0 -500} H {0 0 1000} A {250 0 0} B {0 250 0} C {250 0 0} D {0 250 0}
put {fillends.rcc} tgc V {0 0 -550} H {0 0 1100} A {0 -200 0} B {200 0 0} C {0 -200 0} D {200 0 0}
put {filltop.rcc} tgc V {0 0 500} H {0 0 50} A {0 -200 0} B {200 0 0} C {0 -200 0} D {200 0 0}
put {bottom.tor} tor V {0 0 -500} H {0 0 -1} r_a 200 r_h 50
put {cylinder.r} comb region yes tree {l cylinder.rcc}
attr set {cylinder.r} {region} {R} {region_id} {1003} {material_id} {1} {los} {100}
put {m2top.tor} tor V {0 0 450} H {0 0 1} r_a 200 r_h 50
put {m2cutbottom.tor} tor V {0 0 -500} H {0 0 1} r_a 250 r_h 50
put {method3.r} comb region yes tree {l method3}
attr set {method3.r} {region} {R} {region_id} {1000} {material_id} {1} {los} {100}
put {method2.r} comb region yes tree {l method2}
attr set {method2.r} {region} {R} {region_id} {1002} {material_id} {1} {los} {100}
put {method1.r} comb region yes tree {l method1}
attr set {method1.r} {region} {R} {region_id} {1000} {material_id} {1} {los} {100}
put {top.tor} tor V {0 0 500} H {0 0 1} r_a 200 r_h 50
put {method3} comb region no tree {u {u {u {l cylinder.rcc} {l top.tor}} {u {l bottom.tor} {l filltop.rcc}}} {l fillbottom.rcc}}
put {method2} comb region no tree {u {u {- {- {l cylinder.rcc} {l m2cuttop.tor}} {l m2cutbottom.tor}} {l m2top.tor}} {l m2bottom.tor}}
put {method1} comb region no tree {u {u {l cylinder.rcc} {l fillends.rcc}} {u {l top.tor} {l bottom.tor}}}
put {fillbottom.rcc} tgc V {0 0 -550} H {0 0 50} A {0 -200 0} B {200 0 0} C {0 -200 0} D {200 0 0}
put {all.g} comb region no tree {u {u {l method1.r {1 0 0 1000 0 1 0 -1000 0 0 1 0 0 0 0 1}} {l method2.r {1 0 0 1000 0 1 0 0 0 0 1 0 0 0 0 1}}} {u {l method3.r {1 0 0 1000 0 1 0 1000 0 0 1 0 0 0 0 1}} {l cylinder.r}}}
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -4,14 +4,14 @@ C Y ground.r 1000 0 1 0 1 100 0 0 0 0 1 1 0
stack
camo o=2 s=100000; turbump s=20000; plastic sp=.1 di=.7
M u terra.s 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0
s dsp terra.no_sm file="terra.bin" sm=0 w=256 n=256 stom=100000,0,0,0,0,100000,0,0,0,0,25,0,0,0,0,1
s dsp terra.no_sm file="terra.dsp" sm=0 w=256 n=256 stom=100000,0,0,0,0,100000,0,0,0,0,25,0,0,0,0,1
S 20 water.s 0 2.560000000000e+07 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 2.560000000000e+07 0.000000000000e+00 0.000000000000e+00 2.560000000000e+07 1.187252625000e+06 0.000000000000e+00 0.000000000000e+00 1.187252625000e+06 -2.560000000000e+07 0.000000000000e+00 0.000000000000e+00 -2.560000000000e+07 2.560000000000e+07 0.000000000000e+00 -2.560000000000e+07 2.560000000000e+07 1.187252625000e+06 -2.560000000000e+07 0.000000000000e+00 1.187252625000e+06
C Y water.r 1001 0 2 0 1 100 1 114 147 163 1 1 0
stack
turbump s=100000; glass tr=0 re=0.4
M u water.s 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0
M - terra.s 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0
s dsp terra.s file="terra.bin" sm=1 w=256 n=256 stom=100000,0,0,0,0,100000,0,0,0,0,25,0,0,0,0,1
s dsp terra.s file="terra.dsp" sm=1 w=256 n=256 stom=100000,0,0,0,0,100000,0,0,0,0,25,0,0,0,0,1
S 19 light.s 0 3.869340800000e+07 5.792957000000e+06 1.000000000000e+07 1.000000000000e+06 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+06 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+06 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00
C Y light.r 1002 0 1 0 1 100 1 250 253 191 1 0 0
light
View File
-54
View File
@@ -1,54 +0,0 @@
# Make sure the converter executable exists
string(REPLACE "\\" "" CONV_EXEC "${EXEC}")
if(NOT EXISTS "${CONV_EXEC}")
message(FATAL_ERROR "Invalid geometry converter executable specified: ${CONV_EXEC}")
endif(NOT EXISTS "${CONV_EXEC}")
# Use local cache directories for the conversion
set(CBDIR "@CMAKE_CURRENT_BINARY_DIR@")
set(CSDIR "@CMAKE_CURRENT_SOURCE_DIR@")
set(BU_DIR_CACHE ${CBDIR}/cache_@in_model_root@)
set(LIBRT_CACHE ${CBDIR}/rtcache_@in_model_root@)
set(ENV{BU_DIR_CACHE} ${BU_DIR_CACHE})
set(ENV{LIBRT_CACHE} ${LIBRT_CACHE})
file(REMOVE_RECURSE "${BU_DIR_CACHE}")
file(REMOVE_RECURSE "${LIBRT_CACHE}")
file(MAKE_DIRECTORY "${BU_DIR_CACHE}")
file(MAKE_DIRECTORY "${LIBRT_CACHE}")
# Deduce the current BRLCAD_ROOT value from the conversion executable path.
# Setting BRLCAD_ROOT is the hammer that makes certain we are running things
# found in the build directory.
get_filename_component(CEDIR "${CONV_EXEC}" DIRECTORY)
set(BIN_DIR "@BIN_DIR@")
string(REGEX REPLACE "${BIN_DIR}$" "" CROOT "${CEDIR}")
set(ENV{BRLCAD_ROOT} "${CROOT}")
# Now that we know the root, finalize the full path output file location and
# run the conversion.
execute_process(
COMMAND "${CONV_EXEC}" @CONV_ARGS@
RESULT_VARIABLE conv_result
OUTPUT_VARIABLE conv_log
ERROR_VARIABLE conv_log
)
if(conv_result)
set(CARGS @CONV_ARGS@)
message(FATAL_ERROR "[@in_model_root@] Failure: ${conv_result}\n${CONV_EXEC} ${CARGS}\"\n\n${conv_log}")
endif(conv_result)
# Cleanup
execute_process(
COMMAND "@CMAKE_COMMAND@" -E rm -rf ${BU_DIR_CACHE}
)
execute_process(
COMMAND "@CMAKE_COMMAND@" -E rm -rf ${LIBRT_CACHE}
)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
-184496
View File
File diff suppressed because it is too large Load Diff
-89
View File
@@ -1,89 +0,0 @@
#!/bin/sh
# Ensure /bin/sh
export PATH || (echo "This isn't sh."; sh $0 $*; kill $$)
path_to_this="`dirname $0`"
LC_ALL=C
echo Looking for RT...
# find the raytracer
# RT environment variable overrides
if test "x${RT}" = "x" ; then
# see if we find the rt binary
if test -x "$path_to_this/../src/rt/rt" ; then
echo ...found $path_to_this/../src/rt/rt
RT="$path_to_this/../src/rt/rt"
elif test -x "$path_to_this/rt" ; then
echo ...found $path_to_this/rt
RT="$path_to_this/rt"
elif test -x "$path_to_this/../bin/rt" ; then
echo ...found $path_to_this/../bin/rt
RT="$path_to_this/../bin/rt"
elif test -x "$path_to_this/../build/bin/rt" ; then
echo ...found $path_to_this/../build/bin/rt
RT="$path_to_this/../build/bin/rt"
elif test -x "/usr/brlcad/bin/rt" ; then
echo ...found /usr/brlcad/bin/rt
RT="/usr/brlcad/bin/rt"
fi
else
echo ...using $RT from RT environment variable setting
fi
echo Looking for DB...
# find the geometry directory
# DB environment variable overrides
if test "x${DB}" = "x" ; then
# see if we find the db dir
if test -d "$path_to_this/../build/share/db" ; then
echo ...found $path_to_this/../build/share/db
DB="$path_to_this/../build/share/db"
elif test -d "$path_to_this/../db" ; then
echo ...found $path_to_this/../db
DB="$path_to_this/../db"
elif test -d "$path_to_this/db" ; then
echo ...found $path_to_this/db
DB="$path_to_this/db"
fi
else
echo ...using $DB from DB environment variable setting
fi
# print results or choke
if test "x${RT}" = "x" ; then
echo "ERROR: Could not find the BRL-CAD raytracer"
exit 1
else
echo "Using [$RT] for RT"
fi
if test "x${DB}" = "x" ; then
echo "ERROR: Could not find the BRL-CAD database directory"
exit 1
else
echo "Using [$DB] for DB"
fi
if test -f traffic_light.png ; then mv traffic_light.png traffic_light.png.$$ ; fi
if test -f traffic_light.log ; then mv traffic_light.log traffic_light.log.$$ ; fi
echo "Ray-tracing to file: traffic_light.png"
$RT -M -s1024 $*\
-o traffic_light.png\
${DB}/traffic_light.g\
'scene.c' \
2> traffic_light.log\
<<EOF
viewsize 1.60626398444471e+03;
orientation 5.25794963790780e-01 4.41938505076552e-01 4.69062489119843e-01 5.55166997473420e-01;
eye_pt 3.17305150328335e+04 -5.45678517872137e+03 5.82070858116997e+03;
start 0; clean;
end;
EOF
if test x$? != x0 ; then
echo "ERROR: Ray-trace failed."
fi
echo "Done. See traffic_light.log for details."
BIN
View File
Binary file not shown.
+160 -464
View File
File diff suppressed because it is too large Load Diff
+51 -101
View File
@@ -1,40 +1,46 @@
verbose_add_subdirectory(doc asciidoc)
if(BRLCAD_EXTRADOCS)
verbose_add_subdirectory(doc docbook)
else(BRLCAD_EXTRADOCS)
CMAKEFILES(docbook)
endif(BRLCAD_EXTRADOCS)
verbose_add_subdirectory(doc html)
verbose_add_subdirectory(doc legal)
set(
documentation_DATA
BRL-CAD.bib
GITHUB
CMAKEFILES(parsers)
set(documentation_DATA
IDEAS
PROJECTS
README.AIX
README.BSD
README.IRIX
README.Linux
README.MacOSX
README.Windows
README.BSD
README.Solaris
README.VAX
checklist.txt
README.Windows
TODO.BREP
TODO.shaded_displays
anim.txt
archer_ack.txt
benchmark.tr
brep.txt
BRL-CAD.bib
code_review.txt
cvs.txt
description.txt
notes/TODO.BREP
notes/TODO.shaded_displays
notes/apitrace.txt
notes/brep.txt
notes/bu_opt_design_notes.txt
notes/cvs.txt
notes/debugging_example.txt
notes/debugging_notes.txt
notes/editors.txt
notes/history.txt
notes/hypot.txt
notes/mater.txt
notes/matrix.txt
pre_BRL-CAD.bib
)
add_doc(documentation_DATA ".")
editors.txt
ged.tr
history.txt
hypot.txt
irprep.tr
mater.txt
matrix.txt
)
ADD_DOC(documentation_DATA ".")
set(
documentation_mged_old_DATA
set(documentation_mged_old_DATA
mged/a.tex
mged/adc.ps
mged/all.tex
@@ -199,87 +205,31 @@ set(
mged/wm-leg1.ps
mged/wm-prims.ps
mged/wm-tube.ps
notes/ecosystem.dot
notes/regions.txt
notes/rounding.txt
notes/tool_categories.txt
mk.tr
movie.txt
old-mged.tr
)
add_doc(documentation_mged_old_DATA mged_old REQUIRED "mged")
pkg.tr
regions.txt
rounding.txt
sun.txt
tube.txt
tool_categories.txt
ecosystem.dot
)
ADD_DOC(documentation_mged_old_DATA mged_old)
if(TARGET mged)
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})
endif(TARGET mged)
configure_file(pad_file.xml.in "${CMAKE_CURRENT_BINARY_DIR}/pad_file.xml" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pad_file.xml" DESTINATION ${DOC_DIR})
cmakefiles(
CMakeLists.txt
README.adoc
CMAKEFILES(
README.OSCON-2014
STARTERS
STRATEGY
git/bisect.txt
git/check.yml
git/diffing.txt
git/git2gource.cpp
git/gitconfig
git/gitk
git/gitstats.txt
git/gource.sh
git/gource.txt
git/history.txt
git/merging.txt
git/mime_types.txt
git/usability.txt
notes/bsd_semaphore_bug.txt
notes/cmake_paths/CMakeLists.txt
notes/cmake_paths/README.txt
notes/cmake_paths/dir_info.c
notes/cmake_paths/test.cmake.in
notes/cmake_vars.txt
notes/csv_to_comgeom.txt
notes/implicit_constraints.txt
notes/lcov.txt
csv_to_comgeom.txt
implicit_constraints.txt
pad_file.xml.in
)
# Generic C/C++ examples
cmakefiles(
notes/c_cxx_patterns/01_basic_C/CMakeLists.txt
notes/c_cxx_patterns/01_basic_C/main.c
notes/c_cxx_patterns/01_basic_C/nlib.c
notes/c_cxx_patterns/01_basic_C/nlib.h
notes/c_cxx_patterns/02_hidden_C/CMakeLists.txt
notes/c_cxx_patterns/02_hidden_C/main.c
notes/c_cxx_patterns/02_hidden_C/nlib.c
notes/c_cxx_patterns/02_hidden_C/nlib.h
notes/c_cxx_patterns/03_PImpl_C/CMakeLists.txt
notes/c_cxx_patterns/03_PImpl_C/main.c
notes/c_cxx_patterns/03_PImpl_C/nlib.c
notes/c_cxx_patterns/03_PImpl_C/nlib.h
notes/c_cxx_patterns/04_hidden_CXX/CMakeLists.txt
notes/c_cxx_patterns/04_hidden_CXX/main.c
notes/c_cxx_patterns/04_hidden_CXX/nlib.cxx
notes/c_cxx_patterns/04_hidden_CXX/nlib.h
notes/c_cxx_patterns/05_PImpl_CXX/CMakeLists.txt
notes/c_cxx_patterns/05_PImpl_CXX/main.c
notes/c_cxx_patterns/05_PImpl_CXX/nlib.cxx
notes/c_cxx_patterns/05_PImpl_CXX/nlib.h
notes/c_cxx_patterns/CMakeLists.txt
notes/c_cxx_patterns/README
)
# Notes about parser generators
cmakefiles(
notes/parsers/bison_to_lemon.txt
notes/parsers/flex_to_re2c.txt
notes/parsers/templates/CMakeLists.txt
notes/parsers/templates/main.c
notes/parsers/templates/main.h
notes/parsers/templates/parser.lemon
notes/parsers/templates/scanner.perplex
notes/parsers/writing_perplex_lemon_parsers.txt
)
trunk_hierarchy.org
)
# Local Variables:
# tab-width: 8
-104
View File
@@ -1,104 +0,0 @@
BRL-CAD has migrated from the Sourceforge hosting solution
(https://sf.net/projects/brlcad) to Github (https://github.com/BRL-CAD/brlcad).
As with other large projects that have undertaken large scale hosting and VCS
migration(1) the BRL-CAD project is adjusting to working in the new
environment. The following notes are intended to capture practical tips and
information related to working with BRL-CAD on the Github platform.
--------------------------------------------------------------------------------
For those wishing to direct Github emails to different addresses on a
per-project basis, the following information may be useful:
https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#customizing-email-routes-per-organization
--------------------------------------------------------------------------------
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.)
--------------------------------------------------------------------------------
Git provides a stats page, but that page reports only commits to the "main"
branch. To prepare a more comprehensive stats page, one alternative that has
been tested is:
https://github.com/tomgi/git_stats
After installing, statistics pages can be generated by running:
the following in a clone of the repository.
user@machine:~/brlcad$ git_stats generate
Note - on Ubuntu, per https://github.com/rails/rails/issues/34822 I had to add the line:
to the git_stats file
user@machine:~$ echo "gem 'bigdecimal', '1.4.2'" >> /var/lib/gems/2.7.0/gems/git_stats-1.0.17/bin/git_stats
and install the older version of bigdecimal (per https://stackoverflow.com/a/17026442):
user@machine:~$ gem install bigdecimal -v 1.4.2
---------------------------------------------------------------------------------
(1) 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/
+1 -1
View File
@@ -15,7 +15,7 @@ familiar with the project.
* Render some pictures using rt and rtedge
* Perform basic geometric analysis using rtarea, rtweight, and gqa
* Perform basic geometric analysis using rtarea, rtweight, and g_qa
* Write a procedural geometry tool (see examples in src/proc-db)
+2 -1
View File
@@ -86,7 +86,8 @@ testing tool for TCP implementers via Network Working Group RFC 2398.
This product does not yet exist but is a long term goal. It's
basically several of the core libraries form BRL-CAD's geometry
modeling kernel including the present libbu, libbn, librt, libwdb,
liboptical, and the ray-trace interface application back-end.
liboptical, libmultispectral, and the ray-trace interface application
back-end.
This modeling kernel provides fundamental geometric representation,
ray-trace analysis, and geometric processing capabilities via a
+35
View File
@@ -0,0 +1,35 @@
BRL-CAD on AIX README
=====================
Dec. 15, 2011 - As of this date, it has been some time since an AIX
build of BRL-CAD has been tested, and thus far it has NOT been tested
b with the new CMake build system.
Kitware provides an AIX powerpc binary for CMake, see
http://www.cmake.org/cmake/resources/software.html
Building BRL-CAD under AIX is fairly straightforward using a correctly
installed version on the GCC compiler. If, however, you are using the
IBM Visual Age compiler, then there are additional manual compilation
steps that will be necessary. In particular, the IBM compiler and
associated standard C library headers are inconsistent with respect to
ANSI/POSIX compliance compiler options.
The IBM compiler supports a variety of compliance options, the two of
particular relevance to building BRL-CAD (in terms of being the close
to obtaining a functional compile) are the strict compliance
(-qlanglvl=stdc89) or "extended" compliance (-qlanglvl=extc89) modes.
Problems encountered in our build environment using strict compliance
does mostly work though we ran into errors in the standard C library
headers.
Using the "extended" compliance mode resolved the standard C library
header issues, but introduces problems in the compilation of BRL-CAD
as the compiler then disables the provision of the __STDC__
preprocessor symbol. BRL-CAD then defaults back to K&R mode, which
the compiler verbosely refuses to compile. The "quick fix" that has
been used in the past is to simply swap the compiler between the two
modes as when one fails (e.g. strict), the other usually succeeds
(e.g. extended). Barring that working, you can use extended mode and
define __STDC__ manually.
-7
View File
@@ -14,10 +14,3 @@ packaging mechanisms. Failing that, CMake can be bootstrapped
without much difficulty on most modern Unix-style platforms.
BRL-CAD is included in the FreeBSD Ports system.
---------------------------------------------------------------------
When setting up to compile on GhostBSD, the following packages are
enough to get started:
pkg install cmake ninja os-generic-userland-devtools
+51
View File
@@ -0,0 +1,51 @@
BRL-CAD on IRIX README
======================
Building on IRIX is one of the most tricky platforms to support
without installing up-to-date compilation tools. That said, the build
has and should work just fine with either the MIPSPro or GCC
compilers. The best performance is usually achieved with the MIPSPro
compiler, whereas GCC will compile faster with less fuss.
Kitware provides CMake binaries for IRIX64 platforms:
http://www.cmake.org/cmake/resources/software.html
Parallel building
-----------------
For parallel compilation on IRIX, the -P option enables parallel
build mode and the PARALLEL environment variable sets the number
of CPUs (default is two):
PARALLEL=4 make -P
Potential problems you may encounter
------------------------------------
Symptom: MIPSPro linker reports symbol(s) missing
Description: There's a known bug in the MIPSpro linker involving
rpaths that are too long (namely longer than 255 characters) so care
should be taken to not compile in directories that are too deep. The
way this bug is usually seen is that the build will fail during
compilation where unresolved symbols are reported during linking,
symbols that are correctly included in the libraries being linked.
Workaround: It is usually sufficient to retry the compile from a
shorter path. (e.g., /tmp instead of /some/deep/path/to/brlcad)
---
Symptom: GCC crashes during compilation with internal errors
Description: Certain versions of the gcc compiler are known to crash
with internal error messages, for example on src/mged/animedit.c, when
using optimization flags (i.e. -O3).
Workaround: Compile in whatever directory is failing with -O0 instead:
cd src/mged
sed -i "s/ -O3 / -O0 /g" CMakeFiles/mged.dir/flags.make
make
cd ../..
make
+15 -78
View File
@@ -34,17 +34,6 @@ cmake ../brlcad -DBRLCAD_WORD_SIZE=64BIT
* Note that in both of the above situations you need both a compiler that
works in the alternate mode and system libraries of the correct type.
Alpine Linux
------------
Alpine is an interesting test platform in that it does not use
glibc but instead relies on mucl.
At a minimum, will need the following packages:
apk add cmake git gcc g++ make linux-headers
TODO - look into setup-xorg-base
Arch Linux
----------
@@ -64,10 +53,10 @@ you will be able to compile BRL-CAD.
Following the build instructions in the INSTALL file. You will need:
gcc (8+, e.g. 8.0.3)
g++ (8+, e.g. 8.0.3)
gcc (3+, e.g. 4.0.3)
g++ (3+, e.g. 4.0.3)
make (e.g. gnu make 3.8.0)
cmake (3.20 or newer)
cmake (2.8.8 or newer)
All three of those have implicit dependencies on other packages.
@@ -100,69 +89,25 @@ should be deleted and recreated for each new attempt at package
generation.
Redhat/Rocky (should also apply to other Redhat derivatives)
------------------------------------------------------------
Redhat/Fedora
-------------
If you don't already have the necessary development tools:
Development packages needed to build on Redhat/Fedora platforms:
yum install git cmake gcc gcc-c++
libXext-devel
libXi-devel
freetype-devel
fontconfig-devel
mesa-libGL-devel
Development packages for building on Redhat-based platforms:
yum install libX11-devel
yum install libXext-devel # optional
yum install libXi-devel # optional
yum install freetype-devel # optional
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 OS 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 can be too old to properly build
BRL-CAD, if the compilers don't support sufficiently modern standards.) The
following example is for Rocky Linux 8:
yum install scl-utils
yum install gcc-toolset-11
Then to run within that environment:
scl enable gcc-toolset-11 bash
The CMake version may be too old as well. One way to deal with this is to
download the source code and bootstrap it (do this within the gcc-toolset-11
enabled bash):
sudo yum install openssl-devel
curl -L -O -J https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3.tar.gz
tar -xvf cmake-3.28.3.tar.gz
cd cmake-3.28.3
./bootstrap --prefix=/opt/cmake
make -j3 && make install
export PATH=/opt/cmake/bin
From there, with the gcc-toolset 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 Redhat-like system you are
To determine what particular version of Redhat or Fedora you are
using, check these files:
cat /etc/redhat-release (Redhat)
cat /etc/fedora-release (Fedora)
cat /etc/rocky-release (Rocky)
-------
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 Redhat-derived
'sh/make_rpm.sh' which can only function on a Fedora or openSUSE
system. It can be used like so:
$ cd <BRL-CAD source directory>
@@ -173,14 +118,6 @@ 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 Rocky Linux 8 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
-----------
+9 -14
View File
@@ -28,8 +28,9 @@ http://www.cmake.org/cmake/resources/software.html
X11 Window Server
-----------------
You'll need to install an X11 server if you would like to build Tk and
have a graphical user interface. Apple no longer supports X11, so the
recommended X Window Server is now XQuartz: http://www.xquartz.org
have a graphical user interface. Apple's X11 is the recommended X
Window Server, but XQuartz should work too and is often newer than the
official Apple version: http://xquartz.macosforge.org
Supported Versions
------------------
@@ -81,20 +82,14 @@ online may prove fruitful.
So far, if parallel building doesn't work due to the above issue a
non-parallel build will still succeed. Another workaround is to build
just subdirectories (e.g. src, doc, etc.) individually and then
just subdirectories (e.g. src/other, doc, etc.) individually and then
do a toplevel make in non-parallel mode to finalize the build.
Debugging
---------
Apple now employs code signing and we do not yet. To debug apps using
Instruments, they will need to be signed with permissions in order to
debug them. Here's an example that signs them all with a
get-task-allow permission that lets them be introspected:
echo "<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>com.apple.security.get-task-allow</key><true/></dict></plist>" >> debug.plist
codesign -s - -v -f --entitlements debug.plist bin/*
OpenSceneGraph and OSX
----------------------
For 32bit OSX builds of an X11+OpenSceneGraph BRL-CAD:
cmake .. -DBRLCAD_BUNDLED_LIBS=BUNDLED -DBRLCAD_ENABLE_OSG=ON
-DBRLCAD_REGEX=SYSTEM -DBRLCAD_WORD_SIZE=32BIT -DOSG_WINDOWING_SYSTEM=X11
Tips
+53
View File
@@ -0,0 +1,53 @@
BRL-CAD: A Vibrant Open Source Model
+ intro
- speaker
- old vs. new (Rurel's joke about old farmer and his young farmhand)
+ overview
- history, players
Mike Muuss [author of ping]
- license
- languages (Ohloh stats)
+ important technical features
- database format
- tools
- libraries
- use of other FOSS libraries
- road map
+ other features
+ community
- players (Ohloh stats)
+ process
- Source Forge
- API changes
- deprecation policy
- release procedures
- version control
- bug tracking
- policy
- outreach
+16 -27
View File
@@ -1,7 +1,11 @@
BRL-CAD on Solaris README
=========================
There have been a variety of Solaris-style operating systems that appeared
following Sun's open-source release of OpenSolaris.
In recent years, there have been a variety of Solaris-style operating
systems that have appeared, following Sun's open-source release of
OpenSolaris. OpenSolaris itself doesn't seem to be especially active, but
another derivative system called OpenIndiana has appeared, based on the
illumos kernel - the Solaris file will be the place to add any notes
needed to build on such derivative systems, as well as Solaris proper.
Kitware does not provide a pre-compiled binary for CMake on Solaris
type systems. To bootstrap from the source code, try the following:
@@ -22,34 +26,19 @@ bin directory to your path:
csh: setenv PATH /home/user/cmake-install/bin:$PATH
bash: export PATH=/home/user/cmake-install/bin:$PATH
From there, you can proceed with building BRL-CAD. The most recent tests
From there, you should be good to build BRL-CAD. The most recent tests
of the Sun Studio compiler suggest that there are issues to resolve,
so (unless you want to fix those issues, which would be welcome!) you
probably want to use the GCC compiler suite to build BRL-CAD as well:
CC=gcc CXX=g++ cmake ../brlcad
If while compiling you encounter an error "Text relocation remains against
symbol" along with some number of lines following, it usually means that the
build has attempted to link a static system library into a shared library being
compiled. If this happens, it likely indicates a problem with the CMake build
logic and should be reported as a bug - you may also need to install a shared
version of the library. Another possibility would be to add -mipure-text to
the linker flags.
OpenIndiana
-----------
To build with gcc and CMake on OpenIndiana, you need to install the
following packages:
pkg install pkg:/developer/gcc-7
pkg install pkg:/developer/build/cmake
pkg install pkg:/developer/versioning/subversion
pkg install pkg:/system/header
pkg install pkg:/developer/lexer/flex
(Note that gcc-7 building doesn't work as of 2017-08-23 - the above install
list is a starting point, but the repo currently doesn't build and isn't close
to building. UPDATE - as of 2024 a *much* newer compiler will be needed...
C++17 support is now required.)
If while compiling you encounter an error "Text relocation remains
against symbol" along with some number of lines following, it usually
means that the build has attempted to link a static system library
into a shared library being compiled (e.g. attempting to link a system
libz.a into the png library distributed in src/other/libpng being
compiled as libpng.so). If this happens, it likely indicates a problem
with the CMake build logic and should be reported as a bug - you may also
need to install a shared version of the library. Another possibility
would be to add -mipure-text to the linker flags.
+9 -141
View File
@@ -3,19 +3,13 @@ BRL-CAD on Windows README
The usual way to build BRL-CAD for Windows is to use the CMake build
system generator and the Microsoft Visual Studio C++ (MSVC) compiler.
Recent versions of both are recommended. If generating an installer,
the following options are available and supported:
Recent versions of both (as of this writing, MSVC 2013 and CMake
2.8.12+) are recommended. If generating an installer, the Nullsoft
Scriptable Install System (NSIS) tool is also required.
Nullsoft Scriptable Install System (NSIS) - generates a. .exe installer
WiX Toolset - generates an MSI installer.
These tools must be installed separately - they are not included with
CMake or Visual Studio.
Note: In principle BRL-CAD can be built using CMake and environments
like Cygwin and/or Mingw/Msys, but they are largely untested and
infrequently supported. Enhancements or bug reports are welcome.
In principle, BRL-CAD can be built using CMake and environments like
Cygwin and/or Mingw/Msys, but the is largely untested and infrequently
supported. Enhancements or bug reports are welcome.
Visual Studio
-------------
@@ -49,135 +43,9 @@ BRL-CAD on Windows will generate over 800 of them) and a large list of
targets will appear. To build everything look for a target named
ALL_BUILD. Start compiling that target.
Once compilation is successfully complete, you can find the compiled
executables in a 'bin' directory in your build directory. For
example, mged.exe would be in brlcad-svn-trunk\.build\Debug\bin if
brlcad-svn-trunk\.build is the build directory specified to CMake and
CMAKE_BUILD_TYPE was set to Debug.
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
----------------------
The WiX Toolset's MSI file, in addition to the standard interactive
graphical install, also supports a command line based silent
install. (See, for example, https://stackoverflow.com/a/25230485)
msiexec.exe /i c:\BRL-CAD-7.32.0_win64.msi /QN /L*V "C:\Temp\brlcad_install.log"
The logging step is not required but is recommended to allow for
easier understanding of any issues that might arise.
===========================================
=== Setting a specific SDK version ===
If a particular version of the Windows SDK is needed, it is specified
with CMAKE_SYSTEM_VERSION (for example, to use 10.0.15063.0 the user
would define a New Entry in the CMake GUI before running configure,
make the variable CMAKE_SYSTEM_VERSION as a string type, and assign the
value of 10.0.15063.0.)
Note that for this to work the SDK version in question must be
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 ===
In order to build this version (required to build the Creo 3 converter)
with CMake, you must ensure that Microsoft's "rc.exe" program is
installed and findable by CMake.
To install "rc.exe", run or re-run the Visual Studio installer and enable
Visual C++ components and "Visual Studio Extensibility Tools Update 1" under
the "Common Tools" section.
The extensibility tools can become unselected by default in some
configurations. Verify "rc.exe" is installed in:
"C:\Program Files (x86)\Windows Kits\8.1\bin\x64"
Add that directory to your "Path" user variable so CMake will be able to
locate the rc executable.
See:
https://stackoverflow.com/questions/43847542/rc-exe-no-longer-found-in-vs-2015-command-prompt
======================================
Once compilation is successfully complete, 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.
MINGW (WORK IN PROGRESS - THIS DOES NOT YET WORK!!!)
-----
-77
View File
@@ -1,77 +0,0 @@
= BRL-CAD: Open Source Solid Modeling
:toc: macro
:toc-title:
:icons: font
:experimental:
// Attributes for easy maintenance
:project-url: https://brlcad.org
:docs-url: https://brl-cad.github.io/docs
:repo-url: https://github.com/BRL-CAD/brlcad
:chat-url: https://brlcad.zulipchat.com
image:https://img.shields.io/badge/license-BSD/LGPL-blue.svg["License"]
image:https://img.shields.io/badge/status-active-brightgreen.svg["Status"]
BRL-CAD is a powerful open-source cross-platform solid modeling system that includes interactive geometry editing, high-performance ray-tracing for rendering and geometric analysis, image and signal-processing tools, a system performance analysis benchmark suite, and libraries for robust geometric manipulation.
For more than 40 years, BRL-CAD has been a primary solid modeling system used by the U.S. military to model weapons systems for vulnerability and lethality analyses.
---
toc::[]
== Key Features
* **CSG Modeling:** Constructive Solid Geometry (CSG) provides precise Boolean operations on primitives.
* **High Performance:** Multi-threaded ray-tracing and a high-performance memory allocator.
* **Hybrid Representation:** Supports both CSG and B-Rep (NURBS) geometry.
* **Extensive Toolset:** Over 400 specialized command-line utilities for geometry processing.
* **Legacy of Stability:** Proven in production environments since 1979.
== Getting Started
=== Prerequisites
To build BRL-CAD from source, you will need:
* **CMake** (3.14+)
* **C/C++ Compiler** (GCC, Clang, or MSVC)
* **Build Tools** (Make, Ninja, or Visual Studio)
=== Quick Build (Unix/macOS)
[source,bash]
----
mkdir build
cd build
cmake .. -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
----
[NOTE]
====
For detailed installation instructions across different platforms, please refer to our link:{docs-url}/install[Installation Guide].
====
== Documentation
We are currently transitioning our extensive documentation (Docbook/XML + MediaWiki + troff + text + ...) to an **Antora-powered ecosystem**.
* **Tutorials:** link:{docs-url}/tutorials[Browse the Manuals]
* **Developer Guides:** link:{docs-url}/hacking and link:{repo-url}/blob/main/HACKING
* **Wiki:** {project-url}/wiki[snapshot that is a little out of date]
* **Etc:** link:{docs-url}[Not everything, but a lot]
== Contributing
BRL-CAD is a community-driven project. We welcome contributions in the form of bug reports, feature requests, code, and documentation.
1. **Chat with Us:** Connect with us on Zulip link:{chat-url}.
2. **Find Issues:** Check our link:{repo-url}/issues[Issue Tracker].
3. **Submit a PR:** We follow a standard Fork-and-Pull Request workflow.
[IMPORTANT]
.Documentation Contributors
We're prototyping the use of **AsciiDoc** for all project documentation in a separate "docs" repo.
== License
BRL-CAD is free and open-source software. Most components are licensed under the **BSD** or **LGPL** licenses. See the `COPYING` file for more details.
+1 -1
View File
@@ -32,7 +32,7 @@ Difficulty:
Prerequisites:
* Basic familiarity with C++ STL
References:
* https://github.com/BRL-CAD/stepcode
* src/other/step
* src/conv/step
* include
* http://www.sgi.com/tech/stl/
+2 -2
View File
@@ -7,7 +7,7 @@
BRL-CAD Development Strategy
This is a living document that defines and aims to help maintain a
consistent development strategy for addressing BRL-CAD requirements.
consistent develpment strategy for addressing BRL-CAD requirements.
It recognizes areas of strategic importance, outlines projects to
bolster those areas, and identifies specific actionable objectives.
@@ -234,7 +234,7 @@ bolster those areas, and identifies specific actionable objectives.
**** TODO create data caching test cases (1)
**** TODO implement libbu data caching (1)
*** implement LIBRT object caching (4)
*** implment LIBRT object caching (4)
**** TODO serialize BoT prep data to cache (1)
**** TODO serialize NURBS prep data to cache (1)
**** TODO serialize tess/plot data to cache (2)
-24
View File
@@ -278,27 +278,3 @@ BRL-CAD to IGES
* on what is and is not intersecting - perhaps it should? Potential trouble there with overlapping vs. non-
* overlapping regions.
*/
SOLID NURBS RAYTRACING ROBUSTNESS IMPROVEMENT/REFINEMENT
One of the difficult tasks with solid raytracing is determining reliably when we're inside or outside in cases where
BRep edges don't exactly join up geometrically. OpenNURBS has tolerances which define such shapes as "valid", but the
mathematics of the ray interesection will still report wonky results once hit points get inside those tolerance regions.
We have resolution logic that tries to handle ambiguous cases, but one potential technique we are not currently using
would use the bounding box information from the NURBS prep trees to augment that logic's robustness (or, more precisely,
bound the portions of the ray segment within which point ambiguities need to be resolved.)
The current thought is to use the not-on-surface-point bounding box points (which we can categorize as inside or outside
relative to the surface they are bounding by construting vectors from on surface points to those points and comparing
them to the surface normal vectors) and the surface points themselves to construct an outer and inner bounding volume
for the BRep (to be reliable, we would also have to take care that we refine enough to avoid self intersections in
those volumes.) The overall bounding box of the outer volume should always be larger than that of the inner volume,
so a comparison of those would allow us to flip them if the "wrong" box is too big to deal with a BRep with inverted
surface normals. (Might actually also allow us to reliably detect and fix such BReps, but that's a different topic.)
Once we have the outer bounding volume, we intersect that along with the NURBS BRep itself and use the ray segments
from the outer bounding volume as bounding regions within which we resolve any point ambiguities. This should allow
us to "locally" resolve issues in such a way that doesn't accidentally flag (say) a grazing corner hit as the in
hit for a clean hit pair much further down the shotline (which will result in a long "solid" segment through empty
space.)
+145
View File
@@ -0,0 +1,145 @@
Date: Fri, 30 Oct 87 3:58:14 EST
From: Phil Dykstra <phil@BRL.ARPA>
Subject: Re: Animation querry.
I have been meaning to put a few notes together about animation in
BRL-CAD for some time now. Your message presses the point so here's
a really quick basic overview. Note that animation control is
still very early and experimental. Don't be surprised if much of
it changes in the future.
------
The earliest form of animation was just changing the viewpoint.
So that RT could ray trace the "current" MGED view, a -M flag was
added which tells RT to read the viewing matrix from stdin.
This matrix is written on six lines in the form:
viewsize
xpos ypos zpos
[4x4 rotation matrix, 4 elements per line]
Such data can be saved along with an RT shell script by the "saveview"
command in MGED. To get just this data (i.e. without the shell script),
the "savekey" command can be used. Thus one can save a string of
viewpoint keyframes via "savekey." ["Times" can also be added to
the keyframes for the purposes of some interpolation programs.]
Several tools were written (not in the distribution) which generate
sequences of such views, interpolate a set a keyframes, etc.
The "rmats" command was added to allow a file of these views to be
read in to MGED so you could watch the keyframes go by. Feeding the
same data to RT (via the -M flag) computes an image for each view.
The views either go to the frame buffer, or if an output filename
is given, they go into files with frame number suffixes.
Animation previews are typically made via low resolution ray traces,
composited into one large image via "pixtile," and viewed on a frame
buffer via "fbanim" (preferably one with hardware pan and zoom).
Later we wished to articulate the models themselves, so a command
script language was created for RT. These are also fed to RT
via the -M flag. RT figures out whether it is given the old form
above or a real script. An animation description script contains
transformation matrices to be applied to the model tree. A simple
one might look like:
start 42;
clean;
anim frob/nitz matrix rmul
1 0 0 1
0 1 0 2
0 0 1 0
0 0 0 0;
end;
etc.
start - says to start frame number 42.
clean - make RT clean up after itself (this may not be needed any more...).
anim - says to apply an matrix animation to the arc connecting frob to
nitz. The type of matrix operation is a right multiply (choices
include right or left multiply, replace, or reroot (i.e. world
coordinates)).
end - tells it to go ahead and shoot this frame.
Eventually there will be things besides "matrix" animations to allow
material properties etc. to be animated.
Various outboard tools generate motions, merge animation scripts
together, allow the previewing/editing of motions, etc. For the
most part these tools are sufficiently ad hoc and experimental
that we aren't giving any of them away yet. Next year some time....
-------
I didn't explain any of it in much detail, but hopefully it
gives you an overview. One of these days we will write some
more about it - like when we start including some motion tools.
==============================
Date: Fri, 30 Oct 87 16:42:14 EST
From: Phil Dykstra <phil@BRL.ARPA>
Subject: Re: Animation querry.
Here's a bit more about the matrix operations available in RT
animation scripts.
-----
RT Matrix Animation Operations:
==============================
In BRL-CAD, matrices are handled in their usual mathematical form
(the transpose of the Newman and Sproull "computer graphics form").
That is, a matrix looks like this:
r1 r2 r3 dx
r4 r5 r6 dy
r7 r8 r9 dz
0 0 0 1/s
Points are *column* vectors, so a point is transformed by:
newpoint = Matrix * oldpoint;
Thus the world coordinate system is on the "left" end of a stack of
matrix operations; the local coordinate system being that of the point
on the extreme right.
In walking a model tree (such as "prep'ing" the model for ray tracing),
each arc crossed from root to leaf normally gets its matrix multiplied on
the right side of the current matrix stack[1]. Rigid body articulations
of a model can then be described by changing or adding matrices at the
appropriate points in this stack.
The matrix animation operations currently recognized by RT are:
rstack replace the entire stack up to this point
rarc replace the matrix on the specified arc
rboth replace the entire stack and the arc matrix
rmul arc = arc * Matrix
lmul arc = Matrix * arc
The path specifying where in the model tree the operation is to
be applied can either be an absolute path, e.g.
/body/left/arm/hand
which would affect the arc between the left arm of body and the hand
(note that hand need not be a leaf), or it can be a "wildcard", e.g.
arm/hand
would mean the arc between arm and hand anywhere in the model tree, i.e.
it is not restricted to the left one as above. Finally a wildcard like
arm
means the arc before any node called arm.
-------------------------
[1] It is interesting to note that our "right multiply" operation
corresponds exactly to the SGI Iris multmatrix() command. The later
pre-multiplies the matrix stack, but the matrix stack post-multiplies
any points being transformed! In fact, if one looks at the Iris at the
geometry engine level, one finds that it works with matrices in the
usual mathematical form - the gl2 library transposes them in and out of
N&S form.
-21
View File
@@ -1,21 +0,0 @@
include(${BRLCAD_CMAKE_DIR}/AsciiDoc.cmake)
verbose_add_subdirectory(asciidoc system)
verbose_add_subdirectory(asciidoc articles)
verbose_add_subdirectory(asciidoc books)
verbose_add_subdirectory(asciidoc devguides)
verbose_add_subdirectory(asciidoc lessons)
verbose_add_subdirectory(asciidoc presentations)
verbose_add_subdirectory(asciidoc specifications)
cmakefiles(
CMakeLists.txt
README.adoc
)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
-70
View File
@@ -1,70 +0,0 @@
= BRL-CAD AsciiDoc Documentation
:toc: left
:toclevels: 2
== Overview
This directory contains BRL-CAD documentation in AsciiDoc format, converted
from the original DocBook 5 XML sources in `../docbook/`. The conversion was
performed once using
link:../../misc/tools/db2adoc/db2adoc.xsl[db2adoc.xsl] (an XSLT stylesheet)
applied via `xsltproc`.
The `.adoc` files here are committed to version control as authoritative
sources. They are built into HTML and man-page outputs at compile time using
**asciiquack**, BRL-CAD's self-contained AsciiDoc processor.
== Directory Structure
[source]
----
doc/asciidoc/
├── articles/ General articles
├── books/ Long-form books
├── devguides/ Developer guides
├── lessons/ Tutorial lessons
├── presentations/ Presentation slides
├── specifications/ Format specifications
└── system/
├── man1/ Section 1 man pages (command-line tools)
├── man3/ Section 3 man pages (C library functions)
├── man5/ Section 5 man pages (file formats)
└── mann/ Section n man pages (MGED commands)
----
== Build Outputs
When `BRLCAD_EXTRADOCS=ON` is set at CMake configuration time:
* Man pages (`system/man*/`) are built by asciiquack with `-b manpage` and
installed under `${MAN_DIR}/man*/`.
* Articles, books, and other prose (`articles/`, `books/`, etc.) are built
with `-b html5` and installed under `${DOC_DIR}/html/asciidoc/`.
The build logic is in `brlcad/misc/CMake/AsciiDoc.cmake`.
== Re-running the Conversion
If the upstream DocBook sources change and you need to re-generate the AsciiDoc
files, run the XSLT stylesheet from the repository root:
[source,bash]
----
BEXT=/path/to/bext_output
for f in $(find doc/docbook -name "*.xml" -not -path "*/resources/*"); do
rel=${f#doc/docbook/}
out=doc/asciidoc/${rel%.xml}.adoc
mkdir -p "$(dirname "$out")"
$BEXT/noinstall/bin/xsltproc -xinclude \
misc/tools/db2adoc/db2adoc.xsl "$f" > "$out"
done
----
Alternatively, use `db2adoc.py` (requires pandoc ≥ 2.0) for a Python-driven
approach with better round-trip fidelity for complex markup:
[source,bash]
----
python3 misc/tools/db2adoc/db2adoc.py
----
-172
View File
@@ -1,172 +0,0 @@
set(
articles_EN
TEMPLATE.adoc
about.adoc
build_pattern.adoc
build_region.adoc
camo_shader.adoc
ebm_primitive.adoc
gcv.adoc
ged.adoc
main_menu.adoc
mged.adoc
mgedrc.adoc
nirt.adoc
oed.adoc
overlap_tool.adoc
pipes.adoc
projection_shader.adoc
tire.adoc
)
if(BRLCAD_EXTRADOCS)
add_asciidoc("HTML" articles_EN "articles" "")
endif(BRLCAD_EXTRADOCS)
set(
articles_EN_IMAGES
images/Lee_tux.gif
images/build_pattern_fig01.png
images/build_pattern_fig02.png
images/build_pattern_fig03.png
images/build_pattern_fig04.png
images/build_pattern_fig05.png
images/build_pattern_fig06.png
images/build_pattern_fig07.png
images/build_region_fig01.png
images/build_region_fig02.png
images/build_region_fig03.png
images/build_region_fig04.png
images/ebm_primitive_fig01.png
images/ebm_primitive_fig02.png
images/ebm_primitive_fig03.png
images/gcv_architecture.png
images/gcv_unsupported_tessellation.png
images/gcv_using_gdiff.png
images/mgedrc_fig01.png
images/mgedrc_fig02.png
images/mgedrc_fig03.png
images/moss_ssm.gif
images/nirt_fig01.png
images/nirt_fig02.png
images/nirt_fig03.png
images/nirt_fig04.png
images/nirt_fig05.png
images/nirt_fig06.png
images/nirt_fig07.png
images/nirt_fig08.png
images/nirt_fig09.png
images/nirt_fig10.png
images/nirt_fig11.png
images/nirt_fig12.png
images/nirt_fig13.png
images/nirt_fig14.png
images/nirt_fig15.png
images/nirt_fig16.png
images/nirt_fig17.png
images/nirt_fig18.png
images/nirt_fig19.png
images/nirt_fig20.png
images/nirt_fig21.png
images/nirt_fig22.png
images/nirt_fig23.png
images/nirt_fig24.png
images/oed_fig01.png
images/oed_fig02.png
images/oed_fig03.png
images/oed_fig04.png
images/oed_fig05.png
images/oed_fig06.png
images/oed_fig07.png
images/oed_fig08.png
images/oed_fig09.png
images/oed_fig10.png
images/oed_fig11.png
images/oed_fig12.png
images/oed_fig13.png
images/overlap_tool_fig01.gif
images/overlap_tool_fig02.gif
images/overlap_tool_fig03.png
images/pipes_fig01.png
images/pipes_fig02.png
images/pipes_fig03.png
images/pipes_fig04.png
images/pipes_fig05.png
images/pipes_fig06.png
images/pipes_fig07.png
images/pipes_fig08.png
images/pipes_fig09.png
images/pipes_fig10.png
images/pipes_fig11.png
images/pipes_fig12.png
images/pipes_fig13.png
images/projection_shader_fig01.png
images/projection_shader_fig02.png
images/projection_shader_fig03.png
images/projection_shader_fig04.png
images/projection_shader_fig05.png
images/projection_shader_fig06.png
images/projection_shader_fig07.png
images/tire_fig01.png
images/tire_fig02.png
images/tire_fig03.png
images/tire_fig04.png
images/tire_fig05.png
images/tire_fig06.png
images/tire_fig07.png
images/tire_fig08.png
images/tire_fig09.png
images/tire_fig10.png
images/tire_fig11.png
images/tire_fig12.png
images/tire_fig13.png
images/tire_fig14.png
images/base.gif
images/bool.gif
images/coord-axes.gif
images/cup_and_mug.gif
images/cup_and_mug_small.gif
images/cup_out+in.gif
images/cup_outside.gif
images/cup_w_handle.gif
images/faceplate.gif
images/faceplate_menu.gif
images/faceplate_menu_sm.gif
images/faceplate_sm.gif
images/fillet.gif
images/fillet.jpg
images/handle.gif
images/handle.jpg
images/mug_camo.gif
images/mug_camo.jpg
images/mug_green.gif
images/mug_green.jpg
images/prims.gif
images/rim.gif
images/rim.jpg
)
if(TARGET mged OR TARGET qged OR TARGET archer)
if(BRLCAD_EXTRADOCS)
add_doc(articles_EN_IMAGES html/articles/images)
add_asciidoc("HTML" articles_EN articles articles_EN_IMAGES_cp)
endif(BRLCAD_EXTRADOCS)
endif(TARGET mged OR TARGET qged OR TARGET archer)
cmakefiles(
CMakeLists.txt
${articles_EN}
${articles_EN_IMAGES}
images/tire_fig12.svg
images/tire_fig13.svg
)
add_subdirectory(hy)
add_subdirectory(it)
add_subdirectory(ru)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
-83
View File
@@ -1,83 +0,0 @@
= Article Title
Firstname Middlename Lastname <devs@brlcad.org>
:doctype: article
:toc:
:toclevels: 3
[[some-descriptive-tag]]
First paragraph goes here.
....
benchmark TIMEFRAME=1 run
....
[NOTE]
====
The preceding _benchmark_ command example can get a lot more complex.
====
When you run the *benchmark* with the *help* option, you might see this output:
....
sean@gcc1-power7 bin]$benchmark help
Usage: ./benchmark [command(s)] [OPTION=value] [RT_OPTIONS]
Available commands:
clean
...
....
Another paragraph with embedded list is shown here. Each paragraph gets its own para and should be wrapped for readability and localized context diff comparisons. A list of items:
* Bullet item 1.
* Bullet item 2.
[[another-tag-for-main-body]]
== Breaking up the flow into sections
You can use sections to group sections of your document together, but they are not necessary.
.Example embedded image text.
image::http://brlcad.org/images/logo/BRL-CAD_gear_logo_w_name_256.png[width=256]
Another image, but rendered inline image:http://brlcad.org/images/logo/BRL-CAD_gear_logo_64x64.png[width=64] with the paragraph text.
More paragraphs...
[cols="2*"]
|===
|Type
|Description
|ell
|Generalized Ellipsoid
|arb8
|Arbitrary Regular Polyhedron with up to 8 vertices
|===
[CAUTION]
====
There's a lot more you can do with Docbook/XML. Search the web for references and examples:
* http://www.docbook.org/tdg5/en/html/article.html[http://www.docbook.org/tdg5/en/html/article.html]
* http://www.openoffice.org/xml/xmerge/docbook/UserGuide.html[http://www.openoffice.org/xml/xmerge/docbook/UserGuide.html]
====
-25
View File
@@ -1,25 +0,0 @@
= About BRL-CAD
Christopher Sean Morrison <devs@brlcad.org>
:doctype: article
:toc:
:toclevels: 3
[[article-body]]
BRL-CAD is a powerful cross-platform Open Source combinatorial Constructive Solid Geometry (CSG) solid modeling system that includes interactive 3D solid geometry editing, high-performance ray-tracing support for rendering and geometric analysis, network-distributed framebuffer support, image and signal-processing tools, path-tracing and photon mapping support for realistic image synthesis, a system performance analysis benchmark suite, an embedded scripting interface, and libraries for robust high-performance geometric representation and analysis.
For more than 20 years, BRL-CAD has been the primary tri-service solid modeling CAD system used by the U.S. military to model weapons systems for vulnerability and lethality analyses. The solid modeling system is frequently used in a wide range of military, academic, and industrial applications including in the design and analysis of vehicles, mechanical parts, and architecture. The package has also been used in radiation dose planning, medical visualization, computer graphics education, CSG concepts and modeling education, and system performance benchmark testing among other purposes.
BRL-CAD supports a great variety of geometric representations including an extensive set of traditional CSG primitive implicit solids such as boxes, ellipsoids, cones, and tori, as well as explicit solids made from closed collections of Uniform B-Spline Surfaces, Non-Uniform Rational B-Spline (NURBS) surfaces, n-Manifold Geometry (NMG), and purely faceted mesh geometry. All geometric objects may be combined using boolean set-theoretic CSG operations including union, intersection, and difference.
BRL-CAD has been under active development with a portability heritage that includes systems such as a DEC VAX-11/780 running 4.3 BSD; DECStations running ULTRIX; Silicon Graphics 3030, 4D "IRIS", O2, Onyx, and Origin systems running various versions of IRIX; Sun Microsystems Sun-3 and Sun-4 Sparcs running SunOS; the Cray 1, Cray X-MP, Cray Y-MP, and Cray 2 running UNICOS; DEC Alpha AXP running OSF/1; Apple Macintosh II running A/UX; iPSC/860 Hypercube running NX/2; the Alliant FX/8, FX/80, and FX/2800; Gould/Encore SEL PowerNode6000/9000 and NP1; NeXT workstations; IBM RS/6000; HPPA 9000/700 running HPUX; Ardent/Stardent; Encore Multi-Max; and much more.
BRL-CAD is a collection of more than 400 tools, utilities, and applications comprising more than a million lines of source code. The package is intentionally designed to be extensively cross-platform and is actively developed on and maintained for many common operating system environments including BSD, Linux, Solaris, Mac OS X, and Windows among others. BRL-CAD is distributed in binary and source code form as free open source software (FOSS), provided under Open Source Initiative (OSI) approved license terms.
[NOTE]
====
Mike Muuss began the initial architecture and design of BRL-CAD back in 1979. Development as a unified package began in 1983. The first public release was made in 1984. BRL-CAD became an open source project on 21 December 2004.
====
-147
View File
@@ -1,147 +0,0 @@
= Using the Build Pattern Tool
Lee A Butler; Eric W Edwards; Dwayne L Kregel
:doctype: article
:toc:
:toclevels: 3
[[build_pattern_generalinfo]]
== General Pattern Information
As mentioned previously, the Build Pattern tool automates the process of making copies of existing geometry in rectangular, spherical, or cylindrical patterns. The user can choose to pattern at any of three depths of duplication: top, regions, and primitives.
The Build Pattern tool is run from the graphical user interface (GUI) (under the Tools menu); it currently has no command-line equivalent. The bottom of the pattern control GUI is a usage dialog box that lists pertinent information about each item on the GUI as the user mouses over the text.
There are many input fields. Some stand alone, and others belong to series that work together to provide the needed information for a specific option. Each series is denoted by a diamond-shaped check box. If the diamond is highlighted red, then all fields in that series are required. All required fields must be filled in for the pattern tool to work properly. It is also important to note that all dimensions must be in millimeters and that no commas should be used in number strings.
The Build Pattern tool is designed to work from a prototype geometry object. That is to say, the object that is patterned is not included in the resultant pattern.
[[build_pattern_names]]
== Pattern Names
As shown in Figure E-1, the tool appends three numbers to all patterned objects (unless you are using the increment option for primitives, in which case, the numbers for regions and primitives are incremented by the increment amount). For rectangular patterns, the first number is the X axis offset, the second is the Y axis offset, and the third is the Z axis offset. For spherical patterns, the first number references the azimuth, the second references the elevation, and the third references the radii. For cylindrical patterns, the first number references the radii, the second number references the height, and the third number references the azimuth.
[[build_pattern_fields]]
== Common Fields for all Patterns:
There are several fields in the pattern tool GUI that are common to all types of patterns.
The Group Name field is for the name of the combination to be created (or appended to) by a pattern call.
The Source String and Replacement String fields must be used together. The source string is the set of characters in each element of the patterned object to be changed. The replacement string is the set of characters that will replace the source string.
.Example of pattern-generated assembly names.
image::../articles/images/build_pattern_fig01.png[]
The Increment field is only for use when duplicating to the primitive level. It is added to the leftmost number field of each primitive. To determine the increment, examine the primitives of the object(s) you wish to pattern and find the largest span. For example, to create a pattern to the primitive level with the following primitives (which may or may not be in regions or assemblies):
....
part.s22 part.s22-1 part.s23 part.s24 part.s24+1 part.s24-1 part.s25,
....
one needs to determine the span. Note that the leftmost numbers in these primitives range from 22–25.Thus, as shown in the following expression, the span is four (inclusively). *******NEED FIGURE HERE***** If we use an increment of four, we will get the following set of primitives.
....
part.s26 part.s26-1 part.s27 part.s28 part.s28+1 part.s28-1 part.s29
....
Although it is acceptable to use a greater increment, gaps in numbers may be troublesome if one is using this capability extensively.
Finally, the Objects field is used for the names of all the items to be patterned.
[[build_pattern_stringsub]]
== String Substitution
It is also possible to create a pattern in which a string of characters in each element in the object is changed (e.g., "l_" -> "r_"). This is useful for symmetry applications (e.g., left - right) or series (e.g., 1 - n). Each element of the object must have the source string so the user must be thorough and name each primitive, region, and assembly properly. Consider the following example: image:../articles/images/build_pattern_fig07.png[]
Top-level duplications copy the patterned object and reference its entire structure with matrices, as follows:
....
/pattern group
/COPIED assemblies [MATRICES]
/assemblies
/regions
/primitives
....
Region-level duplications copy all assembly and regions and reference from the region level down with matrices.
....
/pattern group
/COPIED assemblies
/COPIED regions [MATRICES]
/primitives
....
Primitive-level duplications copy the entire tree structure to the primitive level without matrices using an increment on all primitives.
....
/pattern group
/COPIED assemblies NO MATRICES
/COPIED regions
/COPIED primitives
....
[[build_pattern_recpatterns]]
== Rectangular Patterns
The rectangular pattern GUI (shown in Figure E-2) is designed to facilitate one-, two-, or three-dimensional rectangular patterns. The default X, Y, and Z directions are positive along each axis. In order to create a rectangle that is not axis aligned, these vectors may be changed with the condition that each must remain precisely perpendicular to the other two. If the Use Directions series is checked, the user specifies the number of copies and the Delta between copies for each axis. If the Use Lists series is checked, the user can specify a list of deltas along each axis.
.The user interface for building rectangular patterns.
image::../articles/images/build_pattern_fig02.png[]
[[build_pattern_spherical]]
== Spherical Patterns
The spherical pattern GUI (shown in Figure E-3) facilitates sphere-shaped patterns rotated around a center vertex using user-specified radii with azimuth and elevation angles. As shown in Figure E-4, the patterned objects--in this case, a series of arrows--may be oriented as built around the sphere or rotated by azimuth and/or elevation such that they are oriented toward the pattern center using the Rotate Azimuth and Rotate Elevation check boxes.
As shown in Figure E-4, the Pattern Center field is the coordinate at the center of the pattern. The Object Center field is a user-defined coordinate used to locate the object(s) relative to the pattern center. It acts as the key point for any transformations to the pattern object(s).
The Starting Azimuth and Starting Elevation fields follow the same right-hand-rule Cartesian coordinate conventions as Multi-Device Geometry Editor (MGED) viewing. The Starting Radius is the distance from the Pattern Center to the object center at the user-specified azimuths and elevations.
If the Create Az/El series is checked, the user defines the number of azimuths and elevations and the deltas between each. If the Use Lists series is checked, the user must specify a list of azimuths and/or elevations.
The Create Radii and Use Radii List series define offsets from the Starting Radius, allowing the user to create a pattern of concentric spheres. If Create Radii is checked, the user specifies the Number of Radii and the Radius Delta in order to construct a number of equally offset sphere patterns. If the Use Radii List is checked, the user specifies a list of radius offsets.
.The user interface for building spherical patterns.
image::../articles/images/build_pattern_fig03.png[]
Without the Rotate Azimuth or Rotate Elevation boxes checked, the patterned objects are oriented as built without any rotations. Notice, for example, that every arrow in Figure E-5 points to the left. Notice also that for each patterned arrow, the Object Center (here specified as the tip of the arrow) is located on the circle outline at a distance of one Starting Radius from the Pattern Center. If we set the Object Center to the coordinate at the base of the arrow, the base would then lie on the circular outline. Wherever the Object Center is set is the point at which MGED works with the Object Center coordinate to place and rotate patterned objects.
.Examples of different spherical pattern orientations.
image::../articles/images/build_pattern_fig04.png[]
.Implementation of spherical patterns.
image::../articles/images/build_pattern_fig05.png[]
[[build_pattern_cylind]]
== Cylindrical Patterns
The cylindrical pattern GUI (shown in Figure E-6) facilitates the creation of cylinder-shaped patterns with user-defined center, direction, height, azimuth, and radii inputs. The Base Center is the vertex of the cylinder shape. The Object Center is a user-defined coordinate used to locate the object(s) relative to the Base Center and Height Direction. It acts as the key point for any transformations to the pattern object(s). The Height Direction is the vector along which the cylinder runs. The Starting Height is the offset from the Base Center along the Height Direction that the pattern will place the Object Center.
.The user interface for building cylindrical patterns.
image::../articles/images/build_pattern_fig06.png[]
-73
View File
@@ -1,73 +0,0 @@
= Using the build_region Command
Lee A Butler; Eric W Edwards; Dwayne L Kregel
:doctype: article
:toc:
:toclevels: 3
Just as the Build Pattern tool can help automate the process of building multiple occurrences of objects, the build_region command can help automate the process of creating regions. The command (which currently has no graphical user interface equivalent) uses meaning assigned by the user in the primitive name based on the intended use of the primitive.
The user includes the Boolean operation and relational information in the name of the primitive using a simple naming convention. The naming convention is designed around the following two assumptions:
* The same text "tag" is used for all primitives in a region.
* A sequential numbering pattern is used.
For example, let's say we want to build the four rounded corners of a "tub" region for a toy metal wagon assembly (see Figure F-1). We could choose something such as "wgn"--an abbreviated form of "wagon"--as the tag. This tag is short, easy to type, and representative of the final assembly name. Our primitives would therefore be of the form wgn.s#.
[[build_region5]]
.The rounded corners of a toy wagon.
image::../articles/images/build_region_fig01.png[]
Next, we create an arb8 for one long side of the wagon tub. It is named wgn.s1. After that, we create an rcc for one corner of the tub. It is named wgn.s2. To get a hollow quarter cylinder, we need to subtract a cylinder and intersect a bounding box (see Figure F-2). In order to relate the subtraction and intersecting primitives with wgn.s2, they will each share the same root name, wgn.s2. The subtraction primitive will be named wgn.s2-1, and the intersecting primitive will be named wgn.s2+1.
[[build_region7]]
.Arb8, cylinder, and two Boolean primitives.
image::../articles/images/build_region_fig02.png[]
Now we have created the following four primitives:
....
wgn.s1 wgn.s2 wgn.s2+1 wgn.s2-1
....
If we separate the primitives sequentially as follows,
....
wgn.s1
wgn.s2 wgn.s2+1 wgn.s2-1,
....
we can begin to see the Boolean structure falling out of the naming convention
....
u wgn.s1
u wgn.s2 + wgn.s2+1 - wgn.s2-1
....
If we wanted to make a second subtraction from wgn.s2--say, for a drain hole in the corner of the wagon--we would name that primitive wgn.s2-2 (see Figure F-3). We can break this name down as follows: *****NEED IMAGE HERE*****
[[build_region9]]
.The region and the subtraction primitives.
image::../articles/images/build_region_fig03.png[]
Note that the root name stays the same so we can maintain the relationship, and the second number (associated with the Boolean operation) is incremented sequentially.
[[build_region11]]
.Raytraced image with hole.
image::../articles/images/build_region_fig04.png[]
Obviously, the overall success or failure of the build_region command depends on primitives being named properly. But if they are, the command can organize them in one automated step, creating complex regions in just a few keystrokes.
Another modeling benefit of the build_region tool is that it allows the user to quickly organize primitives. Assume, for example, that we have used the aforementioned naming convention to construct a complicated region. If there was a subsection of the region that we needed to, say, keep out for another assembly, delete from our database, move slightly, or copy, it would be a simple matter to create a new region with just those primitives that we needed.
-103
View File
@@ -1,103 +0,0 @@
= Camouflage shader
:doctype: article
:toc:
:toclevels: 3
[[Introduction]]
== Introduction
The "camo" shader creates a pseudo-random tri-color camouflage pattern on the object using a fractal noise pattern. This is a procedural shader based upon a fractal noise function known as fractional brownian motion or fBm.
The fractal noise function produces a pseudo- random number in the range [-1.0 ... 1.0] from the 3-space coordinates of a point in the bounding volume of the region. This noise value is used to determine the color of the object at the given location.
.Table 1
[cols="2*"]
|===
|Noise Value
|Object Color
|nv < thresh1
|color 1
|nv < thresh1 and nv < thresh2
|color 2
|nv > thresh2
|color 3
|===
The fractal pattern has infinite resolution. As a result, the borders of the color splashes never become pixelated, no mater how close the eyepoint is to the surface.
.Table 2
[cols="3*"]
|===
|parameter
|Abbreviation
|Default Value
3+|Noise Parameters
|lacunarity
|l
|2.1753974
|H
|H
|1.0
|octaves
|o
|4.0
|size
|s
|1.0
|vscale
|v
|1.0/1.0/1.0
|delta
|d
|1000/1000/1000
3+|*Shader Specific Parameters*
|thresh1
|t1
|-0.25
|thresh2
|t2
|0.25
|color1
|c1
|97/74/41
|color2
|c2
|26/77/10
|color3
|c3
|38/38/38
|===
*Lacunarity*
The grid on which the noise function is built is scaled by this value for each successive octave of noise which will be combined to produce the final result.
*Octaves*
The number of times the noise grid will be scaled and recombined to produce the final noise function
*Size, Vscale*
If *size* is set it is used as a scalar which defines the size of the noise grid on the object. So if t2=0.5 and size=5mm then splotches of color3 would tend to be no larger than 5-10mm. If non-uniform scaling is required, Vscale can specify the grid size in X, Y and Z.
*Delta*
This specifies a translation in noise space for the origin of region space. Since the origin of noise space is reflected 8 ways, it is undesirable to have that portion of noise space overlap with region space.
[[Limitations]]
== Limitations
Because of the continuous nature of the fractal noise space, it is impossible to get a splash of color1 directly adjacent to a splash of color3.
-57
View File
@@ -1,57 +0,0 @@
= Using the Extruded Bitmap Primitive
Lee A Butler; Eric W Edwards; Dwayne L Kregel
:doctype: article
:toc:
:toclevels: 3
The extruded bitmap (ebm) primitive allows the user to make a three-dimensional (3-D) shape from a two-dimensional black-and-white image. This feature can be helpful when dealing with complex outlines, text, or other complicated shapes captured as images.
For example, the ebm could be used if one wanted to model 3-D letters, such as in a company name, onto the side of a simulated wall or building. Note also that the same image used for the projection can, with some extra processing, form the basis for the ebm (see Figures C-1-C-3).
[[ebm3]]
.Example of the .bw image used for ebm.
image::../articles/images/ebm_primitive_fig01.png[]
[[ebm4]]
.Example of ebm.
image::../articles/images/ebm_primitive_fig02.png[]
[[ebm5]]
.Example of the ebm with projection shader added.
image::../articles/images/ebm_primitive_fig03.png[]
To make an ebm, the image file must be a black and white (.bw) file. A .bw image is a grayscale raw image file with only one channel. Each pixel can be turned on or off, but it has no color data. As shown in Figures C-2 and C-3, the white part of the image may be extruded in a straight line in the +Z direction to whatever length the user specifies. Regardless of the complexity of the geometry, all of the extruded shapes form a single ebm primitive.
To enter an ebm in a database, the in command must be used. The arguments are as shown in the following example:
[[ebm8]]
[cols="7*"]
[%noheader]
|===
|in
|sample.ebm
|ebm
|image.bw
|600
|800
|1
|Make a shape.
|Name it sample.
|Make it an ebm.
|Use the image.bw image file.
|The image is 600 pixels wide.
|The image is 800 pixels high.
|Extrude the shape 1 inch (or whatever working units are in effect at the time) in the +Z direction.
|===
[NOTE]
====
Points to Remember About the ebm
* The ebm cannot be created with the make, create, or inside commands.
* The desired width and height of the ebm are input as pixel values, but the extrusion distance can be expressed in any working units.
* Extrusions are made in the +Z direction, although after an ebm is made, the shape can be rotated, translated, or scaled.
* When extruded, all shapes form a single ebm primitive.
====
-633
View File
@@ -1,633 +0,0 @@
= The Geometry Conversion Library
Jon Engbert
:doctype: article
:toc:
:toclevels: 3
== Introduction
The Geometry Conversion Library (GCV or libgcv) provides a unified API for geometry conversion capabilities under a plugin-based architecture.
The GCV public API is declared in C headers located within `include/gcv/`. The single `include/gcv.h` header includes the entire GCV public API.
== Architecture
The Geometry Conversion Library consists of a stream-based API for geometry conversion and associated operations. Input and output are provided by "reader" and "writer" converters (provided by plugins). Intermediate operations are provided by "filters". Readers and writers are types of filters that provide input and output support for model formats, while basic filters apply transformations to models and geometry.
Geometry is stored in an in-memory BRL-CAD database (`struct db_i` in `include/rt/db_instance.h`) during the intermediate steps of conversion. For writer filters, this database is marked read-only and its geometry should not be modified. All names within a BRL-CAD database must be unique.
.GCV architecture
image::../articles/images/gcv_architecture.png[]
== Building GCV
GCV can be built in a similar manner as other BRL-CAD libraries. After configuring with CMake, building the `libgcv` target will produce a dynamic library. For Unix-based systems, the procedure should be similar to the following:
....
$ cd brlcad
$ mkdir build
$ cd build
$ cmake ..
$ make libgcv
....
Plugins can be built under `gcv_ _plugin_name_` targets, or collectively under the `gcv_plugins` target.
The command-line utility can be built under the `gcv` target. At this time, the `gcv` program is not installed automatically; the binary will be placed into `build/src/conv/gcv/`.
== Example: Using GCV in an application
The following code illustrates a basic use of GCV from within an application. Note that there may be multiple filters providing import/export capabilities for a given format; the below code simply selects the first matching filter encountered.
.gcv_app.c
[example]
====
TODO: embedded code
====
== GCV Public API
The public API for interacting with GCV filter plugins is summarized below.
.GCV public filter API
[cols="2*"]
[%noheader]
|===
|`struct gcv_context`
|Stores the conversion state. Plugins may store messages in the `bu_avs_t` member `messages`.
|`gcv_context_init()`
|Initialize a `struct gcv_context`. Creates an in-memory `struct db_i` for conversion data.
|`gcv_context_destroy()`
|Frees memory associated with a `struct gcv_context`.
|`struct gcv_filter`
|Stores characteristics of a filter.
|`struct gcv_opts`
|Store generic options applying to all filters.
|`gcv_opts_default()`
|Initialize a `struct gcv_opts` with default values.
|`gcv_list_filters()`
|Returns a pointer to a `const struct bu_ptbl` containing all registered filters as `const struct gcv_filter` pointers.
|`gcv_execute()`
|Perform a filter operation on a `struct gcv_context`. Returns `1` on success and `0` on failure. If `gcv_options` is `NULL`, the defaults will be used as set by `gcv_opts_default()`. The parameters `argc` and `argv` are used for option parsing as specified by the struct gcv_filter.
|===
== The Internal Plugin API
The GCV plugin API is declared in `include/gcv/api.h`. Plugins provide an externally-visible `const struct gcv_plugin` defining their filters, which are described by `struct gcv_filter`.
.The gcv_filter struct
[cols="2*"]
[%noheader]
|===
|`name`
|Specifies a unique name for the filter, allowing it to be identified by application code.
|`filter_type`
|Specifies the type of filter.
|`create_opts_fn`
|Optional pointer to a function that allocates and initializes `struct bu_opt_desc` data and an opaque pointer for storing the option data. If non-`NULL`, `free_opts_fn` must also be specified. This member is private for use by libgcv and the associated plugin.
|`free_opts_fn`
|Optional pointer to a function that frees any opaque pointer allocated by `create_opts_fn`. This member is private for use by libgcv and the associated plugin.
|`filter_fn`
|Pointer to a function which performs the filter operation. The `db_i` passed to a writer function within a `gcv_context` is marked read-only (the pointer is to a non-`const` struct due to in-memory data that may be modified). Filters of type `GCV_FILTER_FILTER` receive a `NULL` value for `target`. Must return `1` on success and `0` on failure. This member is private for use by libgcv and the associated plugin.
|===
As shown in the above table, filters may initialize data structures for processing command-line style option strings via `bu_opt`. Please refer to `include/bu/opt.h` for full documentation on the `bu_opt` API.
=== Utility Functions
In addition to availability of the rest of the BRL-CAD API, the Geometry Conversion Library provides a number of utility functions that may be useful during plugin development.
.GCV utility functions
[cols="2*"]
[%noheader]
|===
|`gcv_bot_is_solid()`, `gcv_bot_is_closed()`, `gcv_bot_is_orientable()`
|Performs topological tests for determining whether a given triangular mesh is a manifold, orientable, closed fan satisfying requisite conditions for object solidity. `gcv_bot_is_solid()` is equivalent to `gcv_bot_is_closed && gcv_bot_is_orientable()`
|`gcv_facetize()`
|Produces a triangular mesh tessellation of the object at the given database path using the specified tolerances. Note that if the object at the given path is a combination, a single mesh will be produced from all objects within its tree, and so calling gcv_facetize() on a tree unnecessarily high in the hierarchy and containing many objects is more likely to fail during Boolean evaluation.
|===
There are also many relevant functions provided by the BRL-CAD API, including a new mesh decimation function.
.BRL-CAD mesh decimation API
[cols="2*"]
[%noheader]
|===
|`rt_bot_decimate_gct()`
|Fast implementation of an iterative mesh decimation algorithm.
|===
== Developing a Minimal Plugin
=== Basic Code
The following steps will implement a minimal plugin providing a reader filter.
. Add the following line to `misc/mime_cad.types`. This file is used to generate `include/bu/mime.h`:
+
----
model/foo bar
----
+
This will associate the file extension `.bar` with a new `BU_MIME_MODEL_FOO` value of `bu_mime_model_t`.
. Create the following file at `src/libgcv/plugins/foo/CMakeLists.txt`:
+
.CMakeLists.txt
[example]
====
----
LIBGCV_ADD_PLUGIN(foo "foo_read.c" "librt;libbu")
----
====
. Create the following file at `src/libgcv/plugins/foo/foo_read.c`:
+
.foo_read.c
[example]
====
TODO: embedded code
====
=== Traversing the Database
BRL-CAD provides the `db_walk_tree()` function for traversing the database in hierarchical order. You can specify your own visitor callbacks as documented in `include/rt/tree.h`, or use the region-end functions provided by GCV (`include/gcv/util.h`) to tessellate geometry at the region level.
.GCV region-end tessellation callbacks
[cols="2*"]
[%noheader]
|===
|`gcv_region_end()`
|Apply Boolean evaluation to region-level tessellated meshes using the default NMG Boolean evaluator, replacing each region-level node and its subtree of tessellated leaf meshes with a single BoT structure that is then passed to the specified callback. The `client_data` pointer should point to a `struct gcv_region_end_data`. The individual leaf nodes must already be tessellated into BoTs. This can be done by specifying a `leaf_func` such as `rt_booltree_leaf_tess()`. In the case of failure, an error message is emitted via `bu_log()` and the callback is not invoked. Any use of `bu_bomb()` produced by the callback is trapped and an error message is displayed while continuing the tree walk.
|`gcv_bottess_region_end()`
|Boolean evaluator roughly based on UnBBoolean's j3dbool (and associated papers). Does not take a callback.
|`gcv_region_end_mc()`
|Experimental variant of `gcv_region_end()` based on the marching-cubes algorithm. Tessellates leaves internally and does not require a `leaf_func`.
|===
The following example implements a filter that tessellates all geometry into BoT mesh objects and counts the total number of faces.
.tessellation_statistics.c
[example]
====
TODO: embedded code
====
=== Converting Unsupported Entities
Although BRL-CAD supports a wide array of common geometric primitives, you may encounter objects that can't be directly imported or exported into an analogous entity. In these cases, conversion filters usually tessellate the incompatible geometry (typically during export) or convert it into an approximation or a composite of several other primitives (often during import).
.Tessellation of incompatible entities
image::../articles/images/gcv_unsupported_tessellation.png[]
=== Comparing Geometry
When developing a filter, it is often useful to be able to compare different models during testing. This capability is provided by the `gdiff` tool. There are two versions of `gdiff`: the standalone command-line version and the `gdiff` provided within the MGED interface.
The command-line `gdiff` quickly produces a textual summary for a two- or three- way diff of several BRL-CAD databases. Documentation for this utility is available under `brlman gdiff`.
The `gdiff` command available within the MGED interface provides a different capability. It uses BRL-CAD's ray tracer to produce a visual display of the differences between two objects within the same database. To compare geometry from separate databases, you can first merge the databases using the `dbconcat` command from within MGED. See `brlman dbconcat` for full documentation.
.Usage of MGED's gdiff utility
[cols="2*"]
|===
|Usage:
|`gdiff [OPTION]... obj1 obj2`
|`--tol=#`, `-t#`
|Tolerance in millimeters.
|`--ray-diff`, `-R`
|Test for differences with raytracing.
|`--view-left`, `-l`
|Visualize volumes added only by left object.
|`--view-both`, `-b`
|Visualize volumes common to both objects.
|`--view-right`, `-r`
|Visualize volumes added only by right object.
|`--grazing`, `-G`
|Report differences in grazing hits (raytracing mode).
|===
.Using MGED's gdiff utility
image::../articles/images/gcv_using_gdiff.png[]
=== Creating Unit Tests
BRL-CAD provides a library of standard models that may be used for unit tests, located under `$BRLCAD_ROOT/share/db/` (note that these files are generated during the build process). Unit tests can be integrated into the build system using the `add_test` CMake command.
== Example: Extending an Application
The following example will leverage the filter in the above plugin example, `tessellation_statistics.c`, to implement a function that counts the number of faces in a model after tessellation.
.gcv_embedded.c
[example]
====
TODO: embedded code
====
== The GCV Frontend
GCV includes a command-line front-end utility, `gcv`, implemented in `src/conv/gcv/gcv.c`. Full documentation is available under `brlman gcv` and `gcv --help`.
.Basic usage of the gcv utility
[example]
====
....
$ gcv --input=a.stl --output=b.fg4
Input file format: BU_MIME_MODEL_STL
Output file format: BU_MIME_MODEL_VND_FASTGEN
Input file path: a.stl
Output file path: b.fg4
Converting Part: all_cpu_cpw6_cw_cpubox_cpubox.a
Using solid name: s.all_cpu_cpw6_cw_cpubox_cpubox.a
Making region (all_cpu_cpw6_cw_cpubox_cpubox.a)
...
....
====
.Generic options
[example]
====
....
$ gcv --input=a.fg4 --output=b.vrml --input-and-output-opts --verbosity=1 --output-only-opts --objects=comp_0001.r
....
====
.Filter-specific options
[example]
====
....
$ gcv --input=a.fg4 --output=b.obj --input-only-opts --colors=a.fg4.colors --output-only-opts --vertex-normals
....
====
.Specifying conversion formats
[example]
====
....
$ gcv --input=infile.txt --output=outfile.obj --input-format=stl
....
====
== Conversion Filters
GCV currently contains support for import and export into five model formats, detailed below.
.Conversion formats supported by GCV
[cols="2*"]
|===
|Format
|File Extension
|BRL-CAD
|`.g`
|FASTGEN4
|`.fg4`
|WaveFront Object
|`.obj`
|StereoLithography
|`.stl`
|Virtual Reality Modeling Language
|`.vrml`
|===
=== Common Conversion Options
The `gcv_opts` struct stores generic options applying to many filters, detailed below. Not all options may be applicable to or respected by every filter.
.Conversion formats supported by GCV
[cols="2*"]
[%noheader]
|===
|`debug_mode`
|Print debugging info if set to `1`. Default is `0`.
|`verbosity_level`
|Verbosity level. The default, level `0`, is "quiet" (only error messages are produced).
|`scale_factor`
|Specify the scale factor to be applied during import or export, as units per mm. Default is `1.0`.
|`calculational_tolerance`
|Calculational tolerance. Defaults to the RT defaults. If you use a non-default value, you should set the ray tracer tolerance to match it when using the resulting model.
|`tessellation_tolerance`
|Tessellation tolerance. The default value is: `abs = 0.0` `rel = 1.0e-2` `norm = 0.0`
|`tessellation_algorithm`
|Specify use of either the default, marching-cubes, or bottess-based tessellation algorithm.
|`max_cpus`
|Maximum number of processors to utilize where possible. Default is `0`, specifying the maximum available during execution.
|`num_objects`
|Number of objects to convert. If `0` (the default), all top-level objects will be converted.
|`object_names`
|Names of objects to convert (must have `num_objects` elements). Default is `NULL`.
|`default_name`
|Name assigned to objects without names. Defaults to "`unnamed`".
|`bu_debug_flag`
|Debug flag for libbu (see `include/bu/debug.h`), applied via bitwise-OR with the original value. The original debug flag will be restored after conversion. Defaults to `0`.
|`rt_debug_flag`
|Debug flag for librt (see `include/rt/debug.h`), applied via bitwise-OR with the original value. The original debug flag will be restored after conversion. Defaults to `0`.
|`nmg_debug_flag`
|Debug flag for libnmg (see `include/nmg.h`), applied via bitwise-OR with the original value. The original debug flag will be restored after conversion. Defaults to `0`.
|===
.Using struct gcv_opts
[example]
====
----
static int
apply_filter_with_options(struct gcv_context *context, const struct gcv_filter *filter, const char *target)
{
struct gcv_opts options;
const char *argv[] = { "--colors=colors.dat", "--continue" };
const size_t argc = sizeof(argv) / sizeof(argv[0]);
gcv_opts_default(&options);
options->debug_mode = 1;
return gcv_execute(context, filter, &options, argc, argv, target);
}
----
====
=== FASTGEN4 Reader
.FASTGEN4 reader options
[cols="2*"]
[%noheader]
|===
|`--colors=_path_`
|Path to a file specifying component colors.
|`--muves=_path_`
|Create a MUVES input file containing any CHGCOMP and CBACKING components.
|`--plot=_path_`
|Create a libplot3 plot file of all CTRI and CQUAD elements processed.
|`--sections=_list_`
|Process only a list ("`3001, 4082, 5347`") or a range ("`2315 - 3527`") of section IDs.
|===
=== FASTGEN4 Writer
At this time, the FASTGEN4 writer plugin does not make use of any filter-specific options.
=== OBJ Reader
.OBJ reader options
[cols="2*"]
[%noheader]
|===
|`--continue`
|Continue processing on nmg-bomb. Conversion will fall back to native BoT mode if a fatal error occurs when using the nmg or BoT-via-nmg modes.
|`--fuse-vertices`
|Fuse vertices that are near enough to be considered identical. Can make the solidity detection more reliable, but may significantly increase processing time during the conversion.
|`--grouping=_mode_`
|Select which OBJ face grouping is used to create BRL-CAD primitives. `group` = group (default) `material` = material `none` = none `object` = object `texture` = texture
|`--conversion-mode=_mode_`
|Select the conversion mode. `bot` = native BoT (default) `nmg` = NMG `nmgbot` = BoT via NMG
|`--bot-plate-thickness=_thickness_`
|Thickness (mm) used when a BoT is not a closed volume and it's converted as a plate or plate-nocos BoT.
|`--bot-ignore-normals`
|Ignore the normals defined in the input file when using native BoT conversion mode.
|`--bot-open-type=_type_`
|Select the type used for BoTs that aren't closed volumes. `surface` = surface (default) `plate` = plate `nocos` = plate-nocos
|`--bot-plot`
|Creates a plot/overlay (`.plot3`) file of open edges for BoTs that aren't closed volumes. `_bot_name_.plot3` will be created in the current directory and will overwrite any existing file with the same name.
|`--bot-orientation=_mode_`
|Select the BoT orientation mode. `unoriented` = unoriented (default) `ccw` = counterclockwise `cw` = clockwise
|===
=== OBJ Writer
.OBJ writer options
[cols="2*"]
[%noheader]
|===
|`--vertex-normals`
|Output vertex normals.
|`--usemtl`
|Place `usemtl` statements in the output file. These statements are fictional (they do not refer to any material database). The materials named provide information about the material codes assigned to the objects in the BRL-CAD database. The material names will be of the form "`_aircode___los___material_`", where _aircode_ is the code number for the air represented by that region, if it does represent air; otherwise, this will be `0`. The _los_ is the Line Of Sight thickness (`0` to `100`) assigned to the region, and _material_ is the material code number assigned.
|===
=== STL Reader
.STL reader options
[cols="2*"]
[%noheader]
|===
|`--binary`
|Specify that the input file is in binary STL format (the default assumes ASCII).
|`--starting-ident=_number_`
|Specify the starting ident for the regions created. The default is `1000`. This number will be incremented for each region, unless `--constant-ident` is specified.
|`--constant-ident`
|Specify that the starting ident should remain constant.
|`--material=_code_`
|Specify the material code that will be assigned to all created regions (the default is `1`).
|===
=== STL Writer
.STL writer options
[cols="2*"]
[%noheader]
|===
|`--binary`
|Write output as a binary STL file. The default is ASCII. In the case of ASCII output, the region name is specified on the "solid" line of the STL file. In the case of binary output, all the regions are output as a single STL part.
|`--output-dir`
|Specify that the output path should be a directory. Each region converted is written to a separate file. File names are constructed from the full path names of each region (the path from the specified object to the region). Any "`/`" characters in the path name are replaced by "`@`" characters and "`.`" and white space are replaced by "`_`" characters.
|===
=== VRML Reader
At this time, the VRML reader plugin does not make use of any filter-specific options.
=== VRML Writer
.VRML writer options
[cols="2*"]
[%noheader]
|===
|`--bot-dump`
|BoT dump. Mutually exclusive with `--evaluate-all`.
|`--evaluate-all`
|Evaluate all, CSG and BoTs. Mutually exclusive with `--bot-dump`.
|===
=== Open Asset Import Library Reader
The Open Asset Import Library (assimp) is an open source library integrated into GCV, capable of loading and converting geometry from 45 3D file-formats.
.Conversion extensions supported by Asset Import Library reader
[cols="3*"]
[%noheader]
|===
|.3d
|.gltf / .glb (1.0)
|.obj
|.3ds
|.gltf (2.0)
|.off
|.3mf
|.hmp
|.ogex
|.ac
|.ifc
|.ply
|.ac3d
|.lwo
|.pmx
|.acc
|.lws
|.q3o
|.ase
|.lxo
|.q3s
|.b3d
|.md2
|.raw
|.blend
|.md3
|.sib
|.bvh
|.md5
|.smd
|.cms
|.mdc
|.stl
|.cob
|.mdl
|.x
|.dae
|.mesh / .mesh.xml
|.x3d
|.dxf
|.ms3d
|.xgl
|.fbx
|.nff
|.zgl
|===
.Asset Import Library reader options
[cols="2*"]
[%noheader]
|===
|`--starting-ident=_number_`
|Specify the starting ident for the regions created. The default is `1000`. This number will be incremented for each region, unless `--constant-ident` is specified.
|`--constant-ident`
|Specify that the starting ident should remain constant.
|`--material=_code_`
|Specify the material code that will be assigned to all created regions (the default is `1`).
|`--format=_file_fmt_`
|Specify the file format for conversion. By default, this is inferred from the file extension.
|===
.Specifying the Asset Import reader
[example]
====
NOTE: As the Asset Import library handles many formats, some of which are also handled by other conversion methods, it currently must be explicitly called to invoke. The format itself is then inferred from the files extension.
....
$ gcv --input-format=assetimport input_file.ext output_file.ext
....
====
=== Open Asset Import Library Writer
The Open Asset Import Library (assimp) is an open source library integrated into GCV, capable of exporting to 15 different 3D file-formats.
.Conversion extensions supported by Asset Import Library writer
[cols="3*"]
[%noheader]
|===
|.3ds
|.fbx
|.pbrt
|.3mf
|.glb
|.ply
|.assbin (assetimport binary)
|.gltf
|.stl
|.assxml (assetimport xml)
|.json
|.stp
|.dae
|.obj
|.x3d
|===
.Asset Import Library writer options
[cols="2*"]
[%noheader]
|===
|`--format=_file_fmt_`
|Specify the file format for conversion. By default, this is inferred from the file extension.
|===
.Specifying the Asset Import writer
[example]
====
NOTE: As the Asset Import library handles many formats, some of which are also handled by other conversion methods, it currently must be explicitly called to invoke. The format itself is then inferred from the files extension.
....
$ gcv --output-format=assetimport input_file.ext output_file.ext
....
====
-620
View File
@@ -1,620 +0,0 @@
= GED: An Interactive Solid Modeling System
Michael J. Muuss <mulferts@austin.dsccc.com>; Keith A. Applin; J. Robert Suckling; Gary S. Moss; Earl P. Weaver; Charles A. Stanley
:doctype: article
:toc:
:toclevels: 3
[[Preface]]
== Preface
For many years the production and modification of target descriptions, no matter what method used, has been a slow, labor-intensive procedure. In an effort to improve the response time of target descriptions, the Ballistic Research Laboratory (BRL) has developed an interactive solid modeling system. This system is called the Graphics Editor (GED) and is designed to replace the traditional manual method of production and modification of target descriptions. GED presently applies to the combinatorial geometry (COMGEOM) solid modeling technique. Using GED, the target descriptions are interactively viewed, modified, and constructed with immediate visual feedback at each step. The GED system virtually eliminates explicit numerical input and opens a new dimension in the target description process.
[[INTRODUCTION]]
== INTRODUCTION
As the Army's lead laboratory for vulnerability technology, the Ballistic Research Laboratory (BRL) constantly performs vulnerability analyses for a wide variety of military systems. Vital to these vulnerability studies are three dimensional computer models of the physical characteristics of these systems. These computer models are generally called target descriptions. Since the mid 1960's, BRL has used a solid modeling technique called combinatorial geometry (COMGEOM) to model targets. The COMGEOM technique uses logic operations to combine basic geometric shapes or primitives to produce the three-dimensional target description. The COMGEOM target descriptions are processed by the Geometric Information For Targets
_(GIFT)\u1,2\d_
----
\u1\d Lawrence W. Bain, Mathew J. Reisinger, "The GIFT Code User Manual; Vol I,
Introduction and Input Requirements," BRL Report No. 1802, July 1975. (AD# B0060371)
----
----
\u2\d Gary G. Kuehl, Lawrence W. Bain, Mathew J. Reisinger, "The GIFT Code User
Manual; Vol II, the Output Options," ARRADCOM Technical Report No. ARBRL-TR-02189,
September 1979. (AD# A078364)
----
code for use in follow-on vulnerability assessment codes.
Target descriptions are basically large collections of numerical data which traditionally have been handled manually in a batch environment. Hence, the production and modification of target descriptions has been a slow, labor-intensive process. In 1980, BRL initiated an effort to improve the response time of the target description process by applying interactive computer graphics techniques. As a result of this work unit, BRL has developed the Graphics EDitor (GED), an interactive solid modeling system based on the COMGEOM technique. Using GED an analyst can view, build, and modify target descriptions interactively by manipulating the graphical representation, thus providing immediate visual feedback on a vector display device. The GED system is designed to replace the manual method of production and modification of target descriptions.
This report is intended to serve as a user manual for the GED system. The process of viewing and editing a description using GED is covered in detail. The internal data structure is also covered, as it is an important part in the overall design of the GED system.
[[COMGEOM_BACKGROUND]]
== COMGEOM BACKGROUND
Since the GED system is presently based on the COMGEOM solid modeling technique, a brief overview of the COMGEOM technique is required to effectively use GED. For more detailed information on the COMGEOM technique see references 1 and 2.
The COMGEOM technique utilizes two basic entities - a solid and a region. A solid is defined as one of fifteen basic geometric shapes or primitives. Table I contains a list of these fifteen solids. The individual parameters of each solid define the solid's location, size, and orientation. A region is a combination of one or more solids and is defined as the volume occupied by the resulting combination of solids. Solids are combined into regions using any of three logic operations: union(OR), intersection(+), or difference(-). The union of two solids is defined as the volume in either of the solids. The difference of two solids is defined as the volume of the first solid minus the volume of the second solid. The intersection of two solids is defined as the volume common to both solids. Figure 1 presents a graphical representation of these operations. Any number of solids may be combined to produce a region. As far as the COMGEOM technique is concerned, only a region can represent a component of the target. The solids are only building blocks to be combined into regions. Since regions represent the components of the target system, they are further identified by code numbers. These code numbers either identify the region as a target component (nonzero item code) or as air (nonzero air code). Any volume not defined as a region is assumed to be "universal air" and is given an air code of "01". If it is necessary to distinguish between universal "01" air and any other kind of air, then that volume must be defined as a region and given an air code other than "01". Normally, regions cannot occupy the same volume (overlap), but regions identified with air codes can overlap with any region identified as a component (i.e. one that has a nonzero item code). Regions identified with different air codes however, can not overlap.
[[COMPUTER_GRAPHICS]]
== COMPUTER GRAPHICS
Computer graphics is one of the fastest growing fields in the computer industry. Computer graphics has applications in many diverse areas, from electronic games to medicine, from cartoons to the space industry. Just what is interactive computer graphics and why is it so versatile? Human visual perception is quite keen and communications with a computer are generally faster and easier with images or displays rather than with numbers. Furthermore, by driving the display image with the computer, one can actually communicate with the computer through the display itself. This technology is called interactive computer graphics. The user converses with the computer through the display using devices such as light pens, data tablets, function switches, and control dials. The response of the computer is immediately reflected on the display. Thus a fast channel of communication is available between person and machine.
[[APPROACH_TO_THE_PROBLEM]]
== APPROACH TO THE PROBLEM
To speed up the model description process, a faster more efficient method of manipulating the large masses of data involved in a target description is needed. Interactive computer graphics seems to provide the capability of handling such data in an efficient, relatively fast manner. The key to the whole situation is SOFTWARE - the missing link between the target description problem and a possible solution.
In view of this fact, existing software graphics packages were evaluated with respect to their utility in the target description process. Quite an exhaustive search of commercially available systems was conducted and none were found which completely satisfied our requirements. A study was then initiated to examine the feasibility of producing the required graphics software in-house. The result of this study was a preliminary version of GED which, using existing hardware, quite convincingly demonstrated the feasibility of such an undertaking\u3\d.
----
\u3\d Michael John Muuss, Earl P. Weaver, "Interactive Construction of
COMGEOM Targets - A Feasibility Study", report to be published.
----
It was then decided to develop GED into a full production code and to acquire the hardware necessary for full implementation of the system. The production level GED code has been used since January 1982 to build target descriptions interactively at BRL.
[[GED_OVERVIEW]]
== GED OVERVIEW
The main function of the GED system is to edit target descriptions with immediate visual feedback. Hence, GED produces images both suitable for editing and capable of being displayed in real time. When an object is displayed, the solids combined to model the object are drawn. No attempt is made to produce edge representations of regions or to remove hidden lines. At the present, such an undertaking would take away from the "real time" displays now enjoyed.
The GED is a modular code written in the C programming language which presently runs under the BRL UNIX Networking System\u4\d.
----
\u4\d Michael John Muuss, "BRLNET - The Implementation of a
Multi-processor UNIX System", a final report of work done under ARO
Project Number 1127, August 27, 1980.
----
The workstations presently used are Vector General (VG) 3DI vector refresh systems driven by DEC PDP-11/34 or PDP-11/70 computers. Peripheral devices include a joystick, a pen and data tablet, function switches, and control dials. These peripheral devices and functions of each are discussed in later sections.
Overall control of GED is maintained via the keyboard. The keyboard commands perform general housekeeping functions and allow one to control what is displayed, create/modify combinations, list solid parameters, etc. The keyboard commands are discussed in a later section.
[[GED_INTERNAL_DATA_STRUCTURE]]
== GED INTERNAL DATA STRUCTURE
One of the critical aspects of a graphics software package is its internal data structure. Since the target description problem deals with such large volumes of data, the importance of the data structure here is emphasized. Thus it is felt that an introduction to the internal data structure of GED is important for any potential user.
The GED internal data structure is hierarchical in nature with each node or position in the hierarchy being occupied by an OBJECT. An OBJECT is the GED basic data unit and is defined as either a SOLID or a COMBINATION. A SOLID is one of the generalized COMGEOM primitive types while a COMBINATION is a group of objects. Each member object of a combination has a transformation associated with it. Any object not at the top of an hierarchy is referenced by (is a member of) a higher combination and each such reference has an associated transformation. The bottom object of every hierarchy path is a solid. This hierarchical data structure allows actual subsystems of a target to be grouped together and edited as a unit without worrying about individual parts. To display any object, each path in the object's hierarchy is traveled to its bottom position where a solid is located. The transformations are accumulated for each path traversed and then applied to the solid at the bottom of the path. The solid is then drawn. The hierarchy is traversed recursively until all objects are drawn. Let's use a high explosive projectile as an example. Figure 2 depicts the hierarchy involved. If one were to display the combination "heround", six solids would be drawn on the screen. Table II lists each solid name, the transformation applied to the solid's parameters, and the path used to reach the solid.
One very useful type of combination is the INSTANCE. An instance is a referral to an object (solid or combination) without the object itself being duplicated. To produce an instance of an object, a combination is created with the object being instanced as a member object. As with any other combination, this member has an associated transformation, hence it can be edited as a unit. The instance is most useful when an object appears many times in a description. The desired number of instances are made and positioned in the description. Any future changes in the object require that only the original (prototype) be changed. The modifications of the prototype object will then be automatically reflected in all the instances of that object.
[[KEYBOARD_COMMANDS]]
== KEYBOARD COMMANDS
To execute GED, one simply types "ged file", where "file" is the data file to be edited. The GED keyboard commands are used to maintain overall control of the system and to perform general housekeeping functions. Each command is invoked by entering a single character followed by other parameters (if necessary) separated by spaces. In most cases, the response on the screen will be the word "done" once the command is completed. This response is not printed for the commands where the results of the command are readily visible on the screen.
In the following pages, the GED keyboard commands will be presented and discussed. Examples will be given in appropriate cases. Table III, at the end of this section, presents a summary of the GED keyboard commands and the function of each.
*c oldsolid newsolid*
This command is used to produce and display a copy of a solid. In this case, the solid "oldsolid" will be copied into a solid called "newsolid". A new identical solid record is added to the data file. The solid parameters are copied as they appear in the solid record.
----
Examples: c arb8 hullbot.s
c arb8 turrettop.s
c tgc wheelrim.s
c tor tire1.s
----
*n old new*
This command is used to rename objects in the data file. In this case, the object "old" will be renamed "new". A note of caution: the name is changed only in the object record itself, not in any member records. Thus if the object "old" appears as a member of any other object, the name will not be changed there.
----
Examples: n test hull
n g00 air
n g1 turret
----
*Z*
This command clears (Zaps) the screen of all displayed objects.
*g group obj1 obj2 ..... objn*
This command creates or appends to a combination record and is used to group objects together either for editing or displaying purposes. In this case, "obj1" through "objn" are added as members to the combination "group". If "group" does not exist, it is created and "obj1" through "objn" are added as members.
----
Examples: g shell hull turret
g tank wheels engine crew shell
g tank track
r region op1 sol1 op2 sol2 .... opn soln
----
This command is used to create regions or append to regions. If "region" exists, then solids "sol1" through "soln" are added as members with "op1" through "opn" as the defining operations. If "region" does not exist, then it is created and solids "sol1" through "soln" are added as members with "op1" through "opn" as the defining operations. A region is merely a combination record with a flag set and is distinguished from other combinations (groups) since it has meaning to the COMGEOM solid modeling system.
When a region is created, the item and air codes are set equal to zero. To change the item and air codes use the "I" command. Note: In the past all members of a region had to be solids, but recently regions have been allowed as members of regions. Hence, the names "soli" can also be regions now.
----
Examples: r hulltop.r + hulltop.s - hullleft.s - hullright.s
r gun + gun.s - gunin.s
r gunair + gunin.s
----
*i object combname brname*
This command is used to make an instance of an object. An instance of an object is produced by creating a combination and making the object a member. In this case, an instance of "object" is made by creating the combination record "combname" (if "combname" does not already exist) and adding "object" as a member. This member also has a second name "brname" added to the member record, which can be thought of as the name of this branch in the hierarchical data structure. If "combname" already exists, then "object" is added as the next member and "brname" is added as the branch name.
An instance is used to refer to an object, without making actual copies of the object. Instances are useful when one is adding a certain component to a target description many times. Furthermore, any modifications to an object which has been instanced need only be done in the original (prototype) object. These modifications will then be automatically reflected in all the instances of the object.
----
Examples: i heround ammo he1
i heround ammo he2
i heat ammo heat1
i heat ammo heat2
----
*f face distance*
This command allows the user to project a face of an arb (arbitrary polyhedron) being edited a normal distance to create a new arb. The value of "face" is 4 digits such as 1256. If the face is projected in the wrong direction use a negative "distance". One use for this command is for producing armor plates of a desired thickness.
----
Examples: f 1234 20
f 2367 34.75
f 2367 -34.75
----
*l object*
This command is used to list information about objects in the data file. The information listed depends on what type of record "object" is. If "object" is a combination record, then the members are listed. If "object" is a solid record, then the GED general solid type and the parameters as presently in the data file are listed. Note: only the solid parameters as they exist in the solid record are listed, no transformation matrix is applied. Hence, if the solid was edited as a member of a combination, the "l" command will not reflect the editing in the listed parameters.
----
Examples: l hull
l turret
l turtop.s
l arb8
----
*mirror -[axis] oldsolid newsolid*
This command is used to create and display a new solid record which is the mirror image of an existing solid. The mirror image is about an axis and is created by changing the signs on the solid's parameters depending on which axis the solid is mirrored about. In this case, a mirror image of the solid "oldsolid" will created about the axis indicated by "axis" and the new solid record will be called "newsolid". The only acceptable values for the parameter "axis" are "x", "y", and "z".
----
Examples: mirror -y tur.left.s tur.right.s
mirror -z tur.top.s tur.bot.s
mirror -x tur.front.s tur.back.s
----
*p dx [dy] [dz]*
This command allows a user in the SOLID EDITING mode to input exact parameter modifications by the keyboard. The meaning of the values typed after the p command varies depending on what solid editing feature is being used. Examples of this command will be given in the discussion on solid editing.
*D comb mem1 mem2 .... memn*
This command allows one to delete members from a combination record. In this case, members "mem1" through "memn" will be deleted from the combination "comb".
----
Examples: D tank hull wheels
D region1 solid8 solid112
D turtop.r tursidel.s tursider.s turback.s
----
*I region item air*
This command allows one to change the item or air code numbers of a region. If the air code ("air") is not included, a zero is assumed. To change the air code, a zero item code should be used (see second example below).
----
Examples:
I region1 105
I region7 0 2
I region11 129 0
----
*e object*
This command is used to display (draw) objects on the screen. In this case, "object" will be displayed on the screen. Note that "object" must be found in the table of contents.
*d object*
This command is used to drop (delete) objects from the display. In this case, "object" will be deleted from the screen display. This command is opposite of the "e" command.
*k object*
This command is used to remove (kill) objects from the data file. In this case, "object" will be removed from the data file. Note the distinction between the "d" command which deletes objects from the display and the "k" command which removes objects from the data file.
*t*
This command produces a list of the table of contents of all objects in the data file. The objects are listed a screenfull at a time. A carriage return will produce the next screenfull.
*a arbname rot fb*
This command is used to create and display a new arb8 solid record. This new arb8 has two square (5 units x 5 units) parallel faces which are 0.5 units apart. These parallel faces are in planes whose orientations are defined by the two input angles - the rotation (rot) angle and the fallback (fb) angle. The orientation of armor plates are frequently defined using rotation and fallback angles. The vertex of this new arb8 is located in the center of the screen.
----
Examples: a hullsec3.s 45 30
a tursec2.s 90 20
a topglacis.s 0 60
----
*x*
This command is the display debug command. It will produce a list of all objects that have been displayed , the paths traversed to draw the objects, and whether or not the objects are displayed in the present view.
*q*
This command is used to quit the graphics editor code. This is the normal halt.
[[PERIPHERAL_DEVICES]]
== PERIPHERAL DEVICES
Before we discuss the features of GED, we will introduce the hardware devices used to implement them. These devices are the "tools of the trade" for the GED user. We will discuss only basic operational characteristics here. Specific use of these devices will be covered in the later sections on the viewing and editing features of GED.
The JOYSTICK is a mechanical device used to do the rotations in GED. Any movement of the stick left or right rotates the display about the x-axis. Any movement of the stick up or down rotates the display about the y-axis. When the joystick is twisted in a clockwise or counterclockwise direction, the display rotates about the z-axis. Any combination motion of the stick will produce a "combined" rotation about the appropriate axes. All of these motions have a spring return to a null center position.
The FUNCTION SWITCH box contains thirty-two buttons. When any of the buttons is pressed, an action occurs or condition is set. Figure 3 depicts the functions programmed for each button. The buttons in the shaded area are used for editing while the rest are used for viewing the display. The exact functions assigned to these buttons will be discussed in the sections on viewing the display and on editing.
The CONTROL DIALS (knobs) are used to send digital information to the computer. As a knob is turned, a succession of numbers are available for use by the computer. Figure 4 depicts the functions assigned to each of the ten knobs. The exact functions of each of these knobs will be discussed in the angle distance cursor section and in the viewing features section.
The DATA TABLET is a graphics input device containing an X-Y coordinate grid which corresponds to the grid on the screen. Information is entered using a pen-like stylus. The distance this pen is from the tablet is important. If the pen tip is within one half inch of the tablet surface, the cursor location on the screen corresponds to the X,Y location of the pen on the tablet. This condition is called the "near" position. If the pen is more than one half inch from the tablet surface, the cursor remains located in the center of the screen. When the pen is pressed against the tablet surface, the pressure switch is activated and a bit is set which is a signal used by GED. The exact meaning of the pen near and pen press depends on what is being done and will be covered in the appropriate sections of this report.
[[ANGLE_DISTANCE_CURSOR]]
== ANGLE DISTANCE CURSOR (ADC)
The angle distance cursor is a construction aid used to measure angles and distances. It should be noted that all measurements are made in the projected space of the screen, so one should measure only in a view normal to the surface where the measurement is to take place. The ADC is placed on (or removed from) the display by pushing the "ADC" function switch button (see Figure 3). The ADC consists of three cursors which cover the entire screen. Figure 5 depicts the ADC as it appears on the screen. All the cursors are centered at the same point and can be moved to any location on the screen. Two of these cursors rotate for angle measuring purposes. Angle cursor 1 is solid while angle cursor 2 is dashed. Angle cursor 1 has movable tic marks for measuring distances on the screen. The two angle cursors move with the horizontal and vertical lines of the main cursor. The resulting effect is the moving of the center point horizontally or vertically. The ADC is controlled by the bottom row of the control dial knobs (see Figure 4) :
----
Knob 6 moves the center in the horizontal direction
Knob 7 moves the center in the vertical direction
Knob 8 rotates angle cursor 1 (alpha)
Knob 9 rotates angle cursor 2 (beta)
Knob 10 moves the tic marks
----
Whenever the ADC is on the screen, there is a readout at the bottom of the screen listing pertinent information about the ADC. This information includes the angles that angle cursors 1 and 2 have been rotated (alpha and beta), the distance the tic marks are from the center of the ADC, and the location of the center of the ADC. This information is continually updated on the screen.
[[VIEWING_FUNCTIONS]]
== VIEWING FUNCTIONS
The GED viewing features are designed to allow one to examine a target description in close detail. Any of the viewing features can be invoked at any time. It should be noted, that these functions do not change the actual data, only the way these data are displayed.
Six standard views (front, rear, top, bottom, left, and right) and one oblique view (azimuth 35, elevation 25) are each assigned to the function buttons (see Figure 3). Hence, any of these views is immediately available at the press of the appropriate function button. The views available are not limited to these standard views however, as the display can be rotated to any view by using the joystick. By pressing the function button labeled "save view" (see Figure 3), the present viewing aspect angle of the display is saved. At any time, the saved view can be immediately returned to the screen by pressing the "restore view" function button (see Figure 3). The "restore view" button will be lit whenever a view has been saved. The function button labeled "reset" (see Figure 3), restores the display to the default view (front) when pressed.
The display can be panned or slewed on the screen in two ways - using the data tablet and pen or by using the control knobs. When one is editing, the tablet and pen are not available for slewing, hence one must use the control knobs to slew the display. If one is NOT editing, then whenever the pen is pressed, the display moves in the direction of an imaginary vector drawn from the center of the screen to the cursor location on the screen. Recall that there is a one-to-one correspondence between the pen location and the cursor location. The longer this vector, the faster the display will move. To slew the display using the control knobs, one uses the knobs labeled "slew x" or "slew y" (see Figure 4). The null positions on these knobs is in the center or straight up. If the "slew x" knob is turned clockwise of center, the display will move to the right. If it is turned counterclockwise, the display will move to the left. For the "slew y" control knob, clockwise of the center moves the display up and counterclockwise moves the display down. The further these knobs are turned from center, the faster the display moves.
One can zoom the display by using the control knob labeled "zoom" (see Figure 4). Again the null position of this knob is center or straight up. Turning this knob clockwise of center causes the display to increase in size producing a zoom-in effect. Turning this knob counterclockwise of center causes the display to decrease in size or zoom-out. Again, the further the "zoom" knob is turned from center, the faster the zooming will occur.
The viewing features of GED also include a slice mode. To invoke the slice feature, one presses the "slice mode" function button (see Figure 3). An imaginary slicing plane, parallel to the screen, can then be moved about by turning the first control knob (see Figure 4). Turning this knob clockwise moves the imaginary plane into the screen and counterclockwise moves the plane out of the screen. All portions of the display in front of the plane are eliminated from the display. The result of moving this plane into the screen is a slicing effect with the parts of the display closest disappearing first. To leave the slice mode, just press the "slice mode" button again.
[[SELECTING_OBJECTS_FOR_EDITING]]
== SELECTING OBJECTS FOR EDITING
Before we discuss the editing features of GED, we will discuss how one selects objects for editing. To be edited, an object must be displayed on the screen. Since the object to be edited may be only a small portion of the display, a procedure is needed to select an object from the many objects being displayed. This procedure relies on the hierarchical structure of the GED data base. As stated before, when objects are displayed, every path of every object is traversed and the bottom object, which is always a solid, is drawn. Hence one can think of each solid drawn not as one solid, but as the unique path used to reach that solid. As an example, the six paths (solids) for the sample object "heround" were presented in Table II.
To select an object for editing, one first must enter the illuminate mode by pressing the function button labeled "illuminate" (see Figure 3). The data tablet and pen are then used to select the object. The surface of the data tablet is divided into imaginary horizontal strips. Each of these strips corresponds to a path (solid) drawn on the screen. For example, if the sample "heround" were displayed, the tablet surface would be divided into six horizontal strips. The pen is used in the "near" mode (within one half inch of tablet surface) to illuminate the paths. The path corresponding to the pen location is written in the upper right hand corner of the screen. The solid at the bottom of this path is illuminated (drawn brighter) on the screen. In this manner one can "scan" the complete display by simply moving the pen up and down the tablet in the near mode. Hence, the illuminate mode is also quite useful just to identify objects in a description. However, the primary purpose of the illumination mode is to select objects for editing.
The actual selecting of an object for editing is a two-step process. First, one selects the path desired, then one selects the particular object of interest from that path. One "selects" by pressing the pen on the tablet surface. When a path is selected, the word PATH followed by the members of that path is written in the upper right of the screen. At that point, one is ready to select a specific member (object) from that path for editing. Again, the tablet is used for this selection. The tablet surface is now divided into as many rows (zones) as there are members in the selected path. When the pen, in the near mode, is in a path member's assigned zone on the tablet, that member's name will be illuminated in the path listing. When the specific member to be edited is illuminated, it is selected by pressing the pen. The word EDIT will now appear in the upper right of the screen ahead of the path listing. One is now ready to edit this selected object.
The only way out of the EDIT mode is to accept or reject any editing performed. This is done by pressing the function buttons labeled "accept" or "reject" (see Figure 3). If at any time in the selection process an incorrect object is selected, just press the "reject" button and begin the selection process again.
[[OBJECT_EDITING]]
== OBJECT EDITING
The heart of the GED system is its editing features. The editing features are divided into two classes: object editing and solid editing. Object editing is designed to allow one to change the location, size, and orientation of an object. Recall that an object is defined as the basic data unit of the GED system and includes both combinations and solids. In the case of a solid, one needs to change not only its location, size, and orientation, but also its "shape". Changing the shape of a solid means changing any of its individual parameters. Hence, solid editing is handled separately.
Any object in the data file may be selected for object editing. The object is picked using the object selection procedure discussed earlier. Recall that in the GED data structure, all members of combinations have transformation matrices associated with them, allowing assemblies to be edited as units. Object editing is the vehicle for performing such tasks. All object editing is done using homogeneous transformation matrices. When the editing is accepted, new transformation matrices are created in all appropriate member locations. If the object happens to be a single-member path (solid) then the matrix is applied to the solid's parameters. Otherwise, all object editing is stored in transformation matrices in the data base.
Once an object is selected for editing, the second row of function buttons (see Figure 3) is used to select the editing to be done. Then either the data tablet and pen or the joystick are used to perform the actual editing.
To SCALE a selected object, one first presses the function button labeled "scale object". The data tablet and pen are then used to scale the object. The object is scaled about the target origin, thus unless the object is centered at the origin, some translation of the object will occur. The location of the pen on the tablet when pressed determines the scale factor used. If the pen is above the center of the screen, the scale factor will be greater than one. The further the pen is located above the center, the larger the scale factor. Likewise, if the pen is located below the vertical center, the scale factor will be less than one and the further below the center, the smaller the scale factor. As long as the pen is pressed, the object will continue to increase or decrease in size.
To ROTATE a selected object, one first presses the function button labeled "rotate object". The joystick is then used to rotate the object. The object is rotated about the center of the view (screen). If one wishes to rotate the object about another point of interest, the entire display can be slewed until the desired point is positioned at the center of the screen.
To TRANSLATE a selected object, one has three function buttons from which to select (see Figure 3). The data tablet and pen are then used to translate the object. The center of the object "follows" the pen (cursor) location whenever the pen is pressed. The three function buttons define the direction allowed for movement of the object. The button labeled with a horizontal arrow (<--->), allows the object to follow only the horizontal location of the pen. The vertical location of the object does not change. The function button labeled with a vertical arrow ( ), allows the object to follow only the vertical location of the pen. The horizontal location of the object does not change. The function labeled with crossed arrows (<--->) allows the object to follow the X,Y location of the pen.
The object editing features can be invoked in any order and at any time once an object has been selected for editing. During object editing, any of the viewing features, such as changing views, zooming, and slewing, can be used and in fact are usually quite useful. Again, the only way to exit the object editing mode is to accept or reject the editing. If the "reject" button is pressed, the object will return to its pre-edit state. If the "accept" button is pressed, the data base will be changed to reflect the object editing performed.
[[SOLID_EDITING]]
== SOLID EDITING
The solid editing feature allows the user to interactively translate, rotate, scale, and modify individual parameters of a solid. Whenever one is in the solid edit mode, the parameters of the solid being edited are listed and continually updated at the bottom of the screen. Certain parameters are also labeled on the solid being edited. Solid editing is generally used to "build" objects by producing solids of the desired shape and size in the correct orientation and position. Once the object is built, object editing is used to scale, orient, and position the object in the description. The general philosophy of solid editing is to first create a copy of a prototype solid with the desired name and then to edit this solid. The prototype solids should not be edited. As an example, suppose one were to build the sample object "heround" mentioned earlier. To produce the base of the shell, one would need a cylindrical shaped solid. The prototype solid is the TGC (see Table I), so one would type:
*c tgc shellcase.s*
A new solid record called shellcase.s would be created and displayed on the screen. This shellcase.s solid would then be edited using solid editing to produce the exact solid parameters desired. The solid record tgc would be unchanged and available for copying the next time a cylindrical solid is needed.
The procedure for solid editing is quite similar to that for object editing. First, the solid must be selected for editing. A solid is selected for editing using the illuminate mode, just as in object editing, except a solid must be selected. Recall that the bottom object in every hierarchy path is a solid. Second, one must push the function button labeled "solid edit" (see Figure 3). This button sets up the solid edit mode: the solid parameters are listed at the bottom of the screen, pertinent solid parameters are labeled on the display, the solid editing function buttons are activated, and a menu header depending on the solid type is written on the right side of the screen. The meaning of the menu will be discussed shortly. Third, one selects (by pressing the appropriate function buttons) and performs the editing desired. Finally, one exits the solid editing mode by accepting or rejecting the editing performed, just as in object editing.
Recall, in the section on object editing it was mentioned that since a solid is indeed an object, a solid can be edited (translated, rotated, and scaled) as an object. Hence, the solid editing mode is really only necessary to perform parameter modifications. However, much of the object editing is done about the target or screen center, which can be annoying when editing a solid. Also, precise parameter modifications are possible (using the "p" keyboard command) in solid editing. Thus it was deemed desirable to include translation, rotation, and scaling in solid editing also.
Solid TRANSLATION allows the user to place the solid being edited anywhere in the description. To invoke this option, one presses the function button labeled "solid trans" (see Figure 3). To move the solid, use the data tablet and pen. Whenever the pen is pressed, the VERTEX of the solid moves to that location on the screen. One can read the actual coordinates of the vertex on the bottom of the screen, along with the other parameters. If the actual desired coordinates of the vertex are known, one can place the solid exactly using the "p" keyboard command. For example, to place a solid's vertex at the coordinates (x, y, z) one would type
*p x y z*
The solid would then jump to this location.
The solid SCALE feature allows the user to scale the solid being edited to any desirable size. The scaling is done about the vertex of the solid, hence NO translation of the solid occurs. The scaling is performed using the data tablet and pen, just as in object scaling. One can input an exact scale factor using the "p" keyboard command. For example, typing
*p factor*
will scale the solid by an amount equal to "factor". The value of "factor" is absolute - the original solid is scaled. The size of the original solid is defined when the "solid scale" function button is pressed. By setting "factor" equal to one, the original size solid will be displayed on the screen.
Solid ROTATION allows the user to rotate the solid being edited to any desired orientation. The rotation is performed about the vertex of the solid. To select this option, one presses the function button labeled "solid rotate" (see Figure 3). The actual rotation is done using the joystick. One can input exact angles to rotate the solid by using the "p" keyboard command. For example, typing
*p alpha beta gamma*
will rotate the solid "alpha" degrees about the x-axis, "beta" degrees about the y-axis, and "gamma" degrees about the z-axis. Alpha, beta, and gamma are measured from the original "zero" orientation of the solid, defined when the "solid edit" function button was pressed. Hence, typing
*p 0 0 0*
will always return the solid to its original position (its position when the current solid editing session began).
The PARAMETER editing feature allows the user to modify any of the parameters which comprise the selected solid. To invoke this feature, one presses the function button labeled "menu" (see Figure 3). A menu (listing) of parameters to edit will then appear on the right side of the screen under the menu header. The contents of this menu of course depend on the type of solid being edited. To select an item (parameter) from this menu, one uses the data tablet and pen. The immediate region (strip) surrounding each item of the menu "belongs" to that item. Whenever the pen is in one of these regions, that menu item will get brighter in the menu listing on the screen. A menu item is picked by pressing the pen when that item name is illuminated. It should be noted that whenever the pen is in the "menu area", the code assumes the user is attempting to pick a menu item. Hence, the menu area of the screen (the far right edge) can NOT be used by the pen for editing while the menu is on the screen.
For parameter editing, the solid type determines the menu items. The GED code recognizes four general solid types for parameter editing. All the specific solid types which fall into one of these general classes are treated as the general type. For example, all the cylindrical solid types are treated as the general type - the TGC. In the following paragraphs, we will discuss parameter editing for each of these general types of solids.
[[ARB_PARAMETER_EDITING]]
=== ARB PARAMETER EDITING
The GENERAL ARB class of solids represents all the convex polyhedrons (RPP, BOX, RAW, and ARBs). The ARBs comprise five classes of polyhedrons each with a characteristic number of vertices. These are the ARB8, ARB7, ARB6, ARB5, and ARB4, where the ARB8 has eight vertices, etc. GED handles all these ARBs as ARB8s, but with some vertices equal. All the eight vertices of the GENERAL ARB are labeled on the screen, although in certain cases (RAW,ARB7,ARB6,ARB5,ARB4) some vertices will be equal. Figure 6 depicts typical ARBs as they would be displayed and labeled during solid editing.
To edit the ARB vertices, EDGES are moved. Hence, the GENERAL ARB menu is a list of edges to move:
----
GENERAL ARB MENU
move edge 12
move edge 23
move edge 34
move edge 14
move edge 15
move edge 26
move edge 56
move edge 67
move edge 78
move edge 58
move edge 37
move edge 48
----
The edge to be moved is selected from this menu and is then moved using the data tablet and pen. When the pen is pressed, the line containing the selected edge is moved so it goes through the pen location and is parallel to the original edge. The endpoints of the new edge are then calculated to remain in the "bounding" planes of that edge. In the case of the ARB8, for example, the bounding planes for edge 58 are planes 4378 and 1265 (see Figure 6).
The information printed on the bottom of the screen is the x, y, z coordinates of the eight vertices:
----
vertex coordinates
1,2 x1 y1 z1 x2 y2 y3
3,4 x3 y3 z3 x4 y4 z4
5,6 x5 y5 z5 x6 y6 z6
7,8 x7 y7 z7 x8 y8 z8
----
These values are continually updated during solid editing.
The user can force the line containing an edge through any point using the "p" keyboard command. Hence typing
*p x y z*
will force the line containing the edge being edited to pass through the point (x, y, z). No check is made for concave ARBs or for ARBs with crossed edges. Visual feedback from the display is considered adequate to detect these situations.
[[TGC_PARAMETER_EDITING]]
=== TGC PARAMETER EDITING
The TGC general class of solids includes all the cylindrical COMGEOM solids. The defining parameters of the TGC are two base vectors (A and B), a height vector (H), two top vectors (C and D), and the vertex (V). Reference 1 contains more information on these parameters. The top vectors C and D are directed the same as the base vectors A and B respectively, hence the top vectors are defined only by their lengths (c and d). Figure 7 depicts these parameters on typical TGCs. When a TGC is edited in the solid editing mode, only vectors A and B are labeled on the display.
All the vectors (A,B,C,D,H) of the TGC can be scaled during parameter editing. In addition, the height vector (H) and the base (AxB) can be rotated. These parameter editing options are reflected in the TGC menu:
----
TGC MENU
scale H
scale A
scale B
scale c
scale d
rotate H
rotate AxB
----
The scaling of the lengths of the vectors is done using the data tablet and pen in the same manner as object editing. Exact vector lengths can be achieved easily using the "p" keyboard command. If one is scaling a vector, then typing
*p x*
will make the vector being scaled have a length equal to "x".
To rotate vector H or surface AxB, one uses the joystick. Since vectors C and D have the same direction as vectors A and B respectively, the top and bottom surfaces of the TGC will remain parallel. Hence rotating the base surface (AxB) will also rotate the top surface. The "p" keyboard command is not used with the parameter rotation of the TGC.
During solid editing, the parameters of the TGC are constantly updated on the bottom of the screen:
----
V x y z
H x y z |H| a b g rot fb
A x y z |A|
B x y z |B|
c |c|
d |d|
----
_AxB a b g rot fb_
where "a", "b", "g" are the direction cosines and "rot" and "fb" are the rotation and fallback angles of the listed vector.
[[ELLG_PARAMETER_EDITING]]
=== ELLG PARAMETER EDITING
The ELLG general class represents all the ellipsoidal solids, including spheres and ellipsoids of revolution. The defining parameters of the ELLG are three mutually perpendicular vectors (A, B, and C) and the vertex (V). Reference 1 contains a more complete definition of these parameters. Figure 8 depicts typical ELLGs with these parameters labeled. When an ELLG is being edited, only vectors A and B are labeled on the display.
The parameter editing of the ELLG consists of scaling the lengths of the vectors A, B, C. These parameter editing options are listed in the menu:
----
ELLG MENU
scale A
scale B
scale C
----
The scaling of these vectors is done using the data tablet and pen in exactly the same manner as in object scaling. The "p" keyboard command again can be used to produce a vector of desired length.
The parameters of the ELLG are continually updated on the bottom of the screen during solid editing:
----
V x y z
A x y z |A| a b g rot fb
B x y z |B| a b g rot fb
C x y z |C| a b g rot fb
----
where "a", "b", "g" are the direction cosines and "rot" and "fb" are the rotation and fallback angles of the listed vector.
[[TOR_PARAMETER_EDITING]]
=== TOR PARAMETER EDITING
The TOR general class of solids contains only one type of torus, one with circular cross-sections. The defining parameters of the TOR are two radii (r1 and r2), a normal vector (N), and the vertex (V). The scalar r1 is the distance from the vertex to the midpoint of the circular cross section. The scalar r2 is the radius of the circular cross-section. The vector N is used to orient the torus. Reference 1 contains a more detailed definition of these parameters. Figure 9 depicts these parameters. During solid editing, none of these parameters are labeled on the screen.
The parameter editing of the TOR consists of scaling the radii, hence the menu contains only two members:
----
TORUS MENU
scale radius 1
scale radius 2
----
As before, the scaling of these radii are done using the data tablet and pen and the "p" keyboard command can be used to produce a radius of any desired length.
The parameters of the TOR are continually updated on the bottom of the screen during solid editing:
----
V x y z
r1 |r1|
r2 |r2|
N x y z a b g rot fb
----
where "a", "b", "g" are the direction cosines and "rot" and "fb" are the rotation and fallback angles of the vector N.
Table IV presents a summary of parameter editing for each of the general solid classes.
[[CONCLUSION]]
== CONCLUSION
BRL has developed the Army's first interactive solid modeling system, called GED. GED performs two basic functions: viewing and editing. The standard viewing capabilities of zooming, slewing, slicing, and rotation are available. Likewise, all the standard editing features are also available. The user easily traverses the hierarchical data structure, applying the editing functions of rotation, translation, and scaling to any position in the hierarchy. The hierarchical structure can be modified and regrouped and regions created and modified. Specific parameter editing can also be applied to the solids to produce any shape solid desired. GED has made great gains in reducing the bottleneck the target description process has been creating in the vulnerability process at BRL.
-19
View File
@@ -1,19 +0,0 @@
set(articles_HY about_hy.adoc)
if(TARGET mged OR TARGET qged OR TARGET archer)
if(BRLCAD_EXTRADOCS)
add_asciidoc("HTML" articles_HY articles/hy articles_EN_IMAGES_cp)
endif(BRLCAD_EXTRADOCS)
endif(TARGET mged OR TARGET qged OR TARGET archer)
cmakefiles(
CMakeLists.txt
${articles_HY}
)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
-25
View File
@@ -1,25 +0,0 @@
= Օգտվողի մասին BRL-CAD
Christopher Sean Morrison <devs@brlcad.org>; Karen Mgebrova
:doctype: article
:toc:
:toclevels: 3
[[article-body]]
BRL-CAD հզոր խաչաձեւ հարթակի Open Source համակցական կառուցողական Պինդ Geometry (CSG) մոդելավորման ամուր համակարգ, որը ներառում է ինտերակտիվ 3D ամուր երկրաչափություն խմբագրում, բարձր կատարողական ճառագայթների-հետեւել աջակցություն ցուցաբերելու եւ երկրաչափական վերլուծություն, ցանցային բաշխված framebuffer աջակցություն, պատկերի եւ ազդանշանի մշակման գործիքների ուղին, տեղանքի պլանը գծելը եւ պրոտոնների քարտեզագրման աջակցություն իրական պատկերի սինթեզ է, որ համակարգի կատարողականի վերլուծությունը ելակետային Suite է, ներդրված scripting ինտերֆեյսի եւ գրադարանների համար առողջ արագագործ երկրաչափական ներկայացուցչության եւ վերլուծություն:
Ավելի քան 20 տարի, BRL-CAD եղել է հիմնական tri ծառայության ամուր մոդելավորում CAD համակարգի կողմից օգտագործվում է ԱՄՆ ռազմական եւ մոդելի զենք համակարգեր Խոցելիության եւ lethality վերլուծություններ: Կոշտ մոդելավորում համակարգը հաճախ օգտագործվում է մի շարք ռազմական, գիտական ​​եւ արդյունաբերական կիրառություններ այդ թվում `նախագծման եւ վերլուծություն տրանսպորտային միջոցների, մեխանիկական մասերի, եւ ճարտարապետությունը. Փաթեթը է նաեւ օգտագործվել ճառագայթման դոզան պլանավորման, բժշկական արտացոլման, համակարգչային գրաֆիկայի կրթության, CSG հայեցակարգերի եւ մոդելավորման կրթության եւ համակարգի կատարողականի ելակետային փորձարկման ի թիվս այլ նպատակների համար.
BRL-CAD աջակցում է մեծ տեսականի, այդ թվում `երկրաչափական ներկայացուցչությունների լայն շարք ավանդական CSG պարզունակ անուղղակի չոր, ինչպիսիք են տներ, ellipsoids, cones, եւ tori, ինչպես նաեւ բացահայտ չոր պատրաստված փակ հավաքածուներից միասնական B-Spline մակերեսներին, ոչ Uniform բանական B-Spline (NURBS) մակերեսների, N-Ջրաբաշխիչ Geometry (NMG), եւ զուտ faceted ցանց երկրաչափություն. Բոլոր երկրաչափական օբյեկտները կարող են համատեղվել օգտագործում են Բուլյան սահմանված-տեսական CSG գործողությունների, այդ թվում միության, խաչմերուկում, եւ տարբերությունը.
BRL-CAD եղել են ակտիվ զարգացման հետ դյուրատարություն ժառանգություն, որը ներառում է այնպիսի համակարգերը, որպես Դեկտեմբեր VAX-11/780 անընդմեջ 4.3 BSD, DECStations վազում ULTRIX, Սիլիկոնային գրաֆիկա 3030, 4D «Իրիս», O2, օնիքս, եւ ծագման համակարգերի վազում տարբեր տարբերակները IRIX, Sun Microsystems Sun, 3 – րդ եւ Sun-4 Sparcs վազում SunOS է, Cray 1, Cray X-պատգամավոր, Cray Y-պատգամավոր, եւ Cray 2 վազում UNICOS, Դեկտեմբեր Alpha AXP վազում OSF / 1, Apple Macintosh II վարման A / UX; iPSC/860 Hypercube վազում NX / 2, իսկ արտարժութային Alliant / 8, FX/80, եւ FX/2800. Gould / Encore sel PowerNode6000/9000 եւ NP1, ՀԱՋՈՐԴ workstations, IBM RS/6000, HPPA 9000/700 վազում HPUX, վառ / Stardent, Encore Multi-Max եւ շատ ավելին.
BRL-CAD մի հավաքածու է ավելի քան 400 գործիքներ, կոմունալ ծառայությունների, եւ ծրագրեր կազմող ավելի քան մեկ միլիոն գծերը կոդով.Փաթեթը, որը դիտավորյալ նախատեսված է լայնորեն խաչաձեւ պլատֆորմը, եւ ակտիվորեն զարգանում են եւ պահպանվում են ընդհանուր օպերացիոն համակարգ միջավայրում այդ թվում `BSD, Linux, Solaris, Mac OS X, եւ Windows եւ այլն: BRL-CAD, որը բաժանվում է երկուական եւ կոդով ձեւը, ինչպես նաեւ անվճար բաց կոդով ծրագրային ապահովում (FOSS), նախատեսված Open Source նախաձեռնություն (OSI) կողմից լիցենզիայի պայմանները:
[NOTE]
====
Mike Muuss սկսեց սկզբնական ճարտարապետության եւ նախագծման BRL-CAD դեռեւս 1979 թ. Մշակում, որպես միասնական փաթեթի սկսվել է 1983 թ. Առաջին հրապարակային թողարկումն իրականացվել է 1984 թ. BRL-CAD դարձավ բաց կոդով նախագիծ է 21 դեկտեմբերի 2004 թ.
====
Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 388 KiB

Some files were not shown because too many files have changed in this diff Show More