Compare commits
1
Commits
pgo
..
gedplugins
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
471675f1ab |
@@ -1,2 +0,0 @@
|
||||
# Try to tell GitHub how to handle .asc files
|
||||
*.asc linguist-language=Tcl
|
||||
@@ -1,260 +0,0 @@
|
||||
name: Prepare bext dependencies
|
||||
description: Restore a compatible bext production artifact or build the pinned revision.
|
||||
|
||||
inputs:
|
||||
platform-channel:
|
||||
description: Published bext platform channel.
|
||||
required: true
|
||||
source-dir:
|
||||
description: Absolute path to the BRL-CAD source tree.
|
||||
required: true
|
||||
output-dir:
|
||||
description: Absolute path where the bext dependency tree will be prepared.
|
||||
required: true
|
||||
build-type:
|
||||
description: BRL-CAD build configuration that will consume the dependency tree.
|
||||
required: false
|
||||
default: Release
|
||||
artifact-token:
|
||||
description: Token with Actions read access to BRL-CAD/bext.
|
||||
required: false
|
||||
|
||||
outputs:
|
||||
bext-sha:
|
||||
description: The bext revision in the prepared dependency tree.
|
||||
value: ${{ steps.result.outputs.bext-sha }}
|
||||
source:
|
||||
description: Whether preparation used a production artifact, cache, or local build.
|
||||
value: ${{ steps.result.outputs.source }}
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Resolve bext production artifact
|
||||
id: resolve
|
||||
shell: bash
|
||||
env:
|
||||
BEXT_BUILD_TYPE: ${{ inputs.build-type }}
|
||||
BEXT_CHANNEL: ${{ inputs.platform-channel }}
|
||||
BRLCAD_SOURCE_DIR: ${{ inputs.source-dir }}
|
||||
GH_TOKEN: ${{ inputs.artifact-token }}
|
||||
run: |
|
||||
set -uo pipefail
|
||||
source_dir="$BRLCAD_SOURCE_DIR"
|
||||
if command -v cygpath >/dev/null 2>&1; then
|
||||
source_dir="$(cygpath -u "$source_dir")"
|
||||
fi
|
||||
required_sha="$(awk -F'[()]' '/^[[:space:]]*brlcad_bext_init\([0-9a-fA-F]{40}\)/ { print tolower($2) }' "$source_dir/CMakeLists.txt")"
|
||||
if [[ ! "$required_sha" =~ ^[0-9a-f]{40}$ ]]; then
|
||||
echo "Expected exactly one brlcad_bext_init(<sha>) call in $source_dir/CMakeLists.txt" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
repository='BRL-CAD/bext'
|
||||
marker_name="bext-production-$required_sha"
|
||||
marker_info="$(gh api "repos/$repository/actions/artifacts?name=$marker_name&per_page=100" \
|
||||
--jq '[.artifacts[] | select(.expired == false and .name == "'"$marker_name"'")] | sort_by(.created_at) | last | select(. != null) | [.name, .workflow_run.id] | @tsv' 2>/dev/null)" || marker_info=''
|
||||
|
||||
selected_sha=''
|
||||
run_id=''
|
||||
if [[ -n "$marker_info" ]]; then
|
||||
selected_sha="$required_sha"
|
||||
IFS=$'\t' read -r _ run_id <<< "$marker_info"
|
||||
echo "Found complete bext production artifacts for pinned revision $required_sha."
|
||||
else
|
||||
marker_info="$(gh api "repos/$repository/actions/artifacts?per_page=100" \
|
||||
--jq '[.artifacts[] | select(.expired == false and (.name | test("^bext-production-[0-9a-f]{40}$")))] | sort_by(.created_at) | last | select(. != null) | [.name, .workflow_run.id] | @tsv' 2>/dev/null)" || marker_info=''
|
||||
if [[ -n "$marker_info" ]]; then
|
||||
IFS=$'\t' read -r latest_marker run_id <<< "$marker_info"
|
||||
selected_sha="${latest_marker#bext-production-}"
|
||||
comparison="$(gh api "repos/$repository/compare/$required_sha...$selected_sha" --jq '.status' 2>/dev/null)" || comparison=''
|
||||
if [[ "$comparison" == 'ahead' || "$comparison" == 'identical' ]]; then
|
||||
echo "::warning::Using newer successful bext revision $selected_sha instead of BRL-CAD's pinned revision $required_sha."
|
||||
else
|
||||
selected_sha=''
|
||||
run_id=''
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
artifact_ready=false
|
||||
artifact_name=''
|
||||
if [[ "$RUNNER_OS" == 'Windows' && "$BEXT_BUILD_TYPE" == 'Debug' ]]; then
|
||||
echo 'Windows Debug requires a Debug bext build; skipping Release production artifacts.'
|
||||
selected_sha=''
|
||||
run_id=''
|
||||
elif [[ -n "$selected_sha" ]]; then
|
||||
artifact_name="bext-$BEXT_CHANNEL-$selected_sha"
|
||||
artifact_count="$(gh api "repos/$repository/actions/runs/$run_id/artifacts?name=$artifact_name&per_page=100" \
|
||||
--jq '[.artifacts[] | select(.expired == false and .name == "'"$artifact_name"'")] | length' 2>/dev/null)" || artifact_count=0
|
||||
if [[ "$artifact_count" == '1' ]]; then
|
||||
artifact_ready=true
|
||||
else
|
||||
selected_sha=''
|
||||
run_id=''
|
||||
artifact_name=''
|
||||
fi
|
||||
fi
|
||||
|
||||
cache_schema=1
|
||||
image_version="${ImageVersion:-unknown}"
|
||||
runner_arch="${RUNNER_ARCH:-unknown}"
|
||||
fallback_cache_key="bext-$cache_schema-$BEXT_CHANNEL-$BEXT_BUILD_TYPE-$required_sha-$image_version-$runner_arch"
|
||||
production_cache_key="bext-$cache_schema-$BEXT_CHANNEL-Release-$selected_sha"
|
||||
if [[ "$artifact_ready" != 'true' ]]; then
|
||||
echo "No compatible production artifact is available; using the cache/build fallback for $required_sha."
|
||||
fi
|
||||
|
||||
echo "required-sha=$required_sha" >> "$GITHUB_OUTPUT"
|
||||
echo "selected-sha=$selected_sha" >> "$GITHUB_OUTPUT"
|
||||
echo "run-id=$run_id" >> "$GITHUB_OUTPUT"
|
||||
echo "artifact-name=$artifact_name" >> "$GITHUB_OUTPUT"
|
||||
echo "artifact-ready=$artifact_ready" >> "$GITHUB_OUTPUT"
|
||||
echo "production-cache-key=$production_cache_key" >> "$GITHUB_OUTPUT"
|
||||
echo "fallback-cache-key=$fallback_cache_key" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Restore production artifact cache
|
||||
if: steps.resolve.outputs.artifact-ready == 'true'
|
||||
id: production-cache
|
||||
uses: actions/cache/restore@v6
|
||||
with:
|
||||
path: ${{ inputs.output-dir }}
|
||||
key: ${{ steps.resolve.outputs.production-cache-key }}
|
||||
|
||||
- name: Download bext production artifact
|
||||
if: steps.resolve.outputs.artifact-ready == 'true' && steps.production-cache.outputs.cache-hit != 'true'
|
||||
id: download
|
||||
shell: bash
|
||||
env:
|
||||
ARTIFACT_NAME: ${{ steps.resolve.outputs.artifact-name }}
|
||||
BEXT_CHANNEL: ${{ inputs.platform-channel }}
|
||||
BEXT_OUTPUT_DIR: ${{ inputs.output-dir }}
|
||||
BEXT_RUN_ID: ${{ steps.resolve.outputs.run-id }}
|
||||
GH_TOKEN: ${{ inputs.artifact-token }}
|
||||
run: |
|
||||
set -uo pipefail
|
||||
output_dir="$BEXT_OUTPUT_DIR"
|
||||
if command -v cygpath >/dev/null 2>&1; then
|
||||
output_dir="$(cygpath -u "$output_dir")"
|
||||
fi
|
||||
download_dir="$RUNNER_TEMP/bext-download-$BEXT_RUN_ID-$BEXT_CHANNEL"
|
||||
cmake -E rm -rf "$download_dir" "$output_dir"
|
||||
cmake -E make_directory "$download_dir" "$output_dir"
|
||||
|
||||
ready=false
|
||||
if gh run download "$BEXT_RUN_ID" --repo BRL-CAD/bext --name "$ARTIFACT_NAME" --dir "$download_dir"; then
|
||||
archive="$download_dir/bext-$BEXT_CHANNEL.tar.gz"
|
||||
if (cd "$output_dir" && cmake -E tar xzf "$archive") && \
|
||||
[[ -d "$output_dir/install" && -d "$output_dir/noinstall" && -f "$output_dir/bext-install-manifest.json" ]]; then
|
||||
ready=true
|
||||
fi
|
||||
fi
|
||||
cmake -E rm -rf "$download_dir"
|
||||
if [[ "$ready" != 'true' ]]; then
|
||||
cmake -E rm -rf "$output_dir"
|
||||
echo '::warning::Unable to download or validate the bext production artifact; using the pinned cache/build fallback.'
|
||||
fi
|
||||
echo "ready=$ready" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Restore fallback bext cache
|
||||
if: steps.production-cache.outputs.cache-hit != 'true' && steps.download.outputs.ready != 'true'
|
||||
id: fallback-cache
|
||||
uses: actions/cache/restore@v6
|
||||
with:
|
||||
path: ${{ inputs.output-dir }}
|
||||
key: ${{ steps.resolve.outputs.fallback-cache-key }}
|
||||
|
||||
- name: Build pinned bext revision
|
||||
if: steps.production-cache.outputs.cache-hit != 'true' && steps.download.outputs.ready != 'true' && steps.fallback-cache.outputs.cache-hit != 'true'
|
||||
shell: bash
|
||||
env:
|
||||
BEXT_BUILD_TYPE: ${{ inputs.build-type }}
|
||||
BEXT_OUTPUT_DIR: ${{ inputs.output-dir }}
|
||||
BEXT_SHA: ${{ steps.resolve.outputs.required-sha }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
output_dir="$BEXT_OUTPUT_DIR"
|
||||
if command -v cygpath >/dev/null 2>&1; then
|
||||
output_dir="$(cygpath -u "$output_dir")"
|
||||
fi
|
||||
source_dir="$RUNNER_TEMP/bext-src"
|
||||
build_dir="$RUNNER_TEMP/bext-build"
|
||||
cleanup() {
|
||||
cmake -E rm -rf "$source_dir" "$build_dir"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
cleanup
|
||||
cmake -E rm -rf "$output_dir"
|
||||
|
||||
git clone --filter=blob:none https://github.com/BRL-CAD/bext.git "$source_dir"
|
||||
git -C "$source_dir" -c advice.detachedHead=false checkout "$BEXT_SHA"
|
||||
configure_args=(-S "$source_dir" -B "$build_dir" -G Ninja -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON "-DCMAKE_BUILD_TYPE=$BEXT_BUILD_TYPE" "-DCMAKE_INSTALL_PREFIX=$output_dir")
|
||||
if [[ "$RUNNER_OS" == 'Windows' ]]; then
|
||||
configure_args+=(-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe)
|
||||
elif [[ "$RUNNER_OS" == 'macOS' ]]; then
|
||||
export CC=clang
|
||||
export CXX=clang++
|
||||
fi
|
||||
cmake "${configure_args[@]}"
|
||||
cmake --build "$build_dir" --config "$BEXT_BUILD_TYPE" --parallel 2
|
||||
|
||||
- name: Validate bext dependency tree
|
||||
shell: bash
|
||||
env:
|
||||
BEXT_OUTPUT_DIR: ${{ inputs.output-dir }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
output_dir="$BEXT_OUTPUT_DIR"
|
||||
if command -v cygpath >/dev/null 2>&1; then
|
||||
output_dir="$(cygpath -u "$output_dir")"
|
||||
fi
|
||||
[[ -d "$output_dir/install" && -d "$output_dir/noinstall" && -f "$output_dir/bext-install-manifest.json" ]]
|
||||
tool="$output_dir/noinstall/bin/strclear"
|
||||
if [[ "$RUNNER_OS" == 'Windows' ]]; then
|
||||
[[ -f "$tool.exe" ]]
|
||||
else
|
||||
[[ -x "$tool" ]]
|
||||
fi
|
||||
|
||||
- name: Save production artifact cache
|
||||
if: steps.download.outputs.ready == 'true'
|
||||
uses: actions/cache/save@v6
|
||||
with:
|
||||
path: ${{ inputs.output-dir }}
|
||||
key: ${{ steps.resolve.outputs.production-cache-key }}
|
||||
|
||||
- name: Save fallback bext cache
|
||||
if: steps.production-cache.outputs.cache-hit != 'true' && steps.download.outputs.ready != 'true' && steps.fallback-cache.outputs.cache-hit != 'true'
|
||||
uses: actions/cache/save@v6
|
||||
with:
|
||||
path: ${{ inputs.output-dir }}
|
||||
key: ${{ steps.resolve.outputs.fallback-cache-key }}
|
||||
|
||||
- name: Report bext source
|
||||
id: result
|
||||
shell: bash
|
||||
env:
|
||||
ARTIFACT_READY: ${{ steps.resolve.outputs.artifact-ready }}
|
||||
ARTIFACT_SHA: ${{ steps.resolve.outputs.selected-sha }}
|
||||
DOWNLOAD_READY: ${{ steps.download.outputs.ready }}
|
||||
FALLBACK_CACHE_HIT: ${{ steps.fallback-cache.outputs.cache-hit }}
|
||||
PRODUCTION_CACHE_HIT: ${{ steps.production-cache.outputs.cache-hit }}
|
||||
REQUIRED_SHA: ${{ steps.resolve.outputs.required-sha }}
|
||||
run: |
|
||||
if [[ "$PRODUCTION_CACHE_HIT" == 'true' ]]; then
|
||||
source=production-cache
|
||||
elif [[ "$DOWNLOAD_READY" == 'true' ]]; then
|
||||
source=production-artifact
|
||||
elif [[ "$FALLBACK_CACHE_HIT" == 'true' ]]; then
|
||||
source=fallback-cache
|
||||
else
|
||||
source=local-build
|
||||
fi
|
||||
if [[ "$ARTIFACT_READY" == 'true' && ( "$PRODUCTION_CACHE_HIT" == 'true' || "$DOWNLOAD_READY" == 'true' ) ]]; then
|
||||
sha="$ARTIFACT_SHA"
|
||||
else
|
||||
sha="$REQUIRED_SHA"
|
||||
fi
|
||||
echo "source=$source" >> "$GITHUB_OUTPUT"
|
||||
echo "bext-sha=$sha" >> "$GITHUB_OUTPUT"
|
||||
echo "Prepared bext $sha from $source."
|
||||
@@ -1,637 +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
|
||||
# distribute them across five serial queues. To avoid the target list going
|
||||
# stale, this header is followed by jobs generated from the CMake logic.
|
||||
|
||||
name: Distcheck
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '30 3 * * 5'
|
||||
|
||||
jobs:
|
||||
bext:
|
||||
name: Prepare bext
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
distcheck-default_build_type:
|
||||
name: distcheck-default_build_type
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [bext]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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 -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-default_build_type --target distcheck-default_build_type
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-default_build_type/distcheck-default_build_type.log
|
||||
|
||||
distcheck-debug:
|
||||
name: distcheck-debug
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [bext]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-debug --config Debug --target distcheck-debug
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-debug/distcheck-debug.log
|
||||
|
||||
distcheck-release:
|
||||
name: distcheck-release
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [bext]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=${{ runner.temp }}/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
|
||||
|
||||
distcheck-no_unity_debug:
|
||||
name: distcheck-no_unity_debug
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [bext]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- name: Directory setup
|
||||
run: cmake -E make_directory build_distcheck-no_unity_debug
|
||||
- name: Configure
|
||||
run: cmake -S brlcad -B build_distcheck-no_unity_debug -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output -DBRLCAD_ENABLE_UNITY_BUILD=OFF
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-no_unity_debug --config Debug --target distcheck-no_unity_debug
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-no_unity_debug/distcheck-no_unity_debug.log
|
||||
|
||||
distcheck-no_unity_release:
|
||||
name: distcheck-no_unity_release
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [bext]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- name: Directory setup
|
||||
run: cmake -E make_directory build_distcheck-no_unity_release
|
||||
- name: Configure
|
||||
run: cmake -S brlcad -B build_distcheck-no_unity_release -G Ninja -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output -DBRLCAD_ENABLE_UNITY_BUILD=OFF
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-no_unity_release --config Release --target distcheck-no_unity_release
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-no_unity_release/distcheck-no_unity_release.log
|
||||
|
||||
distcheck-enableall_debug:
|
||||
name: distcheck-enableall_debug
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-default_build_type]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DENABLE_ALL=ON -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-enableall_debug --config Debug --target distcheck-enableall_debug
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-enableall_debug/distcheck-enableall_debug.log
|
||||
|
||||
distcheck-enableall_release:
|
||||
name: distcheck-enableall_release
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-debug]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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 -DENABLE_ALL=ON -DBRLCAD_EXT_DIR=${{ runner.temp }}/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
|
||||
|
||||
distcheck-prepared_debug:
|
||||
name: distcheck-prepared_debug
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-release]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-prepared_debug --config Debug --target distcheck-prepared_debug
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-prepared_debug/distcheck-prepared_debug.log
|
||||
|
||||
distcheck-prepared_release:
|
||||
name: distcheck-prepared_release
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-no_unity_debug]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=${{ runner.temp }}/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
|
||||
|
||||
distcheck-no_tcl:
|
||||
name: distcheck-no_tcl
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-no_unity_release]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output -DBRLCAD_ENABLE_TCL=OFF
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-no_tcl --config Debug --target distcheck-no_tcl
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-no_tcl/distcheck-no_tcl.log
|
||||
|
||||
distcheck-no_tk:
|
||||
name: distcheck-no_tk
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-enableall_debug]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output -DBRLCAD_ENABLE_TK=OFF
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-no_tk --config Debug --target distcheck-no_tk
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-no_tk/distcheck-no_tk.log
|
||||
|
||||
distcheck-no_strict:
|
||||
name: distcheck-no_strict
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-enableall_release]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output -DBRLCAD_ENABLE_STRICT=OFF
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-no_strict --config Debug --target distcheck-no_strict
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-no_strict/distcheck-no_strict.log
|
||||
|
||||
distcheck-no_object:
|
||||
name: distcheck-no_object
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-prepared_debug]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output -DUSE_OBJECT_LIBS=OFF
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-no_object --config Debug --target distcheck-no_object
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-no_object/distcheck-no_object.log
|
||||
|
||||
distcheck-odd_pathnames:
|
||||
name: distcheck-odd_pathnames
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-prepared_release]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-odd_pathnames --config Debug --target distcheck-odd_pathnames
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-odd_pathnames/distcheck-odd_pathnames.log
|
||||
|
||||
distcheck-in_src_dir:
|
||||
name: distcheck-in_src_dir
|
||||
runs-on: ubuntu-24.04
|
||||
needs: [distcheck-no_tcl]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: ${{ !cancelled() && github.ref == 'refs/heads/main' }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
- 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=Debug -DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output
|
||||
- name: Build
|
||||
run: cmake --build build_distcheck-in_src_dir --config Debug --target distcheck-in_src_dir
|
||||
- name: Log
|
||||
if: always()
|
||||
run: cat build_distcheck-in_src_dir/distcheck-in_src_dir.log
|
||||
@@ -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@v6
|
||||
|
||||
- name: Build Directory setup
|
||||
run: |
|
||||
cmake -E make_directory ./build_linux
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
export PATH=$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=$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
|
||||
|
||||
@@ -1,491 +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-24.04
|
||||
strategy:
|
||||
fail-fast: true
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: github.event_name == 'push'
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
# 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@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- 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=${{ runner.temp }}/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-24.04
|
||||
needs: [linux]
|
||||
strategy:
|
||||
fail-fast: true
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
if: github.event_name == 'push'
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
# 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-24.04-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- 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=${{ runner.temp }}/bext_output
|
||||
cmake --build build_archives --config Release --target distcheck-source_archives
|
||||
|
||||
# A full bext build every time we push is too much, but we can exercise the
|
||||
# basic bext mechanisms and also the BRLCAD_COMPONENTS subbuild at the same
|
||||
# time if we do a local bext build of *just* the libbg subset of BRL-CAD. If
|
||||
# the COMPONENTS mechanism works as it should it won't trigger a full bext
|
||||
# build, and we'll only be compiling what libbg needs.
|
||||
componentbext:
|
||||
name: BRLCAD_COMPONENTS
|
||||
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
|
||||
|
||||
# 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Directory setup
|
||||
run: |
|
||||
cmake -E make_directory build_components
|
||||
cmake -E make_directory $HOME/.cache
|
||||
cmake -E make_directory $HOME/.cache/BRL-CAD
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cmake -S brlcad -B build_components -DCMAKE_BUILD_TYPE=Release -DBRLCAD_COMPONENTS=libbg
|
||||
cmake --build build_components --config Release
|
||||
|
||||
windows:
|
||||
name: MSVC - Ninja
|
||||
runs-on: windows-2025
|
||||
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@v3
|
||||
|
||||
- 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: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: windows-2025-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- 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=${{ runner.temp }}\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-2025
|
||||
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@v3
|
||||
|
||||
- name: Add cl.exe to PATH
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: windows-2025-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- name: Build Directory setup
|
||||
run: |
|
||||
cmake -E make_directory ./build_winstd
|
||||
|
||||
- name: MSVC and Ninja diagnostics
|
||||
shell: cmd
|
||||
run: |
|
||||
where cmake
|
||||
where ninja
|
||||
where cl.exe
|
||||
where msbuild
|
||||
cmake --version
|
||||
cl.exe
|
||||
set INCLUDE
|
||||
set LIB
|
||||
set LIBPATH
|
||||
|
||||
- name: Configure
|
||||
shell: cmd
|
||||
run: |
|
||||
cmake -S brlcad -B build_winstd -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_BUNDLED_LIBS=Bundled -DCMAKE_BUILD_TYPE=Release -DBRLCAD_EXT_DIR=%RUNNER_TEMP%\bext_output -DBRLCAD_ENABLE_QT=ON -DBRLCAD_CONFIG_PROBE_DIAGNOSTICS=ON -DBRLCAD_PROBE_SNAPSHOT_FILE=%GITHUB_WORKSPACE%\build_winstd\parallel-probes.txt
|
||||
|
||||
- name: Configure probe diagnostics
|
||||
if: always()
|
||||
shell: pwsh
|
||||
run: |
|
||||
$build = Join-Path $env:GITHUB_WORKSPACE 'build_winstd'
|
||||
$diagnosticDir = Join-Path $build 'CMakeTmp/probe_diagnostics'
|
||||
if (Test-Path $diagnosticDir) {
|
||||
Get-ChildItem -Path $diagnosticDir -File | Sort-Object Name | ForEach-Object {
|
||||
Write-Host "`n===== $($_.FullName) ====="
|
||||
Get-Content -Path $_.FullName
|
||||
}
|
||||
} else {
|
||||
Write-Host "No parallel-probe diagnostic directory was created."
|
||||
}
|
||||
$cmakeError = Join-Path $build 'CMakeFiles/CMakeError.log'
|
||||
if (Test-Path $cmakeError) {
|
||||
Write-Host "`n===== $cmakeError ====="
|
||||
Get-Content -Path $cmakeError
|
||||
}
|
||||
$cache = Join-Path $build 'CMakeCache.txt'
|
||||
if (Test-Path $cache) {
|
||||
Write-Host "`n===== selected cache entries ====="
|
||||
Select-String -Path $cache -Pattern '^(HAVE_CONIO_H|BRLCAD_PROBE_USE_NINJA|BRLCAD_PROBE_NINJA_EXE|BRLCAD_PROBE_VCVARS|BRLCAD_PROBE_VCVARS_ARCH):' | ForEach-Object { $_.Line }
|
||||
}
|
||||
|
||||
- name: Rebuild conio probe verbosely
|
||||
if: always()
|
||||
shell: cmd
|
||||
continue-on-error: true
|
||||
run: |
|
||||
if not exist build_winstd\CMakeTmp\INCLUDE_PROBE_build (
|
||||
echo INCLUDE_PROBE mini-project was not configured.
|
||||
exit /b 0
|
||||
)
|
||||
cmake --build build_winstd\CMakeTmp\INCLUDE_PROBE_build --config Release --target HAVE_CONIO_H --verbose
|
||||
|
||||
- name: Build
|
||||
id: build_parallel
|
||||
shell: cmd
|
||||
run: |
|
||||
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 --target mged
|
||||
|
||||
- name: Check
|
||||
shell: cmd
|
||||
run: |
|
||||
cmake --build build_winstd --config Release --target check -j2
|
||||
|
||||
- name: Package
|
||||
shell: cmd
|
||||
run: |
|
||||
cmake --build build_winstd --config Release --target package -j2
|
||||
|
||||
osx:
|
||||
name: macOS Clang
|
||||
needs: [linux]
|
||||
runs-on: macos-15
|
||||
strategy:
|
||||
fail-fast: true
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- name: Install Xquartz
|
||||
run: |
|
||||
brew install xquartz --cask
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: macos-15-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- 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=${{ runner.temp }}/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
|
||||
|
||||
# BRL-CAD's STABLE branch is intended to represent the most recent
|
||||
# SHA1 that has successfully passed our primary tests on our CI
|
||||
# platforms. This job is intended to execute that update if the
|
||||
# prior tasks succeed. It's "needs" section should contain every
|
||||
# test that is not already the dependency of another tests.
|
||||
# sync-stable-branch:
|
||||
# name: Sync STABLE branch
|
||||
# runs-on: ubuntu-latest
|
||||
# needs: [archives, componentbext, windows_std_tools, osx]
|
||||
# # This job should only run on a successful push to the main branch
|
||||
# if: github.ref == 'refs/heads/main' && github.event_name == 'push'
|
||||
# steps:
|
||||
# # 1. Generate a short-lived token using the GitHub App
|
||||
# - name: Generate GitHub App Token
|
||||
# id: generate_token
|
||||
# uses: tibdex/github-app-token@v2
|
||||
# with:
|
||||
# app_id: ${{ secrets.STABLESYNC_APP_ID }}
|
||||
# private_key: ${{ secrets.STABLESYNC_APP_PRIVATE_KEY }}
|
||||
|
||||
# # 2. Checkout the repository using the App Token
|
||||
# - name: Checkout Code
|
||||
# uses: actions/checkout@v4
|
||||
# with:
|
||||
# token: ${{ steps.generate_token.outputs.token }}
|
||||
# fetch-depth: 0 # Fetches all history to safely move branches
|
||||
|
||||
# # 3. Securely update and push the STABLE branch pointer
|
||||
# - name: Update STABLE Branch Pointer
|
||||
# run: |
|
||||
# # Configure Git to identify as the GitHub Actions bot
|
||||
# git config --global user.name "github-actions[bot]"
|
||||
# git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
# echo "Updating STABLE branch to point to the latest successfully CI tested main SHA: ${{ github.sha }}"
|
||||
|
||||
# # Force the local STABLE branch to point directly to the current main SHA
|
||||
# git branch -f STABLE ${{ github.sha }}
|
||||
|
||||
# # Push the updated stable branch reference securely back to origin
|
||||
# git push origin STABLE --force
|
||||
@@ -1,731 +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
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: 'The branch ref to run the conditional jobs on (e.g., refs/heads/pgo)'
|
||||
required: true
|
||||
default: 'refs/heads/main'
|
||||
type: string
|
||||
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
CLANG_VERSION: 18
|
||||
|
||||
jobs:
|
||||
|
||||
linux_bext:
|
||||
name: Linux - BRL-CAD bext build
|
||||
runs-on: &ubuntu_runner ubuntu-24.04 # Define the ubuntu runner anchor here
|
||||
strategy:
|
||||
fail-fast: true
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
# 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@v6
|
||||
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: ${{ !cancelled() }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v3
|
||||
|
||||
- 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@v6
|
||||
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: ${{ !cancelled() }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v3
|
||||
|
||||
- name: Add cl.exe to PATH
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
|
||||
- name: Add github workspace to path
|
||||
shell: cmd
|
||||
run: echo %GITHUB_WORKSPACE%>>"%GITHUB_PATH%"
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Build Directory setup
|
||||
run: |
|
||||
cmake -E make_directory ./build_winstd
|
||||
|
||||
- name: Configure
|
||||
shell: cmd
|
||||
run: |
|
||||
where cmake
|
||||
where ninja
|
||||
where cl.exe
|
||||
where msbuild
|
||||
cmake -S brlcad -B build_winstd -DBRLCAD_EXT_PARALLEL=1 -DBRLCAD_BUNDLED_LIBS=Bundled -DCMAKE_BUILD_TYPE=Release -DBRLCAD_BEXT_CLEANUP=ON -DBRLCAD_ENABLE_QT=ON
|
||||
|
||||
- name: Build
|
||||
shell: cmd
|
||||
run: |
|
||||
cmake --build build_winstd --config Release --target mged
|
||||
|
||||
- name: Check
|
||||
shell: cmd
|
||||
run: |
|
||||
cmake --build build_winstd --config Release --target check
|
||||
|
||||
- name: Package
|
||||
shell: cmd
|
||||
run: |
|
||||
cmake --build build_winstd --config Release --target package
|
||||
|
||||
osx_bext:
|
||||
name: macOS - BRL-CAD bext build
|
||||
needs: [linux_bext]
|
||||
runs-on: macos-15
|
||||
strategy:
|
||||
fail-fast: true
|
||||
if: ${{ !cancelled() }}
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- name: Install Xquartz
|
||||
run: |
|
||||
brew install xquartz --cask
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
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_runner # Use the ubuntu runner alias
|
||||
strategy:
|
||||
fail-fast: true
|
||||
if: |
|
||||
!cancelled() &&
|
||||
(github.event_name == 'workflow_dispatch' && github.ref == inputs.branch ||
|
||||
github.event_name == 'schedule' && github.ref == 'refs/heads/main')
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
# 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 -y clang-${{ env.CLANG_VERSION }} clang-tools-${{ env.CLANG_VERSION }}
|
||||
# Install X/OpenGL dev pkgs
|
||||
sudo apt-get install -y xserver-xorg-dev libx11-dev libxi-dev libxext-dev libglu1-mesa-dev libfontconfig-dev
|
||||
# Install tools
|
||||
sudo apt-get install -y astyle re2c xsltproc libxml2-utils
|
||||
# Install dependency dev pkgs
|
||||
sudo apt-get install -y 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 -y 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 -y libgl-dev
|
||||
sudo apt-get install -y libinput-dev
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-*ubuntu_version-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- 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
|
||||
env:
|
||||
BRLCAD_EXT_DIR: ${{ runner.temp }}/bext_output
|
||||
run: |
|
||||
# The script will now receive the version number and find the tools itself
|
||||
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
|
||||
|
||||
linux_pgo:
|
||||
name: GCC Profile-Guided Optimization
|
||||
needs: [linux_bext]
|
||||
runs-on: *ubuntu_runner # Use the ubuntu runner alias
|
||||
timeout-minutes: 180
|
||||
strategy:
|
||||
fail-fast: true
|
||||
env:
|
||||
CMAKE_BUILD_PARALLEL_LEVEL: "2"
|
||||
PGO_PATH: ${{ github.workspace }}/pgo-profile
|
||||
PGO_BENCHMARK_TARGETS: >-
|
||||
rt pixcmp benchmark_cp BENCHMARK_PIX_cp PIX_LOG_cp
|
||||
bldg391.g m35.g moss.g sphflake.g star.g world.g
|
||||
PGO_TRAINING_TARGETS: >-
|
||||
havoc.g Generic_Twin.g NIST_MBE_PMI_2.g
|
||||
PGO_TRAINING_SIZE: "512"
|
||||
PGO_TRAINING_AZIMUTH: "35"
|
||||
PGO_TRAINING_ELEVATION: "25"
|
||||
PGO_BENCHMARK_TIMEFRAME: "8"
|
||||
PGO_BENCHMARK_MAXTIME: "60"
|
||||
PGO_BENCHMARK_AVERAGE: "3"
|
||||
PGO_BENCHMARK_DEVIATION: "3"
|
||||
PGO_MIN_SPEEDUP: "1.0"
|
||||
if: |
|
||||
!cancelled() &&
|
||||
(github.event_name == 'workflow_dispatch' && github.ref == inputs.branch ||
|
||||
github.event_name == 'schedule' && github.ref == 'refs/heads/main')
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- 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 a fallback bext build
|
||||
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 libinput-dev
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-*ubuntu_version-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- name: Directory setup
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cmake -E make_directory $HOME/.cache/BRL-CAD
|
||||
if [[ -e "$PGO_PATH" ]]; then
|
||||
echo "::error::PGO profile path unexpectedly exists before the generation build"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Configure baseline build
|
||||
run: |
|
||||
cmake -S brlcad -B build_pgo_baseline -G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBUILD_TESTING=ON \
|
||||
-DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output \
|
||||
-DBRLCAD_ENABLE_QT=OFF \
|
||||
-DBRLCAD_ENABLE_STEP=ON \
|
||||
-DBRLCAD_ENABLE_STRICT=ON
|
||||
|
||||
- name: Build baseline
|
||||
run: cmake --build build_pgo_baseline --target $PGO_BENCHMARK_TARGETS
|
||||
|
||||
- name: Configure profile-generation build
|
||||
run: |
|
||||
cmake -S brlcad -B build_pgo -G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBUILD_TESTING=ON \
|
||||
-DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output \
|
||||
-DBRLCAD_ENABLE_QT=OFF \
|
||||
-DBRLCAD_ENABLE_STEP=ON \
|
||||
-DBRLCAD_ENABLE_STRICT=ON \
|
||||
-DBRLCAD_PGO=ON
|
||||
grep -q -- '-fprofile-generate=' build_pgo/compile_commands.json
|
||||
|
||||
- name: Build profile-generation binaries
|
||||
run: cmake --build build_pgo --target $PGO_BENCHMARK_TARGETS $PGO_TRAINING_TARGETS
|
||||
|
||||
- name: Generate profile data
|
||||
run: |
|
||||
cmake \
|
||||
-DPGO_MODE=TRAIN \
|
||||
-DPGO_BUILD_DIR="$GITHUB_WORKSPACE/build_pgo" \
|
||||
-DPGO_RESULTS_DIR="$GITHUB_WORKSPACE/pgo-training" \
|
||||
-DPGO_PROFILE_DIR="$PGO_PATH" \
|
||||
-DPGO_TIMEFRAME="$PGO_BENCHMARK_TIMEFRAME" \
|
||||
-DPGO_MAXTIME="$PGO_BENCHMARK_MAXTIME" \
|
||||
-DPGO_AVERAGE="$PGO_BENCHMARK_AVERAGE" \
|
||||
-DPGO_DEVIATION="$PGO_BENCHMARK_DEVIATION" \
|
||||
-DPGO_TRAINING_SIZE="$PGO_TRAINING_SIZE" \
|
||||
-DPGO_TRAINING_AZIMUTH="$PGO_TRAINING_AZIMUTH" \
|
||||
-DPGO_TRAINING_ELEVATION="$PGO_TRAINING_ELEVATION" \
|
||||
-P brlcad/misc/CMake/scripts/pgo_benchmark.cmake
|
||||
|
||||
- name: Configure profile-use build
|
||||
run: |
|
||||
# GCC incorporates the build path into profile filenames, so both
|
||||
# compilation passes must use the same build directory.
|
||||
cmake -E rm -rf build_pgo
|
||||
cmake -S brlcad -B build_pgo -G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||
-DBUILD_TESTING=ON \
|
||||
-DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output \
|
||||
-DBRLCAD_ENABLE_QT=OFF \
|
||||
-DBRLCAD_ENABLE_STEP=ON \
|
||||
-DBRLCAD_ENABLE_STRICT=ON \
|
||||
-DBRLCAD_PGO=ON
|
||||
grep -q -- '-fprofile-use=' build_pgo/compile_commands.json
|
||||
|
||||
- name: Build profile-guided binaries
|
||||
run: cmake --build build_pgo --target $PGO_BENCHMARK_TARGETS
|
||||
|
||||
- name: Benchmark and compare profile-guided build
|
||||
run: |
|
||||
cmake \
|
||||
-DPGO_MODE=COMPARE \
|
||||
-DPGO_BASELINE_BUILD_DIR="$GITHUB_WORKSPACE/build_pgo_baseline" \
|
||||
-DPGO_OPTIMIZED_BUILD_DIR="$GITHUB_WORKSPACE/build_pgo" \
|
||||
-DPGO_RESULTS_DIR="$GITHUB_WORKSPACE/pgo-results" \
|
||||
-DPGO_TIMEFRAME="$PGO_BENCHMARK_TIMEFRAME" \
|
||||
-DPGO_MAXTIME="$PGO_BENCHMARK_MAXTIME" \
|
||||
-DPGO_AVERAGE="$PGO_BENCHMARK_AVERAGE" \
|
||||
-DPGO_DEVIATION="$PGO_BENCHMARK_DEVIATION" \
|
||||
-DPGO_MIN_SPEEDUP="$PGO_MIN_SPEEDUP" \
|
||||
-P brlcad/misc/CMake/scripts/pgo_benchmark.cmake
|
||||
|
||||
windows_pgo:
|
||||
name: MSVC Profile-Guided Optimization
|
||||
needs: [windows_bext]
|
||||
runs-on: windows-latest
|
||||
timeout-minutes: 180
|
||||
strategy:
|
||||
fail-fast: true
|
||||
env:
|
||||
CMAKE_BUILD_PARALLEL_LEVEL: "2"
|
||||
PGO_BENCHMARK_TARGETS: >-
|
||||
rt pixcmp benchmark_cp BENCHMARK_PIX_cp PIX_LOG_cp
|
||||
bldg391.g m35.g moss.g sphflake.g star.g world.g
|
||||
PGO_TRAINING_TARGETS: >-
|
||||
havoc.g Generic_Twin.g NIST_MBE_PMI_2.g
|
||||
PGO_TRAINING_SIZE: "512"
|
||||
PGO_TRAINING_AZIMUTH: "35"
|
||||
PGO_TRAINING_ELEVATION: "25"
|
||||
PGO_BENCHMARK_TIMEFRAME: "8"
|
||||
PGO_BENCHMARK_MAXTIME: "60"
|
||||
PGO_BENCHMARK_AVERAGE: "3"
|
||||
PGO_BENCHMARK_DEVIATION: "3"
|
||||
PGO_MIN_SPEEDUP: "1.0"
|
||||
if: |
|
||||
!cancelled() &&
|
||||
(github.event_name == 'workflow_dispatch' && github.ref == inputs.branch ||
|
||||
github.event_name == 'schedule' && github.ref == 'refs/heads/main')
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v3
|
||||
|
||||
- name: Add cl.exe to PATH
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: windows-2025-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- name: Set up PGO paths
|
||||
shell: pwsh
|
||||
run: |
|
||||
# Short build roots keep STEP-generated paths below Windows MAX_PATH.
|
||||
$paths = @{
|
||||
PGO_PATH = Join-Path $env:RUNNER_TEMP 'pgo-d'
|
||||
PGO_BASELINE_BUILD_DIR = Join-Path $env:RUNNER_TEMP 'pgo-b'
|
||||
PGO_GENERATE_BUILD_DIR = Join-Path $env:RUNNER_TEMP 'pgo-g'
|
||||
PGO_OPTIMIZED_BUILD_DIR = Join-Path $env:RUNNER_TEMP 'pgo-u'
|
||||
PGO_TRAINING_RESULTS_DIR = Join-Path $env:RUNNER_TEMP 'pgo-t'
|
||||
PGO_RESULTS_DIR = Join-Path $env:RUNNER_TEMP 'pgo-r'
|
||||
}
|
||||
if (Test-Path -LiteralPath $paths.PGO_PATH) {
|
||||
throw "PGO profile path unexpectedly exists before the generation build: $($paths.PGO_PATH)"
|
||||
}
|
||||
foreach ($path in $paths.GetEnumerator()) {
|
||||
Add-Content -Path $env:GITHUB_ENV -Value "$($path.Key)=$($path.Value)"
|
||||
}
|
||||
|
||||
- name: Configure baseline build
|
||||
shell: pwsh
|
||||
run: |
|
||||
cmake -S brlcad -B "$env:PGO_BASELINE_BUILD_DIR" -G Ninja `
|
||||
-DCMAKE_C_COMPILER=cl.exe `
|
||||
-DCMAKE_CXX_COMPILER=cl.exe `
|
||||
-DCMAKE_BUILD_TYPE=Release `
|
||||
-DBUILD_TESTING=ON `
|
||||
"-DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output" `
|
||||
-DBRLCAD_ENABLE_QT=OFF `
|
||||
-DBRLCAD_ENABLE_STEP=ON `
|
||||
-DBRLCAD_ENABLE_STRICT=ON
|
||||
|
||||
- name: Build baseline
|
||||
shell: pwsh
|
||||
run: |
|
||||
$targets = $env:PGO_BENCHMARK_TARGETS -split '\s+'
|
||||
$arguments = @('--build', $env:PGO_BASELINE_BUILD_DIR, '--target') + $targets
|
||||
cmake @arguments
|
||||
|
||||
- name: Configure profile-generation build
|
||||
shell: pwsh
|
||||
run: |
|
||||
cmake -S brlcad -B "$env:PGO_GENERATE_BUILD_DIR" -G Ninja `
|
||||
-DCMAKE_C_COMPILER=cl.exe `
|
||||
-DCMAKE_CXX_COMPILER=cl.exe `
|
||||
-DCMAKE_BUILD_TYPE=Release `
|
||||
-DBUILD_TESTING=ON `
|
||||
"-DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output" `
|
||||
-DBRLCAD_ENABLE_QT=OFF `
|
||||
-DBRLCAD_ENABLE_STEP=ON `
|
||||
-DBRLCAD_ENABLE_STRICT=ON `
|
||||
-DBRLCAD_PGO=ON
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
exit $LASTEXITCODE
|
||||
}
|
||||
if (-not (Select-String -Path "$env:PGO_GENERATE_BUILD_DIR/build.ninja" -SimpleMatch '/GENPROFILE:PGD=' -Quiet)) {
|
||||
throw 'The profile-generation build does not contain /GENPROFILE.'
|
||||
}
|
||||
|
||||
- name: Build profile-generation binaries
|
||||
shell: pwsh
|
||||
run: |
|
||||
$targets = ($env:PGO_BENCHMARK_TARGETS + ' ' + $env:PGO_TRAINING_TARGETS) -split '\s+'
|
||||
$arguments = @('--build', $env:PGO_GENERATE_BUILD_DIR, '--target') + $targets
|
||||
cmake @arguments
|
||||
|
||||
- name: Generate profile data
|
||||
shell: pwsh
|
||||
run: |
|
||||
cmake `
|
||||
-DPGO_MODE=TRAIN `
|
||||
"-DPGO_BUILD_DIR=$env:PGO_GENERATE_BUILD_DIR" `
|
||||
"-DPGO_RESULTS_DIR=$env:PGO_TRAINING_RESULTS_DIR" `
|
||||
"-DPGO_PROFILE_DIR=$env:PGO_PATH" `
|
||||
"-DPGO_TIMEFRAME=$env:PGO_BENCHMARK_TIMEFRAME" `
|
||||
"-DPGO_MAXTIME=$env:PGO_BENCHMARK_MAXTIME" `
|
||||
"-DPGO_AVERAGE=$env:PGO_BENCHMARK_AVERAGE" `
|
||||
"-DPGO_DEVIATION=$env:PGO_BENCHMARK_DEVIATION" `
|
||||
"-DPGO_TRAINING_SIZE=$env:PGO_TRAINING_SIZE" `
|
||||
"-DPGO_TRAINING_AZIMUTH=$env:PGO_TRAINING_AZIMUTH" `
|
||||
"-DPGO_TRAINING_ELEVATION=$env:PGO_TRAINING_ELEVATION" `
|
||||
-P brlcad/misc/CMake/scripts/pgo_benchmark.cmake
|
||||
|
||||
- name: Configure profile-use build
|
||||
shell: pwsh
|
||||
run: |
|
||||
cmake -S brlcad -B "$env:PGO_OPTIMIZED_BUILD_DIR" -G Ninja `
|
||||
-DCMAKE_C_COMPILER=cl.exe `
|
||||
-DCMAKE_CXX_COMPILER=cl.exe `
|
||||
-DCMAKE_BUILD_TYPE=Release `
|
||||
-DBUILD_TESTING=ON `
|
||||
"-DBRLCAD_EXT_DIR=${{ runner.temp }}/bext_output" `
|
||||
-DBRLCAD_ENABLE_QT=OFF `
|
||||
-DBRLCAD_ENABLE_STEP=ON `
|
||||
-DBRLCAD_ENABLE_STRICT=ON `
|
||||
-DBRLCAD_PGO=ON
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
exit $LASTEXITCODE
|
||||
}
|
||||
if (-not (Select-String -Path "$env:PGO_OPTIMIZED_BUILD_DIR/build.ninja" -SimpleMatch '/USEPROFILE:PGD=' -Quiet)) {
|
||||
throw 'The profile-use build does not contain /USEPROFILE.'
|
||||
}
|
||||
|
||||
- name: Build profile-guided binaries
|
||||
shell: pwsh
|
||||
run: |
|
||||
$targets = $env:PGO_BENCHMARK_TARGETS -split '\s+'
|
||||
$arguments = @('--build', $env:PGO_OPTIMIZED_BUILD_DIR, '--target') + $targets
|
||||
cmake @arguments
|
||||
|
||||
- name: Benchmark and compare profile-guided build
|
||||
shell: pwsh
|
||||
run: |
|
||||
cmake `
|
||||
-DPGO_MODE=COMPARE `
|
||||
"-DPGO_BASELINE_BUILD_DIR=$env:PGO_BASELINE_BUILD_DIR" `
|
||||
"-DPGO_OPTIMIZED_BUILD_DIR=$env:PGO_OPTIMIZED_BUILD_DIR" `
|
||||
"-DPGO_RESULTS_DIR=$env:PGO_RESULTS_DIR" `
|
||||
"-DPGO_TIMEFRAME=$env:PGO_BENCHMARK_TIMEFRAME" `
|
||||
"-DPGO_MAXTIME=$env:PGO_BENCHMARK_MAXTIME" `
|
||||
"-DPGO_AVERAGE=$env:PGO_BENCHMARK_AVERAGE" `
|
||||
"-DPGO_DEVIATION=$env:PGO_BENCHMARK_DEVIATION" `
|
||||
"-DPGO_MIN_SPEEDUP=$env:PGO_MIN_SPEEDUP" `
|
||||
-P brlcad/misc/CMake/scripts/pgo_benchmark.cmake
|
||||
|
||||
|
||||
# See https://app.codecov.io/gh/BRL-CAD/brlcad for analysis results
|
||||
linux_cov:
|
||||
name: LCOV Coverage testing
|
||||
needs: [linux_bext]
|
||||
runs-on: *ubuntu_runner # Use the ubuntu runner alias
|
||||
strategy:
|
||||
fail-fast: true
|
||||
if: |
|
||||
!cancelled() &&
|
||||
(github.event_name == 'workflow_dispatch' && github.ref == inputs.branch ||
|
||||
github.event_name == 'schedule' && github.ref == 'refs/heads/main')
|
||||
steps:
|
||||
- name: Setup - CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- name: Setup - System
|
||||
run: |
|
||||
sudo apt-get update
|
||||
# Get the lcov tool and its dependencies
|
||||
sudo apt-get install lcov gdb
|
||||
# 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@v6
|
||||
with:
|
||||
path: brlcad
|
||||
|
||||
- name: Prepare bext dependencies
|
||||
uses: ./brlcad/.github/actions/prepare-bext
|
||||
with:
|
||||
platform-channel: ubuntu-*ubuntu_version-${{ runner.arch }}-release
|
||||
source-dir: ${{ github.workspace }}/brlcad
|
||||
output-dir: ${{ runner.temp }}/bext_output
|
||||
build-type: Release
|
||||
artifact-token: ${{ secrets.BEXT_ARTIFACT_TOKEN }}
|
||||
|
||||
- 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=${{ runner.temp }}/bext_output -DBRLCAD_ENABLE_QT=ON
|
||||
|
||||
- name: Build
|
||||
id: build_parallel
|
||||
run: |
|
||||
export PATH=$GITHUB_WORKSPACE:$PATH
|
||||
cmake --build build_lcov -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_lcov -j1
|
||||
|
||||
- name: Run Tests
|
||||
id: coverage_tests
|
||||
run: |
|
||||
find . -name '*.gcda' -exec rm {} \;
|
||||
cmake --build . --target check
|
||||
working-directory: ${{ github.workspace }}/build_lcov
|
||||
|
||||
- name: Diagnose failed annotation test
|
||||
if: failure() && steps.coverage_tests.outcome == 'failure'
|
||||
continue-on-error: true
|
||||
run: |
|
||||
set +e
|
||||
ctest -R '^rt_datum_annot_semantics$' -VV
|
||||
cat Testing/Temporary/LastTest.log
|
||||
if command -v gdb >/dev/null 2>&1; then
|
||||
gdb --quiet --batch \
|
||||
-ex 'set pagination off' \
|
||||
-ex run \
|
||||
-ex 'thread apply all bt full' \
|
||||
--args ./src/librt/tests/rt_datum_annot_semantics
|
||||
fi
|
||||
working-directory: ${{ github.workspace }}/build_lcov
|
||||
|
||||
- name: Capture Coverage
|
||||
run: |
|
||||
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
|
||||
|
||||
-41
@@ -1,41 +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
|
||||
*__pycache__*
|
||||
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Code Quality Standards
|
||||
|
||||
Write code as a senior engineer would for long-term maintenance. These are non-negotiable defaults, not suggestions to apply when asked.
|
||||
|
||||
## Principles
|
||||
|
||||
- **DRY.** Extract duplicate logic. Refactor. Once and only once.
|
||||
- **Minimize surprises.** Preserve existing style and conventions. Test when you can.
|
||||
- **No magic values.** Use named constants, enums, or configuration. Every literal needs justification.
|
||||
- **Minimize scope.** Prefer tightest scope that works - local variables, parameters, encapsulation. Broader scope needs justification.
|
||||
- **No dead code.** Delete commented-out code, unused variables, unreachable branches. Version control remembers.
|
||||
- **Comments explain why.** Document intent, constraints, and non-obvious decisions. Use "what" summaries only for complex or non-obvious algorithms. If routine code needs a comment to explain it, the code should be clearer.
|
||||
- **Clean up what you touch.** Improve code you are changing: rename unclear variables, extract functions, simplify conditionals. Do not mix unrelated cleanup with logic changes - separate concerns, separate commits.
|
||||
- **Handle errors deliberately.** Whether failing loudly or quietly, make it an intentional choice. No accidental swallowing.
|
||||
- **YAGNI.** Do not add speculative abstractions, unused parameters, or unplanned extension points. Build what is needed now. Refactor when requirements actually change.
|
||||
- **Perfection is when there is nothing left to take away.** Prefer reduction over addition, simpler is better. Too clever to debug easily is too clever.
|
||||
|
||||
## Before Finishing
|
||||
|
||||
Review your changes for code smells, duplicated logic, hardcoded values, overly broad scope, unclear names, missing error handling, unnecessary complexity, etc. Fix issues in the same pass - do not defer cleanup.
|
||||
|
||||
## Git
|
||||
|
||||
Never commit without permission (ask every time). Never push to remote. Never use `codex`, `chatgpt`, `openai`, `gemini`, `antigravity`, `copilot`, `claude`, `llm`, `ai`, or similar terms in branch names, tag names, commits, PRs, comments, and other metadata. Do not add generated-by notices or otherwise indicate authorship unless user explicitly requests. Do not include specific machine information - full file system paths, machine names, IP addresses, or other identifiable information in commit messages, code, comments or documentation.
|
||||
|
||||
## Repository Coding Conventions
|
||||
|
||||
The HACKING file in the root of the source tree defines coding conventions specific to BRL-CAD, including versions of common functions that are used in our code base instead of raw standard functions. Review this file before writing code so your changes and additions adhere to BRL-CAD standards.
|
||||
|
||||
BRL-CAD code should typically use our ZERO and EQUAL macros rather than raw floating-point equality comparisons to avoid Werror=float-equal compilation failures on expressions such as a == 0.0 (should be ZERO(a)) or b != c (should be !EQUAL(b, c)).
|
||||
|
||||
When completing a code change (not for intermediate iterations, but when preparing to hand back a finalized change) use our regress-repository and regress-licenses build targets to check that the result satisfies our internal checkers.
|
||||
@@ -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
|
||||
|
||||
@@ -366,10 +366,6 @@ McDonald, Rob
|
||||
2013 November
|
||||
Open Source
|
||||
|
||||
Roberts, Mitchell
|
||||
2014 July
|
||||
U.S. Army Research Laboratory
|
||||
|
||||
Tannous, Marc
|
||||
2014 December
|
||||
Open Source (GCI)
|
||||
@@ -393,11 +389,6 @@ Sieu, Jeff
|
||||
2017 December
|
||||
Open Source (GCI)
|
||||
|
||||
Baker, Josh
|
||||
nicknames joshbaker22
|
||||
2023 August
|
||||
U.S. Army Research Laboratory
|
||||
|
||||
|
||||
CODE CONTRIBUTIONS
|
||||
------------------
|
||||
@@ -608,11 +599,6 @@ nicknames Alexandrus
|
||||
2010 July
|
||||
Open Source
|
||||
|
||||
Pal, Csanyi
|
||||
nicknames csanyi_pal
|
||||
2010 July
|
||||
Open Source
|
||||
|
||||
Hinesley, Brandon
|
||||
nicknames bhinesley
|
||||
2011 March
|
||||
@@ -908,197 +894,15 @@ nicknames chetanshinde911
|
||||
Open Source (GSoC)
|
||||
|
||||
Haydar, Ali
|
||||
nicknames lois221 lgoogl696 LouisGoogl
|
||||
nicknames lois221
|
||||
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
|
||||
|
||||
Rupesh
|
||||
nicknames rupes, rupeshca007
|
||||
2026 March
|
||||
Open Source
|
||||
|
||||
nicknames laithaldaeef
|
||||
2026 March
|
||||
Open Source
|
||||
|
||||
|
||||
SPECIAL THANKS
|
||||
--------------
|
||||
@@ -1413,18 +1217,6 @@ Liu, Jeffrey
|
||||
2019 December
|
||||
Open Source (GCI)
|
||||
|
||||
Wade, Pauline
|
||||
2021 August
|
||||
Texas A&M University
|
||||
|
||||
nicknames r-ricci
|
||||
2022 January
|
||||
Open Source
|
||||
|
||||
nicknames Meghna45-code
|
||||
2026 July
|
||||
Open Source
|
||||
|
||||
|
||||
CORPORATE AND ORGANIZATION SUPPORT
|
||||
----------------------------------
|
||||
@@ -1496,6 +1288,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
|
||||
|
||||
@@ -15,103 +15,22 @@ 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.)
|
||||
|
||||
* recursive bu_parallel() failure, tbd whether cpp11 or pthread impl,
|
||||
likely because IDs are exceeding MAX_PSW, causing mayhem and chaos.
|
||||
|
||||
* 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.
|
||||
|
||||
[HARD] Superlinear growth (3 combs -> 18GB) points at an
|
||||
integer/overflow interaction deep in the space-partitioning cut
|
||||
allocator (rt_ct_get 10MB chunks), intertwined with bu memory.
|
||||
Painful to isolate and validate at scale.
|
||||
[FAN-OUT: poor -- one focused investigator with an allocator/profiler
|
||||
trace; not parallelizable.]
|
||||
|
||||
* 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)
|
||||
|
||||
* 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 %
|
||||
|
||||
* 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
|
||||
|
||||
* 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
|
||||
|
||||
* 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
|
||||
|
||||
* 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
|
||||
|
||||
* 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
|
||||
|
||||
* bot_dump -o file.obj is possibly generating invalid OBJ files.
|
||||
tested on two different pieces of software including xcode and cura,
|
||||
both failed to read our obj files where stl worked.
|
||||
|
||||
* mater -d information stored in the .g file doesn't survive a
|
||||
garbage collection operation.
|
||||
|
||||
@@ -127,10 +46,36 @@ Recent Bugs
|
||||
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.
|
||||
@@ -144,12 +89,31 @@ Recent Bugs
|
||||
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.
|
||||
@@ -171,6 +135,13 @@ Recent Bugs
|
||||
* 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
|
||||
@@ -179,6 +150,9 @@ Recent Bugs
|
||||
private memory -- looks like private memory is not initialized
|
||||
(observed on Mac 10.6, Windows, and Ubuntu Linux using 7.26).
|
||||
|
||||
* pixdiff on Windows is reporting no differences with a pair of files
|
||||
that pixcmp can see differences in.
|
||||
|
||||
* fblabel seems quite busted, at least talking to a /dev/X fbserv, in
|
||||
that it only draws the first character and eventually displays
|
||||
rem_read() failures when run in -d debug mode.
|
||||
@@ -187,6 +161,16 @@ Recent Bugs
|
||||
after doing an overlay render. it does draw, though, as confirmed
|
||||
by a forced fb-fb refresh.
|
||||
|
||||
* pixborder doesn't account for an edge case where the right edge of
|
||||
an image is expected to be colored (except for one pixel on the top
|
||||
edge). Example:
|
||||
|
||||
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:
|
||||
@@ -200,6 +184,14 @@ 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.
|
||||
example demonstrated to not work was: attr set obj rgb 123/123/123
|
||||
|
||||
* report of LIBBU not working when accessed by a multithreaded
|
||||
application on Windows. reportedly due to some problem with the
|
||||
debug memory queue.
|
||||
@@ -237,16 +229,26 @@ Recent Bugs
|
||||
|
||||
rm -f terra.pix && valgrind bin/rt -o terra.pix -P1 -H3 -s1024 share/brlcad/7.21.0/db/terra.g all.g
|
||||
|
||||
[HARD] valgrind-confirmed 8-byte corruption after a build_spec_table()
|
||||
realloc in find_spec_wgt(), where "bookkeeping seems okay" -- i.e.,
|
||||
root cause is non-obvious. Classic hard-to-pin data race.
|
||||
[FAN-OUT: poor -- a single heisenbug needing one careful
|
||||
investigator, not parallel coverage.]
|
||||
|
||||
* mged 'joint' hold command isn't working. looks like the fp_names
|
||||
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
|
||||
|
||||
* 'exists' command documentation claims more than has been implemented
|
||||
|
||||
* 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.
|
||||
|
||||
@@ -261,6 +263,12 @@ 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);
|
||||
|
||||
* report that "keep" sometimes results in a .g file with unknown units;
|
||||
dbconcat also is reported to set the units to unknown if concatting
|
||||
a file with unknown units.
|
||||
@@ -288,6 +296,10 @@ Recent Bugs
|
||||
|
||||
* rt -i -s4096 -H16 -F/dev/null boolean-ops.g all
|
||||
|
||||
* asc2g of a .asc file containing the first line as a "#" comment
|
||||
results in a bu_malloc(0) bomb. comment lines should be valid in
|
||||
.asc files.
|
||||
|
||||
* compilation reportedly fails when building Tcl if the path to the
|
||||
source directory includes a space.
|
||||
|
||||
@@ -316,9 +328,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.
|
||||
|
||||
@@ -332,6 +348,10 @@ Recent Bugs
|
||||
|
||||
* 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.
|
||||
|
||||
@@ -341,6 +361,9 @@ Recent Bugs
|
||||
tclscripts/mged/tclIndex for examples:
|
||||
https://sourceforge.net/tracker/?func=detail&atid=640802&aid=2923199&group_id=105292
|
||||
|
||||
* vdeck truncates the region names in the 'regions' file, probably
|
||||
wrong bu_strlcpy() length.
|
||||
|
||||
* hyp tessellation routine creates bot that does not raytrace
|
||||
|
||||
* hyp used in a boolean with other objects (even unions) does not
|
||||
@@ -412,6 +435,11 @@ Recent Bugs
|
||||
* running 'keep' on too many objects (hundreds is causing a usage
|
||||
statement (and not doing the keep)
|
||||
|
||||
* rtwizard won't display a line overlay if you line object is obscured
|
||||
by another. Example being to display a vehicle as ghost, crew as
|
||||
solid, and crew as line. confirmed even when using the other line
|
||||
occlusion settings.
|
||||
|
||||
* fbserv is receiving image data very slowly if the framebuffer is a
|
||||
remote X24 interface. could reproduce on mac with the following:
|
||||
|
||||
@@ -471,6 +499,9 @@ Recent Bugs
|
||||
ubuntu linux. key events go to the command window even with the
|
||||
graphics window has focus.
|
||||
|
||||
* MGED File->Preferences->Fonts results in error "named font "button
|
||||
_font" doesn't exist on Linux.
|
||||
|
||||
* mged tab-completion doesn't work if the object names have spaces
|
||||
|
||||
* Open dialog in MGED seems rather busted for scrolling and selection
|
||||
@@ -508,6 +539,16 @@ Recent Bugs
|
||||
* dsp primitive is going into what seems to be an unbounded memory
|
||||
allocation loop during prep, inside dsp_layers().
|
||||
|
||||
* crashes during photonmap raytrace of m35 where right node is invalid
|
||||
rt -o test.pix -V 1.0 -P4 -J0 -l7 -A0 ~/Desktop/m35.g all.g box.r sph.r
|
||||
|
||||
* libfb cannot utilize standard output/error "device" files without
|
||||
path trickery. it recognizes the /dev/ prefix and presumes it's a
|
||||
libfb device instead of a filesystem device.
|
||||
|
||||
OK: rt -F/./dev/stdout
|
||||
BAD: rt -F/dev/stdout
|
||||
|
||||
* libfb cannot open a file descriptor when piping/redirecting output.
|
||||
|
||||
OK: rt -F/./dev/stdout moss.g all.g
|
||||
@@ -530,6 +571,8 @@ Recent Bugs
|
||||
* triangulation of some pipe in toyjeep.g fails (rather reliably) on
|
||||
some given bend. fails in nmg_triangulate model().
|
||||
|
||||
* fbhelp sends some of the output to stdout and some to stderr...
|
||||
|
||||
* debugbu 2 immediately reports a bu_vls_free() error.. apparently
|
||||
been a problem since 4.5 days. this occurs because
|
||||
bu_memdebug_add() is not called unless memory checking is enabled
|
||||
@@ -546,6 +589,11 @@ Recent Bugs
|
||||
|
||||
* Create menu.. create "part" boo hiss..
|
||||
|
||||
* 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
|
||||
@@ -565,6 +613,11 @@ Recent Bugs
|
||||
|
||||
* concave arbs give correct wireframe but do not raytrace correctly.
|
||||
|
||||
* rtwizard/rtedge creates incorrect "fuzzy" edge overlay when creating
|
||||
a "Ghost Image with Insert and Lines" that includes a light source
|
||||
and object close to surface (e.g. moss.g; select plane, light, and
|
||||
cone for ghost; select cone for insert and lines.)
|
||||
|
||||
* mged's solid illuminate doesn't work when Lighting is turned on
|
||||
|
||||
* raytrace of zoomed images (e.g., -s64) doesn't work for if_X24
|
||||
@@ -590,13 +643,23 @@ Recent Bugs
|
||||
* mged primitive editor doesn't accept/apply values to disk for
|
||||
certain primitives (e.g. sph)
|
||||
|
||||
* photon map cache file doesn't work (seems to crash rt on use)
|
||||
|
||||
* enabling perspective mode horks shaded mode, also Z clipping
|
||||
shouldn't be required to get the shading.
|
||||
|
||||
* 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.
|
||||
|
||||
@@ -606,9 +669,35 @@ Recent Bugs
|
||||
* sketches extruded with non-square AB vectors results in inner sketch
|
||||
components not getting scaled properly.
|
||||
|
||||
* rtcheck is ignoring fastgen tagged geometry since no multioverlap
|
||||
handler is set.
|
||||
|
||||
* bot-bldxf fails in db_walk_tree(), interface may have changed
|
||||
|
||||
|
||||
Older Bugs
|
||||
----------
|
||||
|
||||
* several manpages are missing or out of date for various tools
|
||||
|
||||
* X11 framebuffer often fails to display on certain middle bit depth
|
||||
displays. (e.g. 15 or 16 bit depth)
|
||||
|
||||
* mk_lcomb fails on large combinations due to mk_tree_pure() building
|
||||
a left-heavy tree and wdb_put_internal() then recursively performing
|
||||
lookup and put calls.
|
||||
|
||||
|
||||
Annoyances
|
||||
----------
|
||||
|
||||
* matrix edits on objects in mged require you to select a primitive
|
||||
for a coordinate system reference. this can be counterintuitive and
|
||||
confusing.
|
||||
|
||||
* there are frequently modality errors when entering edit mode as
|
||||
control and middle mouse rebind to model edit instead of view edit.
|
||||
|
||||
---
|
||||
Bugs should be reported to the bug tracker on the project website at
|
||||
http://sourceforge.net/tracker/?atid=640802&group_id=105292
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
= BRL-CAD Interface Change Policy
|
||||
:toc: macro
|
||||
|
||||
toc::[]
|
||||
|
||||
== Scope
|
||||
|
||||
This policy defines how BRL-CAD public interfaces may change. Public
|
||||
interfaces include developer APIs, command-line interfaces, graphical
|
||||
interfaces, documented commands, installed headers, public macros,
|
||||
public types, and other behavior users reasonably rely on.
|
||||
|
||||
Renaming an application is not minimally impacting: an application
|
||||
name is the primary way users find and run the tool.
|
||||
|
||||
Every public interface change must be either minimally impacting or
|
||||
formally deprecated.
|
||||
|
||||
== Minimally Impacting
|
||||
|
||||
A minimally impacting change may be made at any time. A change is
|
||||
minimally impacting only when it can be represented by the documented
|
||||
rule language in
|
||||
link:doc/changes/minimally-impacting.rules[doc/changes/minimally-impacting.rules]
|
||||
and emitted by the generated update script.
|
||||
|
||||
If the rule language cannot express a change, either extend the rule
|
||||
language so the generated script can perform the update, or treat the
|
||||
change as formally deprecated.
|
||||
|
||||
Minimally impacting path includes:
|
||||
|
||||
* recently introduced interfaces that have not yet appeared unchanged
|
||||
in two releases;
|
||||
* appreciably broken interfaces that have been unusable for at least
|
||||
two releases and have no secondary utility;
|
||||
* elementary mechanical changes such as renames, parameter reordering,
|
||||
parameter removal, defaulted parameter insertion, equivalent
|
||||
interface substitutions, and header moves.
|
||||
|
||||
For function argument rewrites, BRL-CAD assumes callers are not
|
||||
relying on preprocessor-generated call syntax and are not passing
|
||||
nested function calls as arguments to the changed function. That
|
||||
assumption keeps generated substitutions deterministic and reviewable.
|
||||
|
||||
Rule syntax and generated update-script workflow are documented in
|
||||
link:doc/changes/README.adoc[doc/changes/README.adoc]. The generated
|
||||
build-tree rendering of minimally impacting changes is
|
||||
`doc/changes/minimally-impacting.adoc`.
|
||||
|
||||
== Formally Deprecated
|
||||
|
||||
Any public interface change that is not minimally impacting must
|
||||
follow the formal deprecation process.
|
||||
|
||||
During a major release, such as 7.x to 8.x, any public interface may
|
||||
change without advance notice. Major version changes imply interface
|
||||
incompatibility.
|
||||
|
||||
During a minor release, such as 7.44.x to 7.46.x, a public interface
|
||||
must be deprecated beforehand with advance notice in at least two
|
||||
minor releases and at least 90 days elapsed since the initial release
|
||||
announcement.
|
||||
|
||||
Public interfaces scheduled for change should be listed in
|
||||
link:doc/changes/deprecated.adoc[doc/changes/deprecated.adoc] and
|
||||
visibly marked in the source code. Appropriate markings include
|
||||
`DEPRECATED` declarations, preprocessor warnings, `@DEPRECATED`
|
||||
comments, runtime warnings when they do not disrupt valid usage, and
|
||||
documentation updates.
|
||||
|
||||
After a deprecation window has completed, removed or significantly
|
||||
changed interfaces are listed in
|
||||
link:doc/changes/obsoleted.adoc[doc/changes/obsoleted.adoc].
|
||||
|
||||
== Examples
|
||||
|
||||
Removing `rt_shootray()` after it has been published and documented in
|
||||
multiple releases is not minimally impacting unless a generated rule
|
||||
can update callers to an equivalent interface. Otherwise, it must be
|
||||
listed as deprecated, marked in the headers, announced in releases,
|
||||
and only later obsoleted.
|
||||
|
||||
Renaming `bu_log()` or adding a defaulted first argument can be
|
||||
minimally impacting if the change is listed in
|
||||
`minimally-impacting.rules` and the generated update script rewrites
|
||||
existing callers.
|
||||
+2775
-2523
File diff suppressed because it is too large
Load Diff
@@ -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-2026 United States Government as represented by
|
||||
Copyright (c) 1984-2020 United States Government as represented by
|
||||
the U.S. Army Research Laboratory.
|
||||
|
||||
Contact
|
||||
|
||||
@@ -297,6 +297,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 +380,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/
|
||||
@@ -397,17 +403,14 @@ 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.
|
||||
|
||||
With release 7.38, BRL-CAD intends to conform strictly with the
|
||||
following ANSI/ISO standards for C and C++ language compilation:
|
||||
|
||||
C : ISO/IEC 9899:2011, i.e. C11
|
||||
C++: ISO/IEC 14882:2017, i.e. C++17
|
||||
|
||||
With release 7.28, BRL-CAD intends to conform strictly with the 2011
|
||||
ANSI/ISO standards for C and C++ language compilation
|
||||
(ISO/IEC 9899:2011, i.e. C11 and ISO/IEC 14882:2011, i.e. C++11).
|
||||
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.
|
||||
development should be widely supported C++11 features and the subset
|
||||
of C11 that is also valid (and widely supported) C++11.
|
||||
|
||||
C++ is used as an implementation language within libraries, but there
|
||||
are no public C++ APIs in use outside of OpenNURBS. For new work,
|
||||
@@ -453,10 +456,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 +472,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:
|
||||
|
||||
@@ -616,7 +619,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 +810,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.
|
||||
@@ -868,7 +871,7 @@ respective library being tested (e.g., src/libbu/tests):
|
||||
|
||||
Note that changes to publicly documented tools and library APIs must
|
||||
adhere to BRL-CAD's change policy. This means changes to any tests
|
||||
may require thoughtful deployment. See CHANGES.adoc for details.
|
||||
may require thoughtful deployment. See the CHANGES file for details.
|
||||
|
||||
These tests are run nightly on BRL-CAD's server to catch problems
|
||||
quickly - developers should be aware of the status of BRL-CAD's tests
|
||||
@@ -896,7 +899,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 +920,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 +949,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 +957,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 +989,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 +1019,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 +1035,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
|
||||
@@ -1227,7 +1222,7 @@ 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.
|
||||
|
||||
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
|
||||
@@ -1258,100 +1253,47 @@ 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.
|
||||
|
||||
TODO - we probably need to do a re-look at the RELEASE and STABLE setup.
|
||||
With Git and modern workflows, I'm leaning more towards a temporary
|
||||
working branch where we shake down for release, then tagging from that
|
||||
working branch and merging that back into main once complete. For
|
||||
minor releases we should create a X-XX branch from the X-XX-0 tag, and
|
||||
any patch releases on that minor series will be handled in and tagged
|
||||
from the branch. With AI driven change rates, it's unrealistic to
|
||||
try and put main back into a state where we can call a tag off of it
|
||||
a patch on an older minor. Needs more thought - should try to hash out
|
||||
before the next minor release and update the workflow.
|
||||
# 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"
|
||||
|
||||
git clone git@github.com:BRL-CAD/brlcad.git
|
||||
cd brlcad
|
||||
git checkout RELEASE
|
||||
|
||||
# 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 https://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.
|
||||
|
||||
# NON-AUTO: Confirm versioning in include/conf/.
|
||||
# BRLCAD_VERSION_AMEND may be defined during CMake for an
|
||||
# amendment build.
|
||||
|
||||
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.
|
||||
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 # 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.
|
||||
@@ -1362,21 +1304,12 @@ before the next minor release and update the workflow.
|
||||
# 05: Review all commits.
|
||||
|
||||
# NON-AUTO: Verify all user-visible changes are in NEWS.
|
||||
# NON-AUTO: Verify all interface changes are in CHANGES.adoc or doc/changes/.
|
||||
# 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
|
||||
@@ -1386,115 +1319,61 @@ before the next minor release and update the workflow.
|
||||
# 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.
|
||||
# Update the NEWS release date for the current release to today's date
|
||||
|
||||
# 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)
|
||||
# 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"
|
||||
|
||||
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
|
||||
@@ -1504,65 +1383,64 @@ before the next minor release and update the workflow.
|
||||
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.
|
||||
|
||||
# NON-AUTO: Select the new tag at https://github.com/BRL-CAD/brlcad/releases/new
|
||||
#
|
||||
# Upload the NEWS entries and description for the web page's
|
||||
# release notes. Attach the tar.gz, tar.bz2 and .zip files as
|
||||
# the initial archives. Releases may be edited to add new files,
|
||||
# so go ahead and publish the release to have our default webpage
|
||||
# correctly reflect the most recent release.
|
||||
# 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/brlcad/BRL-CAD\ Source/$MAJOR.$MINOR.$PATCH"
|
||||
|
||||
# create binary dirs (as needed)
|
||||
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/brlcad/BRL-CAD\ Runtime\ Libraries/$MAJOR.$MINOR.$PATCH"
|
||||
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/brlcad/BRL-CAD\ for\ BSD/$MAJOR.$MINOR.$PATCH"
|
||||
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/brlcad/BRL-CAD\ for\ Linux/$MAJOR.$MINOR.$PATCH"
|
||||
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/brlcad/BRL-CAD\ for\ Mac\ OS\ X/$MAJOR.$MINOR.$PATCH"
|
||||
ssh -v $SFUSERNAME,brlcad@shell.sf.net mkdir "/home/frs/project/brlcad/BRL-CAD\ for\ Windows/$MAJOR.$MINOR.$PATCH"
|
||||
|
||||
TODO - It would be nice to have some curated scripts for binary creation.
|
||||
For Linux I usually set up a fresh Rocky Linux image with a clean environment
|
||||
and install just what is needed to try and get a "this will probably run
|
||||
anywhere" binary, but as a manual process that's a pain - maybe there's a way
|
||||
to script qemu to do the job for us...
|
||||
# upload source dist and any binaries
|
||||
scp brlcad-$MAJOR.$MINOR.$PATCH* "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/brlcad/BRL-CAD\ Source/$MAJOR.$MINOR.$PATCH/."
|
||||
|
||||
Windows is still completely manual. The .msi installer depends on an older
|
||||
version of WiX, and I don't know of another good solution there - we probably need
|
||||
to investigate whether we could produce MSIX packages instead.
|
||||
# extract and upload release notes to source dir
|
||||
cat ../NEWS | tr '\n' '@' | perl -p -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/brlcad/BRL-CAD\ Source/$MAJOR.$MINOR.$PATCH/."
|
||||
|
||||
Mac - TODO.
|
||||
# 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/brlcad/BRL-CAD\ Runtime\ Libraries/$MAJOR.$MINOR.$PATCH/."
|
||||
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/brlcad/BRL-CAD\ for\ BSD/$MAJOR.$MINOR.$PATCH/."
|
||||
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/brlcad/BRL-CAD\ for\ Linux/$MAJOR.$MINOR.$PATCH/."
|
||||
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/brlcad/BRL-CAD\ for\ Mac\ OS\ X/$MAJOR.$MINOR.$PATCH/."
|
||||
scp README-$MAJOR-$MINOR-$PATCH.txt "$SFUSERNAME,brlcad@shell.sf.net:/home/frs/project/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
|
||||
@@ -1589,7 +1467,7 @@ Mac - TODO.
|
||||
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
|
||||
@@ -1668,7 +1546,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.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,28 +1,32 @@
|
||||
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.
|
||||
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 with additional information. This presently includes the
|
||||
following:
|
||||
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 +35,50 @@ 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.26 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
|
||||
For the impatient or simplistic, the following steps should compile,
|
||||
test, and install an optimized BRL-CAD quickly into the
|
||||
/usr/brlcad/rel-VERSION directory if CMake is already installed:
|
||||
|
||||
tar -zxvf brlcad-VERSION.tar
|
||||
mkdir brlcad-VERSION/build
|
||||
cd brlcad-VERSION/build
|
||||
cmake .. -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
|
||||
make -j4
|
||||
make check
|
||||
sudo make install
|
||||
make install
|
||||
|
||||
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.
|
||||
See the REPORTING PROBLEMS section of this document to report any
|
||||
problems or the INSTALLING FROM SOURCE section for more comprehensive
|
||||
instructions.
|
||||
|
||||
Once installed, add /usr/brlcad/rel-VERSION/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-VERSION/bin:$PATH ; export PATH
|
||||
mged
|
||||
|
||||
If you use tcsh or another C-shell based command shell, use this
|
||||
instead:
|
||||
|
||||
set path=( /usr/brlcad/rel-VERSION/bin $path ) ; rehash
|
||||
mged
|
||||
|
||||
|
||||
INSTALLING FROM BINARY
|
||||
@@ -74,128 +93,94 @@ 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
|
||||
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. Released files and their checksums are
|
||||
available from the GitHub releases page (https://github.com/BRL-CAD/brlcad/releases). If you
|
||||
re-distribute BRL-CAD, checksums should be retained with the files so others
|
||||
can validate origination.
|
||||
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.
|
||||
|
||||
|
||||
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,23 +205,69 @@ 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:
|
||||
|
||||
-DBRLCAD_FLAGS_OPTIMIZATION=ON
|
||||
|
||||
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:
|
||||
|
||||
-DBRLCAD_PGO=ON
|
||||
|
||||
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:
|
||||
|
||||
@@ -310,35 +341,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,41 +384,6 @@ if it is, default is to enable.
|
||||
Aliases: ENABLE_OPENGL
|
||||
|
||||
|
||||
--- BRLCAD_X11_PROVIDER ---
|
||||
|
||||
Selects the X11 implementation used by BRL-CAD, Tk, Qt, and OpenGL. Accepted
|
||||
values are AUTO, SYSTEM, and XMIN. AUTO is the default and deliberately
|
||||
resolves to SYSTEM so installing Xmin cannot change an existing build.
|
||||
|
||||
XMIN selects an installed Xmin client SDK for deterministic GUI testing
|
||||
without a host X server. The SDK must provide Xmin::ToolkitX11; OpenGL builds
|
||||
also need Xmin::GL. Set Xmin_ROOT to the SDK installation prefix. Tk and Qt
|
||||
must be built for the same provider because their public X11 APIs conceal
|
||||
provider-private state; mixing Xmin and system client libraries is not ABI
|
||||
safe and is rejected during configuration.
|
||||
|
||||
When BRL-CAD manages bext, it derives the matching bext SDK prefix from the
|
||||
selected Xmin package. Bext then applies its version-matched Tk and Qt patches
|
||||
automatically to whichever bundled toolkits are selected. No external patch
|
||||
paths are needed.
|
||||
|
||||
A typical Xmin configuration is:
|
||||
|
||||
cmake .. -DBRLCAD_X11_PROVIDER=XMIN \
|
||||
-DXmin_ROOT=/path/to/xmin-prefix
|
||||
|
||||
Bext retains advanced TK_EXTRA_PATCHES, TK_CONFIGURE_ARGS, QT_EXTRA_PATCHES,
|
||||
and QT_XMIN_ROOT controls for custom profiles. The standard BRL-CAD Xmin
|
||||
configuration does not need them. Refer to bext's Xmin profile documentation
|
||||
before changing the bundled Tk or Qt revision.
|
||||
|
||||
|
||||
--- 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.
|
||||
@@ -398,51 +397,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 ---
|
||||
@@ -467,10 +433,312 @@ Aliases: ENABLE_ALL_CXX
|
||||
--- BRLCAD_EXTRADOCS ---
|
||||
|
||||
The core option that enables and disables building of BRL-CAD's
|
||||
AsciiDoc based documentation (includes manuals and man pages for
|
||||
commands, among other things). It is built with BRL-CAD's bundled
|
||||
asciiquack processor into HTML and man-page (troff) formats. Defaults
|
||||
to ON for a full build and OFF for reduced target sets.
|
||||
DocBook based documentation (includes manuals and man pages for
|
||||
commands, among other things). Defaults to ON, but only HTML and MAN
|
||||
formats are enabled by default - PDF must be enabled separately by use
|
||||
of this option or one of its aliases. Note that you may set
|
||||
environment variable APACHE_FOP to point to your locally installed fop
|
||||
executable file (which on Linux is usually a shell script with 0755
|
||||
permissions).
|
||||
|
||||
Aliases: ENABLE_DOCS, ENABLE_EXTRA_DOCS
|
||||
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_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_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_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_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_SPSR ---
|
||||
|
||||
Option for enabling and disabling compilation of the Screened Poisson
|
||||
Surface Reconstruction library provided with BRL-CAD's source code.
|
||||
Default is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option
|
||||
and testing first for a system version if BRLCAD_BUNDLED_LIBS is also AUTO.
|
||||
|
||||
Aliases: ENABLE_SPSR
|
||||
|
||||
|
||||
--- BRLCAD_SC ---
|
||||
|
||||
Option for enabling and disabling compilation of the NIST Step Class
|
||||
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_PROJ4 ---
|
||||
|
||||
Option for enabling and disabling compilation of the PROJ.4 geographic
|
||||
projection 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_PROJ4
|
||||
|
||||
|
||||
--- BRLCAD_GDAL ---
|
||||
|
||||
Option for enabling and disabling compilation of the GDAL geographic
|
||||
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_GDAL
|
||||
|
||||
|
||||
|
||||
*** 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.
|
||||
|
||||
-3677
File diff suppressed because it is too large
Load Diff
@@ -1,14 +1,18 @@
|
||||
BRL-CAD
|
||||
Release 7.46.0
|
||||
http://brlcad.org/
|
||||
BRL-CAD
|
||||
Release 7.32.0
|
||||
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,6 +26,8 @@ TABLE OF CONTENTS
|
||||
Bug Reports/Feature Requests
|
||||
Distribution Details
|
||||
Background Information
|
||||
Future Events
|
||||
Getting Help
|
||||
|
||||
|
||||
GETTING STARTED
|
||||
@@ -33,34 +39,40 @@ 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
|
||||
the CMake ( http://www.cmake.org ) configuration tool is requird.
|
||||
|
||||
Typically, the following steps should result in a successful install:
|
||||
The following steps should result in a successful install:
|
||||
|
||||
tar -xvzf brlcad-VERSION.tar.gz
|
||||
mkdir brlcad-VERSION/build
|
||||
@@ -69,8 +81,17 @@ Typically, the following steps should result in a successful install:
|
||||
make -j4
|
||||
make install
|
||||
|
||||
See the included INSTALL text file for explanation of the various
|
||||
cmake configuration options available for building BRL-CAD.
|
||||
See the INSTALL file for explanation of the various configuration
|
||||
options available when building BRL-CAD.
|
||||
|
||||
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 +118,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 +232,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
|
||||
|
||||
+43
-75
@@ -1,102 +1,70 @@
|
||||
add_subdirectory(ref)
|
||||
|
||||
include_directories(${BU_INCLUDE_DIRS})
|
||||
|
||||
add_definitions(-DCONSOLE)
|
||||
|
||||
brlcad_addexec(pixcmp pixcmp.c libbu)
|
||||
brlcad_add_test(
|
||||
NAME bench_pixcmp_tolerance
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} "-DPIXCMP=$<TARGET_FILE:pixcmp>" "-DTEST_DIR=${CMAKE_CURRENT_BINARY_DIR}"
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/pixcmp_test.cmake"
|
||||
BRLCAD_ADDEXEC(pixcmp pixcmp.c libbu)
|
||||
set(BARK_SOURCES
|
||||
benchmark.c
|
||||
compute.c
|
||||
run.c
|
||||
clean.c
|
||||
)
|
||||
set(BARK_SOURCES benchmark.c compute.c run.c clean.c)
|
||||
brlcad_addexec(bark "${BARK_SOURCES}" "libbu;${M_LIBRARY}" NO_STRICT NO_INSTALL TEST_USESDATA)
|
||||
BRLCAD_ADDEXEC(bark "${BARK_SOURCES}" libbu NO_STRICT NO_INSTALL)
|
||||
|
||||
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")
|
||||
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(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_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")
|
||||
|
||||
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(
|
||||
CMAKEFILES(
|
||||
CMakeLists.txt
|
||||
pixcmp_test.cmake
|
||||
lgt.sh
|
||||
run.sh
|
||||
try.sh
|
||||
viewdiff.sh
|
||||
)
|
||||
)
|
||||
|
||||
if(SH_EXEC AND TARGET m35.g AND BUILD_TESTING)
|
||||
if(SH_EXEC AND TARGET m35.g)
|
||||
# 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 AND TARGET m35.g)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
|
||||
+22
-29
@@ -1,7 +1,7 @@
|
||||
/* B E N C H M A R K . C
|
||||
* BRL-CAD
|
||||
*
|
||||
* Copyright (c) 2011-2026 United States Government as represented by
|
||||
* Copyright (c) 2011-2020 United States Government as represented by
|
||||
* the U.S. Army Research Laboratory.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -67,7 +67,7 @@
|
||||
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;}
|
||||
const char *format_elapsed(double elapsed) {if (elapsed > 0) return "0 1 2"; return "-0 -1 -2";}
|
||||
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);
|
||||
@@ -97,7 +97,6 @@ record(const char *fmt, ...)
|
||||
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));
|
||||
@@ -217,16 +216,14 @@ look_for(void (*verbose)(const char *, ...), look_for_type_t type, const char *l
|
||||
static void
|
||||
set_if_unset(void (*echo)(const char *, ...), void (*verbose)(const char *, ...), const char *var, const char *val)
|
||||
{
|
||||
const char *setval = getenv(var);
|
||||
|
||||
if (!var || !val) {
|
||||
return;
|
||||
}
|
||||
|
||||
const char *setval = getenv(var);
|
||||
|
||||
if (!echo) {
|
||||
echo = sink;
|
||||
}
|
||||
|
||||
if (!verbose) {
|
||||
verbose = sink;
|
||||
}
|
||||
@@ -237,7 +234,7 @@ set_if_unset(void (*echo)(const char *, ...), void (*verbose)(const char *, ...)
|
||||
}
|
||||
|
||||
setval = getenv(var);
|
||||
echo("Using [%s] for %s\n", setval ? setval : "", var);
|
||||
echo("Using [%s] for %s\n", setval, var);
|
||||
}
|
||||
|
||||
|
||||
@@ -393,7 +390,7 @@ main(int ac, char *av[])
|
||||
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("\"VGR\" mulitplier 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");
|
||||
@@ -433,7 +430,7 @@ main(int ac, char *av[])
|
||||
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("Plese 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");
|
||||
@@ -482,10 +479,6 @@ main(int ac, char *av[])
|
||||
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]);
|
||||
@@ -506,10 +499,8 @@ main(int ac, char *av[])
|
||||
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]);
|
||||
}
|
||||
bu_log("rm -f %s\n", paths[num-1]);
|
||||
bu_file_delete(paths[num-1]);
|
||||
num--;
|
||||
}
|
||||
bu_argv_free(cnt, paths);
|
||||
@@ -530,8 +521,7 @@ main(int ac, char *av[])
|
||||
bu_log("\nThe following files must be removed manually:\n");
|
||||
printed=1;
|
||||
}
|
||||
if (paths)
|
||||
bu_log("%s ", paths[num-1]);
|
||||
bu_log("%s ", paths[num-1]);
|
||||
num--;
|
||||
}
|
||||
bu_argv_free(cnt, paths);
|
||||
@@ -562,7 +552,7 @@ main(int ac, char *av[])
|
||||
{
|
||||
int fd;
|
||||
const char *logfile;
|
||||
bu_vls_printf(&str, "run-%d-benchmark.log", bu_pid());
|
||||
bu_vls_printf(&str, "run-%d-benchmark.log", bu_process_id());
|
||||
logfile = bu_vls_addr(&str);
|
||||
bu_setenv("LOGFILE", logfile, 1);
|
||||
fd = open(logfile, O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR);
|
||||
@@ -589,7 +579,6 @@ main(int ac, char *av[])
|
||||
{
|
||||
struct bu_vls v = BU_VLS_INIT_ZERO;
|
||||
char rfc2822[1024] = {0};
|
||||
const char *logfile = getenv("LOGFILE");
|
||||
#ifdef HAVE_SYS_UTSNAME_H
|
||||
struct utsname n;
|
||||
time_t t = time(NULL);
|
||||
@@ -605,7 +594,7 @@ main(int ac, char *av[])
|
||||
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", logfile ? logfile : "disabled");
|
||||
echo("Logging output to %s\n", getenv("LOGFILE"));
|
||||
echo("%s\n\n", bu_vls_addr(&v));
|
||||
}
|
||||
|
||||
@@ -654,7 +643,6 @@ main(int ac, char *av[])
|
||||
bu_setenv("PIX", bu_path_dirname(getenv("PIX")), 1);
|
||||
}
|
||||
|
||||
const char *pix_env = getenv("PIX");
|
||||
bu_vls_printf(&vp,
|
||||
"%s "
|
||||
"%s "
|
||||
@@ -663,7 +651,7 @@ main(int ac, char *av[])
|
||||
"%s/../../pix "
|
||||
"%s/../../../pix "
|
||||
"./pix",
|
||||
pix_env ? pix_env : "", pix, thisp, thisp, thisp, thisp);
|
||||
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);
|
||||
@@ -693,6 +681,11 @@ main(int ac, char *av[])
|
||||
look_for(verbose_echo, script, "a time elapsed utility", "ELP", (const char **)argv);
|
||||
bu_vls_trunc(&vp, 0);
|
||||
|
||||
bu_free(root, "strdup root");
|
||||
bu_free(db, "strdup db");
|
||||
bu_free(pix, "strdup pix");
|
||||
|
||||
|
||||
/*********************
|
||||
* output parameters *
|
||||
*********************/
|
||||
@@ -746,10 +739,8 @@ main(int ac, char *av[])
|
||||
/* 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;
|
||||
MAXTIME = strtol(getenv("MAXTIME"), NULL, 0);
|
||||
TIMEFRAME = strtol(getenv("TIMEFRAME"), NULL, 0);
|
||||
if (MAXTIME < TIMEFRAME) {
|
||||
bu_exit(1, "ERROR: MAXTIME must be greater or equal to TIMEFRAME\n");
|
||||
}
|
||||
@@ -930,6 +921,8 @@ main(int ac, char *av[])
|
||||
thisp, thisp, thisp, thisp, thisp, thisp);
|
||||
bu_argv_from_string(argv, 32, bu_vls_addr(&vp));
|
||||
|
||||
bu_free(thisp, "dirname this");
|
||||
|
||||
look_for(NULL, file, "BENCHMARK_TR", "benchmark", (const char **)argv);
|
||||
bu_vls_trunc(&vp, 0);
|
||||
|
||||
|
||||
+4
-5
@@ -1,7 +1,7 @@
|
||||
/* C L E A N . C
|
||||
* BRL-CAD
|
||||
*
|
||||
* Copyright (c) 2011-2026 United States Government as represented by
|
||||
* Copyright (c) 2011-2020 United States Government as represented by
|
||||
* the U.S. Army Research Laboratory.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -46,8 +46,7 @@
|
||||
|
||||
|
||||
/* TODO: !!! needed */
|
||||
//int bu_file_move(const char *fn1, const char *fn2) {if (!fn1 || !fn2) return -1; return 0;}
|
||||
|
||||
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);
|
||||
|
||||
|
||||
@@ -70,7 +69,7 @@ clean_obstacles(const char *base_filename, int 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));
|
||||
bu_file_move(bu_vls_cstr(&vp), bu_vls_cstr(&vpid));
|
||||
}
|
||||
|
||||
/* look for a log file */
|
||||
@@ -80,7 +79,7 @@ clean_obstacles(const char *base_filename, int 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));
|
||||
bu_file_move(bu_vls_cstr(&vp), bu_vls_cstr(&vpid));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
/* C O M P U T E . C
|
||||
* BRL-CAD
|
||||
*
|
||||
* Copyright (c) 2011-2026 United States Government as represented by
|
||||
* Copyright (c) 2011-2020 United States Government as represented by
|
||||
* the U.S. Army Research Laboratory.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
Executable
+198
@@ -0,0 +1,198 @@
|
||||
#!/bin/sh
|
||||
# L G T . S H
|
||||
# BRL-CAD
|
||||
#
|
||||
# Copyright (c) 2004-2020 United States Government as represented by
|
||||
# the U.S. Army Research Laboratory.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
#
|
||||
# 3. The name of the author may not be used to endorse or promote
|
||||
# products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
###
|
||||
# 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
|
||||
+118
-289
@@ -1,7 +1,7 @@
|
||||
/* P I X C M P . C
|
||||
* BRL-CAD
|
||||
*
|
||||
* Copyright (c) 2004-2026 United States Government as represented by
|
||||
* Copyright (c) 2004-2020 United States Government as represented by
|
||||
* the U.S. Army Research Laboratory.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -36,16 +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"
|
||||
@@ -57,59 +47,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, size_t *skip1, size_t *skip2)
|
||||
{
|
||||
const char *endptr = arg;
|
||||
long val;
|
||||
|
||||
if ((arg == NULL) || ((skip1 == NULL) && (skip2 == NULL))) {
|
||||
/* nothing to do */
|
||||
return;
|
||||
@@ -121,14 +91,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 +104,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,114 +116,45 @@ 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;
|
||||
} 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;
|
||||
} else {
|
||||
/* at least this */
|
||||
result = OFF_BY_ONE;
|
||||
|
||||
/* but maybe more */
|
||||
if (r1 != r2) {
|
||||
if ((r1 > r2 ? r1 - r2 : r2 - r1) > 1) {
|
||||
result = OFF_BY_MANY;
|
||||
}
|
||||
}
|
||||
if (g1 != g2) {
|
||||
if ((g1 > g2 ? g1 - g2 : g2 - g1) > 1) {
|
||||
result = OFF_BY_MANY;
|
||||
}
|
||||
}
|
||||
if (b1 != b2) {
|
||||
if ((b1 > b2 ? b1 - b2 : b2 - b1) > 1) {
|
||||
result = OFF_BY_MANY;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (result == OFF_BY_ONE) {
|
||||
(*off1)++;
|
||||
} else if (result == OFF_BY_MANY) {
|
||||
(*offmany)++;
|
||||
} else if (result == MATCHING) {
|
||||
(*matching)++;
|
||||
} else {
|
||||
(*missing)++;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
memset(&sf1, 0, sizeof(struct stat));
|
||||
memset(&sf2, 0, sizeof(struct stat));
|
||||
struct stat sf1, sf2;
|
||||
|
||||
size_t matching = 0;
|
||||
size_t off1 = 0;
|
||||
size_t offmany = 0;
|
||||
size_t missing = 0;
|
||||
|
||||
int c;
|
||||
int list_diff = 0;
|
||||
int list_same = 0;
|
||||
int list_pixel_values = 0;
|
||||
int print_bytes = 0;
|
||||
int quiet = 0;
|
||||
|
||||
size_t bytes = 0;
|
||||
int silent = 0;
|
||||
size_t f1_skip = 0;
|
||||
size_t f2_skip = 0;
|
||||
size_t stop_after = 0;
|
||||
size_t bytes = 0;
|
||||
|
||||
bu_setprogname(argv[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);
|
||||
}
|
||||
}
|
||||
@@ -267,17 +164,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);
|
||||
}
|
||||
|
||||
@@ -289,25 +186,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;
|
||||
@@ -315,7 +197,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) {
|
||||
@@ -323,165 +204,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], (int)sf1.st_size, argv[1], (int)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 && 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 && 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: %8zd matching, %8zd off by 1, %8zd off by many\n",
|
||||
print_bytes?"bytes":"pixels",
|
||||
matching, off1, offmany);
|
||||
}
|
||||
|
||||
/* check for errors */
|
||||
@@ -490,16 +314,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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
# Exercise pixcmp's pixel tolerance and exit-status contract with small,
|
||||
# deliberately readable byte streams.
|
||||
|
||||
if(NOT PIXCMP OR NOT TEST_DIR)
|
||||
message(FATAL_ERROR "PIXCMP and TEST_DIR are required")
|
||||
endif()
|
||||
|
||||
function(check_pixcmp name input1 input2 expected_status expected_summary)
|
||||
set(file1 "${TEST_DIR}/pixcmp_${name}_1.pix")
|
||||
set(file2 "${TEST_DIR}/pixcmp_${name}_2.pix")
|
||||
|
||||
file(WRITE "${file1}" "${input1}")
|
||||
file(WRITE "${file2}" "${input2}")
|
||||
|
||||
execute_process(
|
||||
COMMAND "${PIXCMP}" ${ARGN} "${file1}" "${file2}"
|
||||
OUTPUT_VARIABLE output
|
||||
ERROR_VARIABLE errors
|
||||
RESULT_VARIABLE status
|
||||
)
|
||||
|
||||
file(REMOVE "${file1}" "${file2}")
|
||||
|
||||
if(NOT "${status}" STREQUAL "${expected_status}")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"${name}: pixcmp returned ${status}, expected ${expected_status}\nstdout: ${output}\nstderr: ${errors}"
|
||||
)
|
||||
endif()
|
||||
|
||||
string(REGEX REPLACE "[ \t\r\n]+" " " normalized_output "${output}")
|
||||
string(STRIP "${normalized_output}" normalized_output)
|
||||
string(FIND "${normalized_output}" "${expected_summary}" summary_position)
|
||||
if(summary_position EQUAL -1)
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"${name}: expected summary '${expected_summary}'\nactual stdout: ${output}\nstderr: ${errors}"
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
set(exact_pixel "pixcmp pixels: 1 matching, 0 off by 1, 0 off by many")
|
||||
set(tolerated_pixel "pixcmp pixels: 0 matching, 1 off by 1, 0 off by many")
|
||||
set(rejected_pixel "pixcmp pixels: 0 matching, 0 off by 1, 1 off by many")
|
||||
|
||||
check_pixcmp(exact "ABC" "ABC" 0 "${exact_pixel}")
|
||||
check_pixcmp(one_channel_within_tolerance "ABC" "BBC" 1 "${tolerated_pixel}")
|
||||
check_pixcmp(two_channels_within_tolerance "ABC" "BCC" 1 "${tolerated_pixel}")
|
||||
check_pixcmp(three_channels_within_tolerance "ABC" "@CB" 1 "${tolerated_pixel}")
|
||||
|
||||
# Keep the tolerated channel first in two cases to catch short-circuiting that
|
||||
# would fail to inspect a later channel outside the tolerance.
|
||||
check_pixcmp(red_outside_tolerance "ABC" "CCD" 2 "${rejected_pixel}")
|
||||
check_pixcmp(green_outside_tolerance "ABC" "BDD" 2 "${rejected_pixel}")
|
||||
check_pixcmp(blue_outside_tolerance "ABC" "BCE" 2 "${rejected_pixel}")
|
||||
|
||||
check_pixcmp(
|
||||
missing_pixel
|
||||
"ABC"
|
||||
"ABCDEF"
|
||||
2
|
||||
"pixcmp pixels: 1 matching, 0 off by 1, 0 off by many, 1 missing"
|
||||
)
|
||||
|
||||
check_pixcmp(
|
||||
byte_within_tolerance
|
||||
"A"
|
||||
"B"
|
||||
1
|
||||
"pixcmp bytes: 0 matching, 1 off by 1, 0 off by many"
|
||||
-b
|
||||
)
|
||||
check_pixcmp(
|
||||
byte_outside_tolerance
|
||||
"A"
|
||||
"C"
|
||||
2
|
||||
"pixcmp bytes: 0 matching, 0 off by 1, 1 off by many"
|
||||
-b
|
||||
)
|
||||
+10
-11
@@ -1,29 +1,28 @@
|
||||
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})
|
||||
CMAKEFILES(CMakeLists.txt)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
|
||||
+4
-6
@@ -1,7 +1,7 @@
|
||||
/* R U N . C
|
||||
* BRL-CAD
|
||||
*
|
||||
* Copyright (c) 2011-2026 United States Government as represented by
|
||||
* Copyright (c) 2011-2020 United States Government as represented by
|
||||
* the U.S. Army Research Laboratory.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -67,14 +67,12 @@ run(int ac, char *av[])
|
||||
const char *run_geomname = av[0];
|
||||
const char *run_geometry = av[1];
|
||||
long int hypersample = strtod(av[2], NULL);
|
||||
struct bu_vls args = BU_VLS_INIT_ZERO;
|
||||
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);
|
||||
}
|
||||
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);
|
||||
|
||||
/* pipe(stdin_for_bu_exec); */
|
||||
retval = bu_exec("program", NULL, NULL, NULL);
|
||||
|
||||
+45
-86
@@ -2,7 +2,7 @@
|
||||
# R U N . S H
|
||||
# BRL-CAD
|
||||
#
|
||||
# Copyright (c) 2004-2026 United States Government as represented by
|
||||
# Copyright (c) 2004-2020 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
|
||||
|
||||
@@ -750,9 +724,9 @@ run ( ) {
|
||||
\"${DB}/${run_geomname}.g\" ${run_geometry} 1>&2 <<EOF
|
||||
$run_view
|
||||
EOF
|
||||
run_retval=$?
|
||||
$VERBOSE_ECHO "DEBUG: Running $RT returned $run_retval"
|
||||
return $run_retval
|
||||
retval=$?
|
||||
$VERBOSE_ECHO "DEBUG: Running $RT returned $retval"
|
||||
return $retval
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -986,7 +960,6 @@ bench ( ) {
|
||||
bench_frame=0
|
||||
bench_rtfms=""
|
||||
bench_percent=100
|
||||
bench_retval=0
|
||||
bench_start_time="`date '+%H %M %S'`"
|
||||
bench_overall_elapsed=-1
|
||||
|
||||
@@ -1010,10 +983,7 @@ $bench_view
|
||||
start $bench_frame;
|
||||
end;
|
||||
EOF
|
||||
bench_raytrace_retval=$?
|
||||
if test $bench_raytrace_retval != 0 ; then
|
||||
bench_retval=$bench_raytrace_retval
|
||||
fi
|
||||
retval=$?
|
||||
|
||||
if test $bench_frame -ne 0 ; then
|
||||
if test -f ${bench_testname}.pix.$bench_frame ; then
|
||||
@@ -1087,7 +1057,7 @@ EOF
|
||||
fi
|
||||
|
||||
# did we fail?
|
||||
if test $bench_raytrace_retval != 0 ; then
|
||||
if test $retval != 0 ; then
|
||||
$ECHO "RAYTRACE ERROR"
|
||||
break
|
||||
fi
|
||||
@@ -1153,33 +1123,26 @@ EOF
|
||||
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`"
|
||||
bench_cmp_retval=$?
|
||||
ret=$?
|
||||
|
||||
pixels_result="`echo \\\"$cmp_result\\\" | grep pixels`"
|
||||
if test "x$pixels_result" = "x" ; then
|
||||
$ECHO "$cmp_result"
|
||||
else
|
||||
$ECHO "$pixels_result"
|
||||
fi
|
||||
$ECHO "$cmp_result"
|
||||
|
||||
if test $bench_cmp_retval = 0 ; then
|
||||
if test $ret = 0 ; then
|
||||
# perfect match
|
||||
$ECHO ${bench_testname}.pix: answers are RIGHT
|
||||
elif test $bench_cmp_retval = 1 ; then
|
||||
elif test $ret = 1 ; then
|
||||
# off by one, acceptable
|
||||
$ECHO ${bench_testname}.pix: answers are RIGHT
|
||||
elif test $bench_cmp_retval = 2 ; then
|
||||
elif test $ret = 2 ; then
|
||||
# off by many, unacceptable
|
||||
$ECHO ${bench_testname}.pix: WRONG WRONG WRONG WRONG WRONG WRONG
|
||||
bench_retval=$bench_cmp_retval
|
||||
else
|
||||
# some other failure
|
||||
$ECHO ${bench_testname}.pix: BENCHMARK COMPARISON FAILURE
|
||||
bench_retval=$bench_cmp_retval
|
||||
fi
|
||||
|
||||
$VERBOSE_ECHO "DEBUG: Done benchmark testing on $bench_testname"
|
||||
return $bench_retval
|
||||
return $retval
|
||||
}
|
||||
|
||||
|
||||
@@ -1262,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
|
||||
@@ -1327,7 +1290,7 @@ perf ( ) {
|
||||
start="`date '+%H %M %S'`"
|
||||
$ECHO "Running the BRL-CAD Benchmark tests... please wait ..."
|
||||
$ECHO
|
||||
benchmark_retval=0
|
||||
ret=0
|
||||
|
||||
bench moss all.g $RTARGS << EOF
|
||||
viewsize 1.572026215e+02;
|
||||
@@ -1337,7 +1300,7 @@ viewrot -5.735764503e-01 8.191520572e-01 0.000000000e+00 0.000000000e+00
|
||||
7.424039245e-01 5.198368430e-01 4.226182699e-01 0.000000000e+00
|
||||
0.000000000e+00 0.000000000e+00 0.000000000e+00 1.000000000e+00 ;
|
||||
EOF
|
||||
benchmark_retval=`expr $benchmark_retval + $?`
|
||||
ret=`expr $ret + $?`
|
||||
|
||||
bench world all.g $RTARGS << EOF
|
||||
viewsize 1.572026215e+02;
|
||||
@@ -1347,7 +1310,7 @@ viewrot -5.735764503e-01 8.191520572e-01 0.000000000e+00 0.000000000e+00
|
||||
7.424039245e-01 5.198368430e-01 4.226182699e-01 0.000000000e+00
|
||||
0.000000000e+00 0.000000000e+00 0.000000000e+00 1.000000000e+00 ;
|
||||
EOF
|
||||
benchmark_retval=`expr $benchmark_retval + $?`
|
||||
ret=`expr $ret + $?`
|
||||
|
||||
bench star all $RTARGS << EOF
|
||||
viewsize 2.500000000e+05;
|
||||
@@ -1357,7 +1320,7 @@ viewrot -6.733560560e-01 6.130643360e-01 4.132114880e-01 0.000000000e+00
|
||||
4.896120540e-01 7.885590550e-01 -3.720948210e-01 0.000000000e+00
|
||||
0.000000000e+00 0.000000000e+00 0.000000000e+00 1.000000000e+00 ;
|
||||
EOF
|
||||
benchmark_retval=`expr $benchmark_retval + $?`
|
||||
ret=`expr $ret + $?`
|
||||
|
||||
bench bldg391 all.g $RTARGS << EOF
|
||||
viewsize 1.800000000e+03;
|
||||
@@ -1367,7 +1330,7 @@ viewrot -5.735764503e-01 8.191520572e-01 0.000000000e+00 0.000000000e+00
|
||||
7.424039245e-01 5.198368430e-01 4.226182699e-01 0.000000000e+00
|
||||
0.000000000e+00 0.000000000e+00 0.000000000e+00 1.000000000e+00;
|
||||
EOF
|
||||
benchmark_retval=`expr $benchmark_retval + $?`
|
||||
ret=`expr $ret + $?`
|
||||
|
||||
bench m35 all.g $RTARGS <<EOF
|
||||
viewsize 6.787387985e+03;
|
||||
@@ -1377,14 +1340,14 @@ viewrot -5.527838919e-01 8.332423558e-01 1.171090926e-02 0.000000000e+00
|
||||
6.800964482e-01 4.429747496e-01 5.841593895e-01 0.000000000e+00
|
||||
0.000000000e+00 0.000000000e+00 0.000000000e+00 1.000000000e+00 ;
|
||||
EOF
|
||||
benchmark_retval=`expr $benchmark_retval + $?`
|
||||
ret=`expr $ret + $?`
|
||||
|
||||
bench sphflake scene.r $RTARGS <<EOF
|
||||
viewsize 2.556283261452611e+04;
|
||||
orientation 4.406810841785839e-01 4.005093234738861e-01 5.226451688385938e-01 6.101102288499644e-01;
|
||||
eye_pt 2.418500583758302e+04 -3.328563644344796e+03 8.489926952850350e+03;
|
||||
EOF
|
||||
benchmark_retval=`expr $benchmark_retval + $?`
|
||||
ret=`expr $ret + $?`
|
||||
|
||||
$ECHO
|
||||
$ECHO "... Done."
|
||||
@@ -1392,7 +1355,7 @@ $ECHO
|
||||
$ECHO "Total testing time elapsed: `eval \\\"$ELP\\\" $start`"
|
||||
|
||||
# see if we fail
|
||||
if test ! "x$benchmark_retval" = "x0" ; then
|
||||
if test ! "x$ret" = "x0" ; then
|
||||
$ECHO
|
||||
$ECHO "THE BENCHMARK ANALYSIS DID NOT COMPLETE SUCCESSFULLY."
|
||||
$ECHO
|
||||
@@ -1633,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
@@ -2,7 +2,7 @@
|
||||
# T R Y . S H
|
||||
# BRL-CAD
|
||||
#
|
||||
# Copyright (c) 2004-2026 United States Government as represented by
|
||||
# Copyright (c) 2004-2020 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
@@ -2,7 +2,7 @@
|
||||
# V I E W D I F F . S H
|
||||
# BRL-CAD
|
||||
#
|
||||
# Copyright (c) 2004-2026 United States Government as represented by
|
||||
# Copyright (c) 2004-2020 United States Government as represented by
|
||||
# the U.S. Army Research Laboratory.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -0,0 +1,209 @@
|
||||
#!/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=BUNDLED";
|
||||
shift;;
|
||||
--disable-all) options="$options -DBRLCAD_BUNDLED_LIBS=SYSTEM";
|
||||
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-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-png) options="$options -DBRLCAD_PNG=BUNDLED";
|
||||
shift;;
|
||||
--disable-png) options="$options -DBRLCAD_PNG=SYSTEM";
|
||||
shift;;
|
||||
--enable-netpbm) options="$options -DBRLCAD_NETPBM=BUNDLED";
|
||||
shift;;
|
||||
--disable-netpbm) options="$options -DBRLCAD_NETPBM=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-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-spsr) options="$options -DBRLCAD_SPSR=BUNDLED";
|
||||
shift;;
|
||||
--disable-spsr) options="$options -DBRLCAD_SPSR=SYSTEM";
|
||||
shift;;
|
||||
--enable-scl) options="$options -DBRLCAD_SC=BUNDLED";
|
||||
shift;;
|
||||
--disable-scl) options="$options -DBRLCAD_SC=SYSTEM";
|
||||
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-proj4) options="$options -DBRLCAD_PROJ4=BUNDLED";
|
||||
shift;;
|
||||
--disable-proj4) options="$options -DBRLCAD_PROJ4=SYSTEM";
|
||||
shift;;
|
||||
--enable-gdal) options="$options -DBRLCAD_GDAL=BUNDLED";
|
||||
shift;;
|
||||
--disable-gdal) options="$options -DBRLCAD_GDAL=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
|
||||
Binary file not shown.
+90
-212
@@ -1,18 +1,28 @@
|
||||
function(G_TARGET in_model folder)
|
||||
# There is quite a bit of shared logic for the various converters when it comes
|
||||
# to building .g outputs, so we use a single function to manage the process and
|
||||
# handle format-specific bits internally. TODO - we probably need to add
|
||||
# optional argument support here later to support (say) specifying a specific
|
||||
# COMGEOM or STEP format version...
|
||||
|
||||
function(ADD_G_TARGET in_model folder)
|
||||
|
||||
# Initialize
|
||||
set(MODEL_TYPE "UNKNOWN")
|
||||
set(CONV_SUCCESS_CODES 0)
|
||||
|
||||
# Regardless of what we decide, let CMake know about the file
|
||||
cmakefiles(${CMAKE_CURRENT_SOURCE_DIR}/${in_model})
|
||||
# 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)
|
||||
|
||||
# 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}")
|
||||
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})
|
||||
@@ -20,169 +30,97 @@ function(G_TARGET in_model folder)
|
||||
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(CONV_OUTPUT_PATH "${CMAKE_BINARY_DIR}/${output_file}")
|
||||
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}")
|
||||
# Make sure the output db target directories are there
|
||||
if(CMAKE_CONFIGURATION_TYPES)
|
||||
foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
|
||||
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${CFG_TYPE}/${DATA_DIR}/${rel_dir}")
|
||||
endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES})
|
||||
else(CMAKE_CONFIGURATION_TYPES)
|
||||
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${DATA_DIR}/${rel_dir}")
|
||||
endif(CMAKE_CONFIGURATION_TYPES)
|
||||
|
||||
# Rhino 3DM file
|
||||
#############################################################################
|
||||
# Build logic
|
||||
#############################################################################
|
||||
|
||||
# The 3DM conversion is rather different than the general pattern at the
|
||||
# moment (However, the 3dm approach is probably the "wave of the future" in
|
||||
# the sense that it uses libgcv...)
|
||||
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
|
||||
|
||||
set(INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${in_model}")
|
||||
set(OUTPUT_FILE "${output_file}")
|
||||
# Use the model name for the script, since the output file is specific to this input
|
||||
configure_file("${CMAKE_SOURCE_DIR}/db/conv_run.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake" @ONLY)
|
||||
|
||||
# Define the target
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/${output_file}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_BINARY_DIR}/${output_file}"
|
||||
OUTPUT ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${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
|
||||
# The rest of the conversions follow the simpler/older pattern:
|
||||
|
||||
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
|
||||
if (BRLCAD_ENABLE_TCL)
|
||||
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)
|
||||
OUTPUT ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file}
|
||||
COMMAND asc2g "${CMAKE_CURRENT_SOURCE_DIR}/${in_model}" ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file}
|
||||
DEPENDS asc2g "${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"
|
||||
OUTPUT ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file}
|
||||
COMMAND comgeom-g -v 5 ${CMAKE_CURRENT_SOURCE_DIR}/${in_model} ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file} > ${log_file} 2>&1
|
||||
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"
|
||||
OUTPUT ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file}
|
||||
COMMAND fast4-g ${CMAKE_CURRENT_SOURCE_DIR}/${in_model} ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file} > ${log_file} 2>&1
|
||||
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}\"")
|
||||
# step-g uses status 1 for useful, deliberately published partial output.
|
||||
# Installed sample databases should retain that geometry; statuses 2 and
|
||||
# above, or a missing output file, remain build failures.
|
||||
set(CONV_SUCCESS_CODES "0;1")
|
||||
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"
|
||||
OUTPUT ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file}
|
||||
COMMAND step-g -O ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file} ${CMAKE_CURRENT_SOURCE_DIR}/${in_model} > ${log_file} 2>&1
|
||||
DEPENDS step-g ${CMAKE_CURRENT_SOURCE_DIR}/${in_model}
|
||||
)
|
||||
)
|
||||
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(NOT ${MODEL_TYPE} STREQUAL "asc" OR BRLCAD_ENABLE_TCL)
|
||||
add_custom_target(${in_model_root}.g ALL DEPENDS ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file})
|
||||
set_target_properties(${in_model_root}.g PROPERTIES FOLDER "${folder}")
|
||||
|
||||
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/${output_file} DESTINATION ${DATA_DIR}/${rel_dir})
|
||||
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
# Install logic
|
||||
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
install(FILES ${CMAKE_CURRENT_BUILD_DIR_INSTALL}/${output_file} DESTINATION ${DATA_DIR}/${rel_dir})
|
||||
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
|
||||
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${log_file}")
|
||||
distclean("${log_file}")
|
||||
endfunction(G_TARGET in_model folder)
|
||||
# Clean-up
|
||||
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${log_file}")
|
||||
DISTCLEAN("${log_file}")
|
||||
endif(NOT ${MODEL_TYPE} STREQUAL "asc" OR BRLCAD_ENABLE_TCL)
|
||||
|
||||
function(PIX_TARGET in_image folder)
|
||||
if(NOT TARGET png-pix)
|
||||
return()
|
||||
endif(NOT TARGET png-pix)
|
||||
endfunction(ADD_G_TARGET in_model folder)
|
||||
|
||||
cmakefiles(${CMAKE_CURRENT_SOURCE_DIR}/${in_image})
|
||||
get_filename_component(in_image_root "${in_image}" NAME_WE)
|
||||
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" rel_dir "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(output_file ${DATA_DIR}/${rel_dir}/${in_image_root}.pix)
|
||||
set(output_path "${CMAKE_BINARY_DIR}/${output_file}")
|
||||
set(conversion_file "${CMAKE_CURRENT_BINARY_DIR}/${in_image_root}_pix.cmake")
|
||||
|
||||
set(PIX_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/${in_image}")
|
||||
set(PIX_OUTPUT "${output_path}")
|
||||
set(PIX_LABEL "${in_image_root}.pix")
|
||||
|
||||
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${DATA_DIR}/${rel_dir}")
|
||||
configure_file("${CMAKE_SOURCE_DIR}/db/to_pix.cmake.in" "${conversion_file}" @ONLY)
|
||||
distclean("${conversion_file}")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${output_path}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove "${output_path}"
|
||||
COMMAND ${CMAKE_COMMAND} -DEXEC=$<TARGET_FILE:png-pix> -P "${conversion_file}"
|
||||
DEPENDS png-pix "${PIX_INPUT}"
|
||||
)
|
||||
add_custom_target(${in_image_root}.pix ALL DEPENDS ${output_path})
|
||||
set_target_properties(${in_image_root}.pix PROPERTIES FOLDER "${folder}")
|
||||
|
||||
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
install(FILES ${output_path} DESTINATION ${DATA_DIR}/${rel_dir})
|
||||
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
|
||||
distclean("${output_path}")
|
||||
endfunction(PIX_TARGET in_image folder)
|
||||
|
||||
set(
|
||||
G_BENCHMARK_MODELS
|
||||
set(G_BENCHMARK_MODELS
|
||||
bldg391.asc
|
||||
m35.asc
|
||||
moss.asc
|
||||
@@ -191,14 +129,10 @@ set(
|
||||
world.asc
|
||||
)
|
||||
|
||||
set(
|
||||
G_SAMPLE_MODELS
|
||||
set(G_SAMPLE_MODELS
|
||||
aet.asc
|
||||
arb8_showcase.asc
|
||||
annual_gift_man.asc
|
||||
axis.asc
|
||||
bearing.asc
|
||||
bicycle_wheel.asc
|
||||
boolean-ops.asc
|
||||
castle.asc
|
||||
cornell.asc
|
||||
@@ -208,8 +142,6 @@ set(
|
||||
cube.asc
|
||||
demo.asc
|
||||
die.asc
|
||||
earth.asc
|
||||
gaia.asc
|
||||
galileo.asc
|
||||
goliath.asc
|
||||
havoc.asc
|
||||
@@ -217,18 +149,13 @@ set(
|
||||
ktank.asc
|
||||
lgt-test.asc
|
||||
operators.asc
|
||||
photo_holder.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
|
||||
@@ -239,114 +166,65 @@ add_subdirectory(comgeom)
|
||||
add_subdirectory(nist)
|
||||
add_subdirectory(faa)
|
||||
|
||||
pix_target(earth.png "BRL-CAD Geometry Models/Sample")
|
||||
|
||||
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
brlcad_adddata(earth.png db)
|
||||
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
|
||||
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})
|
||||
|
||||
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})
|
||||
|
||||
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)
|
||||
if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
BRLCAD_ADDDATA(terra.dsp db)
|
||||
endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY)
|
||||
|
||||
if(SH_EXEC)
|
||||
if(TARGET mged OR TARGET gcv)
|
||||
set(conversion_g_files)
|
||||
set(conversion_g_files_fp)
|
||||
set(conversion_deps_list)
|
||||
set(conversion_g_files)
|
||||
set(conversion_g_files_fp)
|
||||
set(conversion_deps_list)
|
||||
|
||||
if (BRLCAD_ENABLE_TCL)
|
||||
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)
|
||||
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})
|
||||
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})
|
||||
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)
|
||||
Sh_Conversion_Test(${GROOT}.g "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)
|
||||
Sh_Conversion_Test(${GROOT}.g "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)
|
||||
add_custom_target(convert COMMAND ${SH_EXEC} ${CMAKE_SOURCE_DIR}/sh/conversion.sh GED=$<TARGET_FILE:mged> ${conversion_g_files_fp})
|
||||
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 (BRLCAD_ENABLE_TCL)
|
||||
endif(SH_EXEC)
|
||||
|
||||
cmakefiles(
|
||||
CMAKEFILES(
|
||||
${G_BENCHMARK_MODELS}
|
||||
${G_SAMPLE_MODELS}
|
||||
1647260.dsp
|
||||
CMakeLists.txt
|
||||
aet.rt
|
||||
cornell.rt
|
||||
cube.rt
|
||||
db.php
|
||||
ebm_logo.bw
|
||||
earth.png
|
||||
include/ctype.inc
|
||||
include/debug.inc
|
||||
terra.bin
|
||||
to_g.cmake.in
|
||||
to_pix.cmake.in
|
||||
traffic_light.rt
|
||||
vol_data.bw
|
||||
)
|
||||
|
||||
# Local Variables:
|
||||
|
||||
@@ -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}
|
||||
@@ -1,205 +0,0 @@
|
||||
title {ARB8 Unit Test Showcase}
|
||||
units mm
|
||||
attr set {_GLOBAL}
|
||||
|
||||
put {SpanningUnitCube} 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 {SpanningUnitCube.r} comb region yes tree {l SpanningUnitCube}
|
||||
attr set {SpanningUnitCube.r} {region} {R} {region_id} {8400} {material_id} {1} {los} {100} {rgb} {250/245/180} {oshader} {plastic}
|
||||
|
||||
put {UnitCube_Q1} arb8 V1 {0 0 0} V2 {1 0 0} V3 {1 1 0} V4 {0 1 0} V5 {0 0 1} V6 {1 0 1} V7 {1 1 1} V8 {0 1 1}
|
||||
put {UnitCube_Q1.r} comb region yes tree {l UnitCube_Q1}
|
||||
attr set {UnitCube_Q1.r} {region} {R} {region_id} {8401} {material_id} {1} {los} {100} {rgb} {255/106/106} {oshader} {plastic}
|
||||
|
||||
put {UnitCube_Q2} arb8 V1 {-1 0 0} V2 {0 0 0} V3 {0 1 0} V4 {-1 1 0} V5 {-1 0 1} V6 {0 0 1} V7 {0 1 1} V8 {-1 1 1}
|
||||
put {UnitCube_Q2.r} comb region yes tree {l UnitCube_Q2}
|
||||
attr set {UnitCube_Q2.r} {region} {R} {region_id} {8402} {material_id} {1} {los} {100} {rgb} {255/170/92} {oshader} {plastic}
|
||||
|
||||
put {UnitCube_Q3} arb8 V1 {-1 -1 0} V2 {0 -1 0} V3 {0 0 0} V4 {-1 0 0} V5 {-1 -1 1} V6 {0 -1 1} V7 {0 0 1} V8 {-1 0 1}
|
||||
put {UnitCube_Q3.r} comb region yes tree {l UnitCube_Q3}
|
||||
attr set {UnitCube_Q3.r} {region} {R} {region_id} {8403} {material_id} {1} {los} {100} {rgb} {255/224/102} {oshader} {plastic}
|
||||
|
||||
put {UnitCube_Q4} arb8 V1 {0 -1 0} V2 {1 -1 0} V3 {1 0 0} V4 {0 0 0} V5 {0 -1 1} V6 {1 -1 1} V7 {1 0 1} V8 {0 0 1}
|
||||
put {UnitCube_Q4.r} comb region yes tree {l UnitCube_Q4}
|
||||
attr set {UnitCube_Q4.r} {region} {R} {region_id} {8404} {material_id} {1} {los} {100} {rgb} {191/224/64} {oshader} {plastic}
|
||||
|
||||
put {UnitCube_Q5} arb8 V1 {0 0 -1} V2 {1 0 -1} V3 {1 1 -1} V4 {0 1 -1} V5 {0 0 0} V6 {1 0 0} V7 {1 1 0} V8 {0 1 0}
|
||||
put {UnitCube_Q5.r} comb region yes tree {l UnitCube_Q5}
|
||||
attr set {UnitCube_Q5.r} {region} {R} {region_id} {8405} {material_id} {1} {los} {100} {rgb} {105/206/107} {oshader} {plastic}
|
||||
|
||||
put {UnitCube_Q6} arb8 V1 {-1 0 -1} V2 {0 0 -1} V3 {0 1 -1} V4 {-1 1 -1} V5 {-1 0 0} V6 {0 0 0} V7 {0 1 0} V8 {-1 1 0}
|
||||
put {UnitCube_Q6.r} comb region yes tree {l UnitCube_Q6}
|
||||
attr set {UnitCube_Q6.r} {region} {R} {region_id} {8406} {material_id} {1} {los} {100} {rgb} {82/197/194} {oshader} {plastic}
|
||||
|
||||
put {UnitCube_Q7} arb8 V1 {-1 -1 -1} V2 {0 -1 -1} V3 {0 0 -1} V4 {-1 0 -1} V5 {-1 -1 0} V6 {0 -1 0} V7 {0 0 0} V8 {-1 0 0}
|
||||
put {UnitCube_Q7.r} comb region yes tree {l UnitCube_Q7}
|
||||
attr set {UnitCube_Q7.r} {region} {R} {region_id} {8407} {material_id} {1} {los} {100} {rgb} {92/146/255} {oshader} {plastic}
|
||||
|
||||
put {UnitCube_Q8} arb8 V1 {0 -1 -1} V2 {1 -1 -1} V3 {1 0 -1} V4 {0 0 -1} V5 {0 -1 0} V6 {1 -1 0} V7 {1 0 0} V8 {0 0 0}
|
||||
put {UnitCube_Q8.r} comb region yes tree {l UnitCube_Q8}
|
||||
attr set {UnitCube_Q8.r} {region} {R} {region_id} {8408} {material_id} {1} {los} {100} {rgb} {165/122/255} {oshader} {plastic}
|
||||
|
||||
put {Elongated_X1} arb8 V1 {-1 0 0} V2 {1 0 0} V3 {1 1 0} V4 {-1 1 0} V5 {-1 0 1} V6 {1 0 1} V7 {1 1 1} V8 {-1 1 1}
|
||||
put {Elongated_X1.r} comb region yes tree {l Elongated_X1}
|
||||
attr set {Elongated_X1.r} {region} {R} {region_id} {8409} {material_id} {1} {los} {100} {rgb} {255/120/120} {oshader} {plastic}
|
||||
|
||||
put {Elongated_X2} arb8 V1 {-1 -1 0} V2 {1 -1 0} V3 {1 0 0} V4 {-1 0 0} V5 {-1 -1 1} V6 {1 -1 1} V7 {1 0 1} V8 {-1 0 1}
|
||||
put {Elongated_X2.r} comb region yes tree {l Elongated_X2}
|
||||
attr set {Elongated_X2.r} {region} {R} {region_id} {8410} {material_id} {1} {los} {100} {rgb} {214/72/72} {oshader} {plastic}
|
||||
|
||||
put {Elongated_Y1} arb8 V1 {0 -1 0} V2 {1 -1 0} V3 {1 1 0} V4 {0 1 0} V5 {0 -1 1} V6 {1 -1 1} V7 {1 1 1} V8 {0 1 1}
|
||||
put {Elongated_Y1.r} comb region yes tree {l Elongated_Y1}
|
||||
attr set {Elongated_Y1.r} {region} {R} {region_id} {8411} {material_id} {1} {los} {100} {rgb} {255/191/94} {oshader} {plastic}
|
||||
|
||||
put {Elongated_Y2} arb8 V1 {-1 -1 0} V2 {0 -1 0} V3 {0 1 0} V4 {-1 1 0} V5 {-1 -1 1} V6 {0 -1 1} V7 {0 1 1} V8 {-1 1 1}
|
||||
put {Elongated_Y2.r} comb region yes tree {l Elongated_Y2}
|
||||
attr set {Elongated_Y2.r} {region} {R} {region_id} {8412} {material_id} {1} {los} {100} {rgb} {214/150/60} {oshader} {plastic}
|
||||
|
||||
put {Elongated_Z1} arb8 V1 {0 0 -1} V2 {1 0 -1} V3 {1 1 -1} V4 {0 1 -1} V5 {0 0 1} V6 {1 0 1} V7 {1 1 1} V8 {0 1 1}
|
||||
put {Elongated_Z1.r} comb region yes tree {l Elongated_Z1}
|
||||
attr set {Elongated_Z1.r} {region} {R} {region_id} {8413} {material_id} {1} {los} {100} {rgb} {114/210/255} {oshader} {plastic}
|
||||
|
||||
put {Elongated_Z2} arb8 V1 {-1 0 -1} V2 {0 0 -1} V3 {0 1 -1} V4 {-1 1 -1} V5 {-1 0 1} V6 {0 0 1} V7 {0 1 1} V8 {-1 1 1}
|
||||
put {Elongated_Z2.r} comb region yes tree {l Elongated_Z2}
|
||||
attr set {Elongated_Z2.r} {region} {R} {region_id} {8414} {material_id} {1} {los} {100} {rgb} {63/152/214} {oshader} {plastic}
|
||||
|
||||
put {ReverseUnitCube} arb8 V1 {0 0 0} V2 {0 1 0} V3 {1 1 0} V4 {1 0 0} V5 {0 0 1} V6 {0 1 1} V7 {1 1 1} V8 {1 0 1}
|
||||
put {ReverseUnitCube.r} comb region yes tree {l ReverseUnitCube}
|
||||
attr set {ReverseUnitCube.r} {region} {R} {region_id} {8415} {material_id} {1} {los} {100} {rgb} {230/230/230} {oshader} {plastic}
|
||||
|
||||
put {TopSlanted} arb8 V1 {0 0 0} V2 {1 0 0} V3 {1 1 0} V4 {0 1 0} V5 {0.2 0.2 1} V6 {1.2 0.2 1} V7 {1.2 1.2 1} V8 {0.2 1.2 1}
|
||||
put {TopSlanted.r} comb region yes tree {l TopSlanted}
|
||||
attr set {TopSlanted.r} {region} {R} {region_id} {8416} {material_id} {1} {los} {100} {rgb} {255/164/132} {oshader} {plastic}
|
||||
|
||||
put {UnevenSlanted} arb8 V1 {0 0 0} V2 {1 0 0} V3 {1 1 0} V4 {0 1 0} V5 {0.1 0.3 1} V6 {1.1 0.3 1} V7 {1.3 1.3 1} V8 {0.1 1.3 1}
|
||||
put {UnevenSlanted.r} comb region yes tree {l UnevenSlanted}
|
||||
attr set {UnevenSlanted.r} {region} {R} {region_id} {8417} {material_id} {1} {los} {100} {rgb} {255/132/178} {oshader} {plastic}
|
||||
|
||||
put {OppositeSlanted} arb8 V1 {0 0 0} V2 {1 0 0} V3 {1 1 0} V4 {0 1 0} V5 {-0.2 0.2 1} V6 {0.8 0.2 1} V7 {0.8 1.2 1} V8 {-0.2 1.2 1}
|
||||
put {OppositeSlanted.r} comb region yes tree {l OppositeSlanted}
|
||||
attr set {OppositeSlanted.r} {region} {R} {region_id} {8418} {material_id} {1} {los} {100} {rgb} {210/132/255} {oshader} {plastic}
|
||||
|
||||
put {PlanarARB6} arb8 V1 {0 0 0} V2 {1 0 0} V3 {1 1 0} V4 {0.5 0.5 0} V5 {0 0 1} V6 {1 0 1} V7 {1 1 1} V8 {0.5 0.5 1}
|
||||
put {PlanarARB6.r} comb region yes tree {l PlanarARB6}
|
||||
attr set {PlanarARB6.r} {region} {R} {region_id} {8419} {material_id} {1} {los} {100} {rgb} {165/152/255} {oshader} {plastic}
|
||||
|
||||
put {ConcavePlanar} arb8 V1 {0 0 0} V2 {1 0 0} V3 {1 1 0} V4 {0.6 0.4 0} V5 {0 0 1} V6 {1 0 1} V7 {1 1 1} V8 {0.6 0.4 1}
|
||||
put {ConcavePlanar.r} comb region yes tree {l ConcavePlanar}
|
||||
attr set {ConcavePlanar.r} {region} {R} {region_id} {8420} {material_id} {1} {los} {100} {rgb} {124/219/168} {oshader} {plastic}
|
||||
|
||||
put {MoreConcavePlanar} arb8 V1 {0 0 0} V2 {1 0 0} V3 {0.3 0.3 0} V4 {0 1 0} V5 {0 0 1} V6 {1 0 1} V7 {0.3 0.3 1} V8 {0 1 1}
|
||||
put {MoreConcavePlanar.r} comb region yes tree {l MoreConcavePlanar}
|
||||
attr set {MoreConcavePlanar.r} {region} {R} {region_id} {8421} {material_id} {1} {los} {100} {rgb} {61/184/132} {oshader} {plastic}
|
||||
|
||||
put {TwistedCubeNonPlanar} arb8 V1 {0 0 0} V2 {1 0 0} V3 {1 1 0} V4 {0 1 0} V5 {-0.183 0.317 1} V6 {0.683 -0.183 1} V7 {1.183 0.683 1} V8 {0.317 1.183 1}
|
||||
put {TwistedCubeNonPlanar.r} comb region yes tree {l TwistedCubeNonPlanar}
|
||||
attr set {TwistedCubeNonPlanar.r} {region} {R} {region_id} {8422} {material_id} {1} {los} {100} {rgb} {120/233/255} {oshader} {plastic}
|
||||
|
||||
put {LongConvexPlanar} arb8 V1 {4281 -119 1531} V2 {4281 78 1531} V3 {3322 78 1475} V4 {3322 -119 1475} V5 {4275 -119 1629} V6 {4275 78 1649} V7 {3315 78 1593} V8 {3315 -119 1573}
|
||||
put {LongConvexPlanar.r} comb region yes tree {l LongConvexPlanar}
|
||||
attr set {LongConvexPlanar.r} {region} {R} {region_id} {8423} {material_id} {1} {los} {100} {rgb} {255/216/128} {oshader} {plastic}
|
||||
|
||||
put {TaperedConvexPlanar} arb8 V1 {122.749 2.4 40.725} V2 {122.749 -7.4 40.725} V3 {122.611 -5 43.244} V4 {122.611 0 43.244} V5 {105.434 2.4 39.708} V6 {105.434 -7.4 39.708} V7 {105.295 -5 42.228} V8 {105.295 0 42.228}
|
||||
put {TaperedConvexPlanar.r} comb region yes tree {l TaperedConvexPlanar}
|
||||
attr set {TaperedConvexPlanar.r} {region} {R} {region_id} {8424} {material_id} {1} {los} {100} {rgb} {255/172/104} {oshader} {plastic}
|
||||
|
||||
put {BigConcavePlanar} arb8 V1 {500 -500 -500} V2 {500 500 -500} V3 {500 -169.922 -304.688} V4 {500 -500 500} V5 {400 -500 -500} V6 {400 500 -500} V7 {400 -169.922 -304.688} V8 {400 -500 500}
|
||||
put {BigConcavePlanar.r} comb region yes tree {l BigConcavePlanar}
|
||||
attr set {BigConcavePlanar.r} {region} {R} {region_id} {8425} {material_id} {1} {los} {100} {rgb} {255/115/87} {oshader} {plastic}
|
||||
|
||||
put {WarpedNonPlanar} arb8 V1 {0 0 0} V2 {1 0 0.1} V3 {1.1 1 0} V4 {0 1.1 -0.1} V5 {0.1 0 1} V6 {1 0.1 1.1} V7 {1.1 1.1 0.9} V8 {0 1 1}
|
||||
put {WarpedNonPlanar.r} comb region yes tree {l WarpedNonPlanar}
|
||||
attr set {WarpedNonPlanar.r} {region} {R} {region_id} {8426} {material_id} {1} {los} {100} {rgb} {255/99/156} {oshader} {plastic}
|
||||
|
||||
put {TwistedTopNonPlanar} arb8 V1 {0 0 0} V2 {1 0 -0.1} V3 {1.1 1.1 0} V4 {0 1.2 0.1} V5 {0.2 0 0.9} V6 {1 0.1 1.2} V7 {1.2 1.2 0.8} V8 {0 1 1}
|
||||
put {TwistedTopNonPlanar.r} comb region yes tree {l TwistedTopNonPlanar}
|
||||
attr set {TwistedTopNonPlanar.r} {region} {R} {region_id} {8427} {material_id} {1} {los} {100} {rgb} {216/118/255} {oshader} {plastic}
|
||||
|
||||
put {ComplexNonPlanar} arb8 V1 {0 0 0} V2 {0.8 0 0.1} V3 {1.1 0.9 0.2} V4 {0.1 1.1 -0.2} V5 {0.2 -0.2 0.8} V6 {1 0 1.1} V7 {1.1 0.9 0.9} V8 {0 1 0.9}
|
||||
put {ComplexNonPlanar.r} comb region yes tree {l ComplexNonPlanar}
|
||||
attr set {ComplexNonPlanar.r} {region} {R} {region_id} {8428} {material_id} {1} {los} {100} {rgb} {139/132/255} {oshader} {plastic}
|
||||
|
||||
put {ConcaveNonPlanar} arb8 V1 {0 0 0} V2 {1 0 0} V3 {1 1 0} V4 {0 1 0} V5 {0 0 1} V6 {0.4 0.4 1} V7 {1 1 1} V8 {0 1 1}
|
||||
put {ConcaveNonPlanar.r} comb region yes tree {l ConcaveNonPlanar}
|
||||
attr set {ConcaveNonPlanar.r} {region} {R} {region_id} {8429} {material_id} {1} {los} {100} {rgb} {110/207/255} {oshader} {plastic}
|
||||
|
||||
put {MoreConcaveNonPlanar} arb8 V1 {0 0 0} V2 {1 0 -0.05} V3 {1 1 0.03} V4 {0.7 0.3 0.32} V5 {0 0 1} V6 {1 0 1.1} V7 {1 1 0.92} V8 {0.7 0.3 0.7}
|
||||
put {MoreConcaveNonPlanar.r} comb region yes tree {l MoreConcaveNonPlanar}
|
||||
attr set {MoreConcaveNonPlanar.r} {region} {R} {region_id} {8430} {material_id} {1} {los} {100} {rgb} {89/188/197} {oshader} {plastic}
|
||||
|
||||
put {MostConcaveNonPlanar} arb8 V1 {0.2 0 0} V2 {1 0.3 0.1} V3 {1.1 1 -0.25} V4 {0.4 0.6 0} V5 {0 0.2 1} V6 {0.9 0 1.25} V7 {1 0.8 0.6} V8 {0.4 0.3 0.8}
|
||||
put {MostConcaveNonPlanar.r} comb region yes tree {l MostConcaveNonPlanar}
|
||||
attr set {MostConcaveNonPlanar.r} {region} {R} {region_id} {8431} {material_id} {1} {los} {100} {rgb} {71/226/179} {oshader} {plastic}
|
||||
|
||||
put {LargeSaddlePlanar} arb8 V1 {1000 -1000 -1000} V2 {1000 1000 -900} V3 {1000 1000 1100} V4 {1000 -1000 1000} V5 {-1000 -1000 -900} V6 {-1000 1000 -1000} V7 {-1000 1000 1000} V8 {-1000 -1000 1100}
|
||||
put {LargeSaddlePlanar.r} comb region yes tree {l LargeSaddlePlanar}
|
||||
attr set {LargeSaddlePlanar.r} {region} {R} {region_id} {8432} {material_id} {1} {los} {100} {rgb} {198/242/117} {oshader} {plastic}
|
||||
|
||||
put {groundplane} arb8 V1 {-1100 -800 -190} V2 {1100 -800 -190} V3 {1100 800 -190} V4 {-1100 800 -190} V5 {-1100 -800 -170} V6 {1100 -800 -170} V7 {1100 800 -170} V8 {-1100 800 -170}
|
||||
put {groundplane.r} comb region yes tree {l groundplane}
|
||||
attr set {groundplane.r} {region} {R} {region_id} {8433} {material_id} {1} {los} {100} {rgb} {240/240/240} {oshader} {stack {{checker {b {190 190 190} s 20}} {plastic {di .85 sp .15}}}}
|
||||
|
||||
put {lightpanel} arb8 V1 {-260 -160 1640} V2 {260 -160 1640} V3 {260 160 1640} V4 {-260 160 1640} V5 {-260 -160 1660} V6 {260 -160 1660} V7 {260 160 1660} V8 {-260 160 1660}
|
||||
put {light.r} comb region yes tree {l lightpanel}
|
||||
attr set {light.r} {region} {R} {region_id} {8434} {material_id} {1} {los} {100} {rgb} {255/255/245} {oshader} {light {s 32 v 0}} {shader} {light {s 32 v 0}}
|
||||
|
||||
put {SpanningUnitCube.place} comb region no tree {l SpanningUnitCube.r {49.4183462128 -6.50277282681 33.3997156149 -520 16.0569940398 56.3810489085 -12.7808554638 340 -30 19.4651295794 48.177886322 20 0 0 0 1}}
|
||||
put {UnitCube_Q1.place} comb region no tree {l UnitCube_Q1.r {95.3783673293 -58.1118549187 43.8859814008 -372.171276719 66.7846517861 98.6327164348 -14.5395163089 396.483654405 -29.030627472 35.9805442786 110.736728785 16.1566772042 0 0 0 1}}
|
||||
put {UnitCube_Q2.place} comb region no tree {l UnitCube_Q2.r {-95.3783673293 -58.1118549187 43.8859814008 -748.981217092 66.7846517861 -98.6327164348 14.5395163089 547.361506317 29.030627472 35.9805442786 110.736728785 16.1566772042 0 0 0 1}}
|
||||
put {UnitCube_Q3.place} comb region no tree {l UnitCube_Q3.r {-95.3783673293 72.8090108537 1.34721346343 -720.363255156 -66.7846517861 -88.341657059 46.2121403301 107.408195052 29.030627472 35.9805442786 110.736728785 52.1372214828 0 0 0 1}}
|
||||
put {UnitCube_Q4.place} comb region no tree {l UnitCube_Q4.r {95.3783673293 72.8090108537 1.34721346343 -343.553314783 -66.7846517861 88.341657059 -46.2121403301 308.746644227 -29.030627472 35.9805442786 110.736728785 52.1372214828 0 0 0 1}}
|
||||
put {UnitCube_Q5.place} comb region no tree {l UnitCube_Q5.r {39.8232820043 -110.312342921 -25.402622104 -418.792147629 109.413568075 30.603715996 38.6274991197 505.434410305 -29.030627472 -35.9805442786 110.736728785 52.8739502678 0 0 0 1}}
|
||||
put {UnitCube_Q6.place} comb region no tree {l UnitCube_Q6.r {-39.8232820043 -110.312342921 -25.402622104 -576.121413559 109.413568075 -30.603715996 -38.6274991197 606.824195257 29.030627472 -35.9805442786 110.736728785 52.8739502678 0 0 0 1}}
|
||||
put {UnitCube_Q7.place} comb region no tree {l UnitCube_Q7.r {-39.8232820043 104.175846754 44.2888153308 -544.343942924 -109.413568075 -47.4636006473 13.2618903102 52.063058013 29.030627472 -35.9805442786 110.736728785 16.8934059891 0 0 0 1}}
|
||||
put {UnitCube_Q8.place} comb region no tree {l UnitCube_Q8.r {39.8232820043 104.175846754 44.2888153308 -387.014676995 -109.413568075 47.4636006473 -13.2618903102 195.678336425 -29.030627472 -35.9805442786 110.736728785 16.8934059891 0 0 0 1}}
|
||||
|
||||
put {Elongated_X1.place} comb region no tree {l Elongated_X1.r {52.9768555715 8.7044814766 26.7896393402 702.252939592 0 57.0633909777 -18.5410196625 320.738814342 -28.1682937672 16.3707486802 50.3839837041 6.62263380786 0 0 0 1}}
|
||||
put {Elongated_X2.place} comb region no tree {l Elongated_X2.r {-53.927642778 8.12784805209 -25.0149441426 336.571396097 0 -57.0633909777 -18.5410196625 320.738814342 -26.3022688073 -16.664558085 51.2882360724 -53.9763970787 0 0 0 1}}
|
||||
put {Elongated_Y1.place} comb region no tree {l Elongated_Y1.r {24.8029823249 -45.5382654557 30.1840760513 592.506470812 53.190167245 27.696794106 -1.92190132524 487.570947797 -12.4747014491 27.5527489651 51.8191841717 -29.6722413613 0 0 0 1}}
|
||||
put {Elongated_Y2.place} comb region no tree {l Elongated_Y2.r {-24.8029823249 50.4884080186 -20.8742119261 418.035614801 -53.190167245 -17.0811791223 21.8869693709 129.256350935 12.4747014491 27.5527489651 51.8191841717 10.3277586387 0 0 0 1}}
|
||||
put {Elongated_Z1.place} comb region no tree {l Elongated_Z1.r {-28.1907786236 -48.449629644 21.3989109057 458.320204134 48.827860881 -14.3810251633 31.7651714468 495.981662898 -20.5212085995 32.3391326817 46.1850678792 29.0910379589 0 0 0 1}}
|
||||
put {Elongated_Z2.place} comb region no tree {l Elongated_Z2.r {28.5316954889 37.2470428028 37.3978629734 615.642326343 -49.4183462128 33.7844747485 4.0541735977 125.193508762 -18.5410196625 -32.7302164431 46.7435933735 -7.9054016097 0 0 0 1}}
|
||||
|
||||
put {ReverseUnitCube.place} comb region no tree {l ReverseUnitCube.r {103.433991196 -60.555851917 5.86500332073 -784.3715713 48.2320622081 88.6693278124 64.8954426786 -345.89841635 -37.082039325 -53.5792786803 100.767967408 14.9466752985 0 0 0 1}}
|
||||
put {TopSlanted.place} comb region no tree {l TopSlanted.r {96.3287340793 15.3039561576 -22.0581938655 -655.950517209 -20.4753045059 95.0207291039 -23.4909119866 -277.981798765 17.3648177667 27.1449805028 94.6657970834 -64.0387775034 0 0 0 1}}
|
||||
put {UnevenSlanted.place} comb region no tree {l UnevenSlanted.r {88.2050542109 -14.8789457562 22.785860616 -499.054900804 21.9919900071 84.4965683945 -29.9565078782 -299.239309022 -16.0290625539 34.053736387 84.2859552411 -35.8590156121 0 0 0 1}}
|
||||
put {OppositeSlanted.place} comb region no tree {l OppositeSlanted.r {82.3639103546 42.0405555876 -38.0628159361 -319.138489526 -47.5528258148 87.7679736664 -5.95915728267 -275.660075233 30.9016994375 23.0081395245 92.2806073208 -60.3058671501 0 0 0 1}}
|
||||
put {PlanarARB6.place} comb region no tree {l PlanarARB6.r {115.594480895 8.17480470115 31.1622937968 -837.465789697 20.3824258028 71.3324119214 -94.3199010171 -433.697468354 -24.9494028981 96.1501928109 67.3250898065 -79.2629398596 0 0 0 1}}
|
||||
put {ConcavePlanar.place} comb region no tree {l ConcavePlanar.r {107.244094838 -4.19493374266 53.6759411037 -678.362551099 -34.8457187174 85.7908832775 76.3262748569 -498.635719709 -41.0424171991 -83.7993250412 75.4532511765 6.69424553188 0 0 0 1}}
|
||||
put {MoreConcavePlanar.place} comb region no tree {l MoreConcavePlanar.r {98.2385703033 -68.8300310449 3.40736424785 -456.407951753 52.2343743832 70.4997088106 -81.8618420903 -455.436120552 44.9527912099 68.4997655761 87.6757017563 -114.564129271 0 0 0 1}}
|
||||
put {TwistedCubeNonPlanar.place} comb region no tree {l TwistedCubeNonPlanar.r {58.6764988003 -36.5971430924 54.1750992397 -318.127227474 52.8325568251 69.4213241451 -10.3259123031 -490.963984334 -38.5099104061 39.4785086222 68.3787827407 -18.6736904784 0 0 0 1}}
|
||||
|
||||
put {WarpedNonPlanar.place} comb region no tree {l WarpedNonPlanar.r {85.9669900169 48.3491658661 16.4934771193 257.879375705 -34.7329185229 78.9947205011 -50.5317573791 -244.078112398 -37.4606593416 37.7119648521 84.7024598739 -20.4894479677 0 0 0 1}}
|
||||
put {TwistedTopNonPlanar.place} comb region no tree {l TwistedTopNonPlanar.r {83.4930920481 -37.5301552898 11.8785977012 485.889009209 27.1285501058 75.0409121486 46.407039684 -331.825549179 -28.5246456346 -38.4845294501 78.9049785729 30.8077668357 0 0 0 1}}
|
||||
put {ComplexNonPlanar.place} comb region no tree {l ComplexNonPlanar.r {68.2221969569 -62.1661301805 -1.34690754179 691.058658649 49.5663274432 55.5767314233 -54.5446254664 -272.725927774 37.5449208993 39.589256647 74.4565627193 -51.9703252094 0 0 0 1}}
|
||||
put {ConcaveNonPlanar.place} comb region no tree {l ConcaveNonPlanar.r {99.563920506 36.7265877365 56.0194920247 243.844999866 -52.9390755862 104.63063394 25.4928365894 -473.592197472 -41.0424171991 -45.8648906522 103.014231036 -8.05346159232 0 0 0 1}}
|
||||
put {MoreConcaveNonPlanar.place} comb region no tree {l MoreConcaveNonPlanar.r {91.7377293852 -5.0835848262 49.4652906758 450.703650116 19.4994563335 99.1649372544 -25.9722011215 -480.696791205 -45.7430761867 32.0771132385 88.131144304 -21.4358692855 0 0 0 1}}
|
||||
put {MostConcaveNonPlanar.place} comb region no tree {l MostConcaveNonPlanar.r {58.9095344445 52.9796505277 11.0825710686 635.568645257 -49.4309686252 45.9860647701 42.9169102771 -452.26445478 22.0509884654 -38.4504678375 66.5981638694 5.79810832812 0 0 0 1}}
|
||||
|
||||
put {LongConvexPlanar.place} comb region no tree {l LongConvexPlanar.r {0.115561944047 0.0319553637337 0.0324930028006 -639.003248908 -0.0245634494865 0.1182771118 -0.0289597166373 280.951739329 -0.0383872042702 0.0205154324115 0.116348798857 4.47834436767 0 0 0 1}}
|
||||
put {TaperedConvexPlanar.place} comb region no tree {l TaperedConvexPlanar.r {5.7378157661 -3.26643327706 1.91741052485 -591.929831404 2.55464017008 5.90709171549 2.41840036102 -236.823025558 -2.7964018087 -1.30585617557 6.14357028226 90.775965566 0 0 0 1}}
|
||||
put {BigConcavePlanar.place} comb region no tree {l BigConcavePlanar.r {0.0998972458041 0.0482115762187 -0.0457841042204 -194.953760612 -0.0576757017563 0.103947290059 -0.0163851858765 -114.04593421 0.033076482698 0.0356455440104 0.109705703974 -4.88441721412 0 0 0 1}}
|
||||
put {LargeSaddlePlanar.place} comb region no tree {l LargeSaddlePlanar.r {0.0470204253358 -0.0323394992732 0.0029227573361 149.853862133 0.0293816227061 0.0445634112955 0.0203992338904 -141.019961695 -0.01382410832 -0.0152828427629 0.0532976065944 41.3351196703 0 0 0 1}}
|
||||
|
||||
put {arb8_quadrants.c} comb region no tree {u {u {u {u {u {u {u {u {l SpanningUnitCube.place} {l UnitCube_Q1.place}} {l UnitCube_Q2.place}} {l UnitCube_Q3.place}} {l UnitCube_Q4.place}} {l UnitCube_Q5.place}} {l UnitCube_Q6.place}} {l UnitCube_Q7.place}} {l UnitCube_Q8.place}}
|
||||
attr set {arb8_quadrants.c} {inherit} {1}
|
||||
|
||||
put {arb8_axes.c} comb region no tree {u {u {u {u {u {l Elongated_X1.place} {l Elongated_X2.place}} {l Elongated_Y1.place}} {l Elongated_Y2.place}} {l Elongated_Z1.place}} {l Elongated_Z2.place}}
|
||||
attr set {arb8_axes.c} {inherit} {1}
|
||||
|
||||
put {arb8_planar.c} comb region no tree {u {u {u {u {u {u {u {l ReverseUnitCube.place} {l TopSlanted.place}} {l UnevenSlanted.place}} {l OppositeSlanted.place}} {l PlanarARB6.place}} {l ConcavePlanar.place}} {l MoreConcavePlanar.place}} {l TwistedCubeNonPlanar.place}}
|
||||
attr set {arb8_planar.c} {inherit} {1}
|
||||
|
||||
put {arb8_nonplanar.c} comb region no tree {u {u {u {u {u {l WarpedNonPlanar.place} {l TwistedTopNonPlanar.place}} {l ComplexNonPlanar.place}} {l ConcaveNonPlanar.place}} {l MoreConcaveNonPlanar.place}} {l MostConcaveNonPlanar.place}}
|
||||
attr set {arb8_nonplanar.c} {inherit} {1}
|
||||
|
||||
put {arb8_large_planars.c} comb region no tree {u {u {u {l LongConvexPlanar.place} {l TaperedConvexPlanar.place}} {l BigConcavePlanar.place}} {l LargeSaddlePlanar.place}}
|
||||
attr set {arb8_large_planars.c} {inherit} {1}
|
||||
|
||||
put {arb8_small_gallery.c} comb region no tree {u {u {u {l arb8_quadrants.c} {l arb8_axes.c}} {l arb8_planar.c}} {l arb8_nonplanar.c}}
|
||||
attr set {arb8_small_gallery.c} {inherit} {1}
|
||||
|
||||
put {arb8_large_gallery.c} comb region no tree {l arb8_large_planars.c}
|
||||
attr set {arb8_large_gallery.c} {inherit} {1}
|
||||
|
||||
put {arb8_showcase} comb region no tree {u {u {u {l arb8_small_gallery.c} {l arb8_large_gallery.c}} {l groundplane.r}} {l light.r}}
|
||||
attr set {arb8_showcase} {inherit} {1}
|
||||
@@ -1,350 +0,0 @@
|
||||
title {Small bicycle wheel by lbutler}
|
||||
units in
|
||||
put {rcastooth.s28_1_1_29} comb region no tree {l rcastooth.s {1 0 0 53.4214 0 1 0 -37.1824 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s18_1_1_19} comb region no tree {l rcastooth.s {1 0 0 34.6765 0 1 0 -25.1939 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s27_1_1_28} comb region no tree {l rcastooth.s {1 0 0 44.8431 0 1 0 -47.175 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s17_1_1_18} comb region no tree {l rcastooth.s {1 0 0 25.1939 0 1 0 -34.6765 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s26_1_1_27} comb region no tree {l rcastooth.s {1 0 0 55.6095 0 1 0 -13.1797 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s16_1_1_17} comb region no tree {l rcastooth.s {1 0 0 34.0469 0 1 0 -13.1898 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s25_1_1_26} comb region no tree {l rcastooth.s {1 0 0 51.0711 0 1 0 -25.6489 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s15_1_1_16} comb region no tree {l rcastooth.s {1 0 0 26.9831 0 1 0 -24.5983 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s24_1_1_25} comb region no tree {l rcastooth.s {1 0 0 43.7794 0 1 0 -36.7353 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s29_1_1_30} comb region no tree {l rcastooth.s {1 0 0 59.8127 0 1 0 -25.6676 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_18} comb region no tree {l rhspkh2 {1 0 0 1.18e-05 0 1 0 -7.67456 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s14_1_1_15} comb region no tree {l rcastooth.s {1 0 0 29.8752 0 1 0 -13.3013 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s23_1_1_24} comb region no tree {l rcastooth.s {1 0 0 34.1276 0 1 0 -45.8413 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_17} comb region no tree {l rhspkh2 {1 0 0 -2.62489 0 1 0 -14.8863 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s19_1_1_20} comb region no tree {l rcastooth.s {1 0 0 40.7647 0 1 0 -13.2452 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_16} comb region no tree {l rhspkh2 {1 0 0 -7.55799 0 1 0 -20.7653 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_15} comb region no tree {l rhspkh2 {1 0 0 -14.2043 0 1 0 -24.6026 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s13_1_1_14} comb region no tree {l rcastooth.s {1 0 0 21.8822 0 1 0 -24.3027 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s22_1_1_23} comb region no tree {l rcastooth.s {1 0 0 47.3876 0 1 0 -13.2774 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_14} comb region no tree {l rhspkh2 {1 0 0 -21.7623 0 1 0 -25.9353 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_13} comb region no tree {l rhspkh2 {1 0 0 -29.3202 0 1 0 -24.6026 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s12_1_1_13} comb region no tree {l rcastooth.s {1 0 0 25.5268 0 1 0 -13.3975 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s21_1_1_22} comb region no tree {l rcastooth.s {1 0 0 42.0481 0 1 0 -25.57 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s30_1_1_31} comb region no tree {l rcastooth.s {1 0 0 63.7552 0 1 0 -13.102 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_12} comb region no tree {l rhspkh2 {1 0 0 -35.9666 0 1 0 -20.7654 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_11} comb region no tree {l rhspkh2 {1 0 0 -40.8997 0 1 0 -14.8863 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s11_1_1_12} comb region no tree {l rcastooth.s {1 0 0 16.3767 0 1 0 -23.7258 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s20_1_1_21} comb region no tree {l rcastooth.s {1 0 0 33.5901 0 1 0 -35.9663 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_10} comb region no tree {l rhspkh2 {1 0 0 -43.5246 0 1 0 -7.67456 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s10_1_1_11} comb region no tree {l rcastooth.s {1 0 0 20.8336 0 1 0 -13.389 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_9} comb region no tree {l rhspkh2 {1 0 0 -43.5246 0 1 0 4e-07 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_8} comb region no tree {l rhspkh2 {1 0 0 -40.8997 0 1 0 7.21172 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_7} comb region no tree {l rhspkh2 {1 0 0 -35.9666 0 1 0 13.0907 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_6} comb region no tree {l rhspkh2 {1 0 0 -29.3202 0 1 0 16.928 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_5} comb region no tree {l rhspkh2 {1 0 0 -21.7623 0 1 0 18.2607 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_4} comb region no tree {l rhspkh2 {1 0 0 -14.2043 0 1 0 16.928 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_3} comb region no tree {l rhspkh2 {1 0 0 -7.55799 0 1 0 13.0908 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_2} comb region no tree {l rhspkh2 {1 0 0 -2.62489 0 1 0 7.21172 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh2_1_1_1} comb region no tree {l rhspkh2 {1 0 0 1.18e-05 0 1 0 4e-07 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_18} comb region no tree {l rhspkh {1 0 0 -1.3327 0 1 0 -7.55796 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_17} comb region no tree {l rhspkh {1 0 0 -5.1699 0 1 0 -14.2043 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_16} comb region no tree {l rhspkh {1 0 0 -11.049 0 1 0 -19.1374 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_15} comb region no tree {l rhspkh {1 0 0 -18.2607 0 1 0 -21.7623 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_14} comb region no tree {l rhspkh {1 0 0 -25.9353 0 1 0 -21.7623 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_13} comb region no tree {l rhspkh {1 0 0 -33.147 0 1 0 -19.1374 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_12} comb region no tree {l rhspkh {1 0 0 -39.0261 0 1 0 -14.2043 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_11} comb region no tree {l rhspkh {1 0 0 -42.8633 0 1 0 -7.55796 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_10} comb region no tree {l rhspkh {1 0 0 -44.196 0 1 0 -4.57038e-12 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s9_1_1_10} comb region no tree {l rcastooth.s {1 0 0 18.4941 0 1 0 -13.4368 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s} tgc V {0 0 -0.3755760995733843365940174} H {0 0 2.57364612783325474865137} A {0 -4.762499999999999289457264 0} B {4.762499999999999289457264 0 0} C {0 -4.762499999999999289457264 0} D {4.762499999999999289457264 0 0}
|
||||
put {rcassette.r} comb region yes tree {u {u {u {u {l rcas11t.c1} {l rcas12t.c1}} {u {l rcas14t.c1} {l rcas16t.c1}}} {u {u {l rcas18t.c1} {l rcas21t.c1}} {u {l rcas24t.c1} {l rcas28t.c1}}}} {u {l rcas32t.c1} {l rcas.s2}}}
|
||||
attr set {rcassette.r} {region} {R} {region_id} {1002} {material_id} {1} {los} {100}
|
||||
put {rhspkh_1_1_9} comb region no tree {l rhspkh {1 0 0 -42.8633 0 1 0 7.55796 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_8} comb region no tree {l rhspkh {1 0 0 -39.0261 0 1 0 14.2043 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_7} comb region no tree {l rhspkh {1 0 0 -33.147 0 1 0 19.1374 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_6} comb region no tree {l rhspkh {1 0 0 -25.9353 0 1 0 21.7623 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_5} comb region no tree {l rhspkh {1 0 0 -18.2607 0 1 0 21.7623 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_4} comb region no tree {l rhspkh {1 0 0 -11.049 0 1 0 19.1374 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_3} comb region no tree {l rhspkh {1 0 0 -5.1699 0 1 0 14.2043 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_2} comb region no tree {l rhspkh {1 0 0 -1.3327 0 1 0 7.55796 0 0 1 0 0 0 0 1}}
|
||||
put {rhspkh_1_1_1} comb region no tree {l rhspkh}
|
||||
put {rcastooth.s8_1_1_9} comb region no tree {l rcastooth.s {1 0 0 7.06413 0 1 0 -21.7412 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1_1_8} comb region no tree {l rcastooth.s {1 0 0 -7.06413 0 1 0 -21.7412 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1_1_7} comb region no tree {l rcastooth.s {1 0 0 -18.4941 0 1 0 -13.4368 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1_1_6} comb region no tree {l rcastooth.s {1 0 0 -22.86 0 1 0 -4.72798e-12 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1_1_5} comb region no tree {l rcastooth.s {1 0 0 -18.4941 0 1 0 13.4368 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1_1_4} comb region no tree {l rcastooth.s {1 0 0 -7.06413 0 1 0 21.7412 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1_1_3} comb region no tree {l rcastooth.s {1 0 0 7.06413 0 1 0 21.7412 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1_1_2} comb region no tree {l rcastooth.s {1 0 0 18.4941 0 1 0 13.4368 0 0 1 0 0 0 0 1}}
|
||||
put {rcas28t.s1-1} comb region no tree {u {u {u {u {u {l rcastooth.s_1_1_8} {l rcastooth.s1_1__7}} {u {l rcastooth.s2_1__7} {l rcastooth.s3_1__7}}} {u {u {l rcastooth.s4_1__7} {l rcastooth.s5_1__7}} {u {l rcastooth.s6_1__7} {l rcastooth.s7_1__7}}}} {u {u {u {l rcastooth.s8_1__7} {l rcastooth.s9_1__7}} {u {l rcastooth.s10_1_6} {l rcastooth.s11_1_5}}} {u {u {l rcastooth.s12_1_5} {l rcastooth.s13_1_4}} {u {l rcastooth.s14_1_4} {l rcastooth.s15_1_3}}}}} {u {u {u {u {l rcastooth.s16_1_3} {l rcastooth.s17_1_2}} {u {l rcastooth.s18_1_2} {l rcastooth.s19_1_2}}} {u {u {l rcastooth.s20_1_1} {l rcastooth.s21_1_1}} {u {l rcastooth.s22_1_1} {l rcastooth.s23_1_1_24}}}} {u {u {l rcastooth.s24_1_1_25} {l rcastooth.s25_1_1_26}} {l rcastooth.s26_1_1_27}}}}
|
||||
put {rcas18t.s1-1} comb region no tree {u {u {u {u {u {l rcastooth.s_1_1_5} {l rcastooth.s1_1__4}} {u {l rcastooth.s2_1__4} {l rcastooth.s3_1__4}}} {u {u {l rcastooth.s4_1__4} {l rcastooth.s5_1__4}} {u {l rcastooth.s6_1__4} {l rcastooth.s7_1__4}}}} {u {u {u {l rcastooth.s8_1__4} {l rcastooth.s9_1__4}} {u {l rcastooth.s10_1_3} {l rcastooth.s11_1_2}}} {u {u {l rcastooth.s12_1_2} {l rcastooth.s13_1_1}} {u {l rcastooth.s14_1_1} {l rcastooth.s15_1_1_16}}}}} {l rcastooth.s16_1_1_17}}
|
||||
put {rcas16t.s1-1} comb region no tree {u {u {u {u {l rcastooth.s_1_1_4} {l rcastooth.s1_1__3}} {u {l rcastooth.s2_1__3} {l rcastooth.s3_1__3}}} {u {u {l rcastooth.s4_1__3} {l rcastooth.s5_1__3}} {u {l rcastooth.s6_1__3} {l rcastooth.s7_1__3}}}} {u {u {u {l rcastooth.s8_1__3} {l rcastooth.s9_1__3}} {u {l rcastooth.s10_1_2} {l rcastooth.s11_1_1}}} {u {u {l rcastooth.s12_1_1} {l rcastooth.s13_1_1_14}} {l rcastooth.s14_1_1_15}}}}
|
||||
put {rcas24t.s1-1} comb region no tree {u {u {u {u {u {l rcastooth.s_1_1_7} {l rcastooth.s1_1__6}} {u {l rcastooth.s2_1__6} {l rcastooth.s3_1__6}}} {u {u {l rcastooth.s4_1__6} {l rcastooth.s5_1__6}} {u {l rcastooth.s6_1__6} {l rcastooth.s7_1__6}}}} {u {u {u {l rcastooth.s8_1__6} {l rcastooth.s9_1__6}} {u {l rcastooth.s10_1_5} {l rcastooth.s11_1_4}}} {u {u {l rcastooth.s12_1_4} {l rcastooth.s13_1_3}} {u {l rcastooth.s14_1_3} {l rcastooth.s15_1_2}}}}} {u {u {u {l rcastooth.s16_1_2} {l rcastooth.s17_1_1}} {u {l rcastooth.s18_1_1} {l rcastooth.s19_1_1}}} {u {u {l rcastooth.s20_1_1_21} {l rcastooth.s21_1_1_22}} {l rcastooth.s22_1_1_23}}}}
|
||||
put {rcas14t.s1-1} comb region no tree {u {u {u {u {l rcastooth.s_1_1_3} {l rcastooth.s1_1__2}} {u {l rcastooth.s2_1__2} {l rcastooth.s3_1__2}}} {u {u {l rcastooth.s4_1__2} {l rcastooth.s5_1__2}} {u {l rcastooth.s6_1__2} {l rcastooth.s7_1__2}}}} {u {u {u {l rcastooth.s8_1__2} {l rcastooth.s9_1__2}} {u {l rcastooth.s10_1_1} {l rcastooth.s11_1_1_12}}} {l rcastooth.s12_1_1_13}}}
|
||||
put {rcas32t.s1-1} comb region no tree {u {u {u {u {u {l rcastooth.s_1_1_9} {l rcastooth.s1_1__8}} {u {l rcastooth.s2_1__8} {l rcastooth.s3_1__8}}} {u {u {l rcastooth.s4_1__8} {l rcastooth.s5_1__8}} {u {l rcastooth.s6_1__8} {l rcastooth.s7_1__8}}}} {u {u {u {l rcastooth.s8_1__8} {l rcastooth.s9_1__8}} {u {l rcastooth.s10_1_7} {l rcastooth.s11_1_6}}} {u {u {l rcastooth.s12_1_6} {l rcastooth.s13_1_5}} {u {l rcastooth.s14_1_5} {l rcastooth.s15_1_4}}}}} {u {u {u {u {l rcastooth.s16_1_4} {l rcastooth.s17_1_3}} {u {l rcastooth.s18_1_3} {l rcastooth.s19_1_3}}} {u {u {l rcastooth.s20_1_2} {l rcastooth.s21_1_2}} {u {l rcastooth.s22_1_2} {l rcastooth.s23_1_1}}}} {u {u {u {l rcastooth.s24_1_1} {l rcastooth.s25_1_1}} {u {l rcastooth.s26_1_1} {l rcastooth.s27_1_1_28}}} {u {u {l rcastooth.s28_1_1_29} {l rcastooth.s29_1_1_30}} {l rcastooth.s30_1_1_31}}}}}
|
||||
put {rcas12t.s1-1} comb region no tree {u {u {u {u {l rcastooth.s_1_1_2} {l rcastooth.s1_1__1}} {u {l rcastooth.s2_1__1} {l rcastooth.s3_1__1}}} {u {u {l rcastooth.s4_1__1} {l rcastooth.s5_1__1}} {u {l rcastooth.s6_1__1} {l rcastooth.s7_1__1}}}} {u {u {l rcastooth.s8_1__1} {l rcastooth.s9_1__1}} {l rcastooth.s10_1_1_11}}}
|
||||
put {rcas21t.s1-1} comb region no tree {u {u {u {u {u {l rcastooth.s_1_1_6} {l rcastooth.s1_1__5}} {u {l rcastooth.s2_1__5} {l rcastooth.s3_1__5}}} {u {u {l rcastooth.s4_1__5} {l rcastooth.s5_1__5}} {u {l rcastooth.s6_1__5} {l rcastooth.s7_1__5}}}} {u {u {u {l rcastooth.s8_1__5} {l rcastooth.s9_1__5}} {u {l rcastooth.s10_1_4} {l rcastooth.s11_1_3}}} {u {u {l rcastooth.s12_1_3} {l rcastooth.s13_1_2}} {u {l rcastooth.s14_1_2} {l rcastooth.s15_1_1}}}}} {u {u {l rcastooth.s16_1_1} {l rcastooth.s17_1_1_18}} {u {l rcastooth.s18_1_1_19} {l rcastooth.s19_1_1_20}}}}
|
||||
put {rcas11t.s1-1} comb region no tree {u {u {u {u {l rcastooth.s_1_1_1} {l rcastooth.s1_1_1_2}} {u {l rcastooth.s2_1_1_3} {l rcastooth.s3_1_1_4}}} {u {u {l rcastooth.s4_1_1_5} {l rcastooth.s5_1_1_6}} {u {l rcastooth.s6_1_1_7} {l rcastooth.s7_1_1_8}}}} {u {l rcastooth.s8_1_1_9} {l rcastooth.s9_1_1_10}}}
|
||||
put {rcastooth.s9_1__8} comb region no tree {l rcastooth.s {1 0 0 -16.3143 0 1 0 63.0097 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s8_1__8} comb region no tree {l rcastooth.s {1 0 0 -3.29663 0 1 0 65.004 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s9_1__7} comb region no tree {l rcastooth.s {1 0 0 -28.575 0 1 0 49.4934 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1__8} comb region no tree {l rcastooth.s {1 0 0 9.85606 0 1 0 64.3369 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s8_1__7} comb region no tree {l rcastooth.s {1 0 0 -16.3908 0 1 0 54.7491 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s9_1__6} comb region no tree {l rcastooth.s {1 0 0 -38.1747 0 1 0 31.0574 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1__8} comb region no tree {l rcastooth.s {1 0 0 22.6052 0 1 0 61.0359 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1__7} comb region no tree {l rcastooth.s {1 0 0 -3.32298 0 1 0 57.0533 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s8_1__6} comb region no tree {l rcastooth.s {1 0 0 -28.3799 0 1 0 40.2051 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1__8} comb region no tree {l rcastooth.s {1 0 0 34.4289 0 1 0 55.2361 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s9_1__5} comb region no tree {l rcastooth.s {1 0 0 -40.7647 0 1 0 13.2452 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1__7} comb region no tree {l rcastooth.s {1 0 0 9.92399 0 1 0 56.2818 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1__6} comb region no tree {l rcastooth.s {1 0 0 -16.4803 0 1 0 46.371 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1__8} comb region no tree {l rcastooth.s {1 0 0 44.8431 0 1 0 47.175 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s8_1__5} comb region no tree {l rcastooth.s {1 0 0 -34.6765 0 1 0 25.1939 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1__7} comb region no tree {l rcastooth.s {1 0 0 22.636 0 1 0 52.4761 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s9_1__4} comb region no tree {l rcastooth.s {1 0 0 -35.8908 0 1 0 -6.70915 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1__6} comb region no tree {l rcastooth.s {1 0 0 -3.35838 0 1 0 49.0978 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1__8} comb region no tree {l rcastooth.s {1 0 0 53.4214 0 1 0 37.1824 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1__5} comb region no tree {l rcastooth.s {1 0 0 -25.1939 0 1 0 34.6765 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1__7} comb region no tree {l rcastooth.s {1 0 0 34.1276 0 1 0 45.8413 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s8_1__4} comb region no tree {l rcastooth.s {1 0 0 -35.8908 0 1 0 6.70915 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1__6} comb region no tree {l rcastooth.s {1 0 0 10.0126 0 1 0 48.1832 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1__8} comb region no tree {l rcastooth.s {1 0 0 59.8127 0 1 0 25.6676 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s9_1__3} comb region no tree {l rcastooth.s {1 0 0 -26.4569 0 1 0 -19.222 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1__5} comb region no tree {l rcastooth.s {1 0 0 -13.2452 0 1 0 40.7647 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1__7} comb region no tree {l rcastooth.s {1 0 0 43.7794 0 1 0 36.7353 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1__4} comb region no tree {l rcastooth.s {1 0 0 -31.0436 0 1 0 19.2214 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1__6} comb region no tree {l rcastooth.s {1 0 0 22.641 0 1 0 43.6951 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1__8} comb region no tree {l rcastooth.s {1 0 0 63.7552 0 1 0 13.102 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s8_1__3} comb region no tree {l rcastooth.s {1 0 0 -31.9879 0 1 0 -6.79923 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1__5} comb region no tree {l rcastooth.s {1 0 0 -2.18745e-10 0 1 0 42.8625 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1__7} comb region no tree {l rcastooth.s {1 0 0 51.0711 0 1 0 25.6489 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s9_1__2} comb region no tree {l rcastooth.s {1 0 0 -10.2229 0 1 0 -26.9556 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1__4} comb region no tree {l rcastooth.s {1 0 0 -22.0037 0 1 0 29.1376 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1__6} comb region no tree {l rcastooth.s {1 0 0 33.5901 0 1 0 35.9663 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1__3} comb region no tree {l rcastooth.s {1 0 0 -31.9879 0 1 0 6.79923 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1__5} comb region no tree {l rcastooth.s {1 0 0 13.2452 0 1 0 40.7647 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1__7} comb region no tree {l rcastooth.s {1 0 0 55.6095 0 1 0 13.1797 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s8_1__2} comb region no tree {l rcastooth.s {1 0 0 -21.5788 0 1 0 -19.1172 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1__4} comb region no tree {l rcastooth.s {1 0 0 -9.99212 0 1 0 35.1187 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1__6} comb region no tree {l rcastooth.s {1 0 0 42.0481 0 1 0 25.57 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s9_1__1} comb region no tree {l rcastooth.s {1 0 0 10.2878 0 1 0 -22.527 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1__3} comb region no tree {l rcastooth.s {1 0 0 -26.4569 0 1 0 19.222 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1__5} comb region no tree {l rcastooth.s {1 0 0 25.1939 0 1 0 34.6765 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1__2} comb region no tree {l rcastooth.s {1 0 0 -27.9913 0 1 0 -6.89923 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1__4} comb region no tree {l rcastooth.s {1 0 0 3.36895 0 1 0 36.3567 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1__6} comb region no tree {l rcastooth.s {1 0 0 47.3876 0 1 0 13.2774 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s8_1__1} comb region no tree {l rcastooth.s {1 0 0 -3.52443 0 1 0 -24.5129 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1__3} comb region no tree {l rcastooth.s {1 0 0 -16.3513 0 1 0 28.3212 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1__5} comb region no tree {l rcastooth.s {1 0 0 34.6765 0 1 0 25.1939 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1__2} comb region no tree {l rcastooth.s {1 0 0 -27.9913 0 1 0 6.89923 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1__4} comb region no tree {l rcastooth.s {1 0 0 16.275 0 1 0 32.6846 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s7_1__1} comb region no tree {l rcastooth.s {1 0 0 -16.2176 0 1 0 -18.7161 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1__3} comb region no tree {l rcastooth.s {1 0 0 -3.41834 0 1 0 32.5234 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1__5} comb region no tree {l rcastooth.s {1 0 0 40.7647 0 1 0 13.2452 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1__2} comb region no tree {l rcastooth.s {1 0 0 -21.5788 0 1 0 19.1172 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1__4} comb region no tree {l rcastooth.s {1 0 0 26.9831 0 1 0 24.5983 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s6_1__1} comb region no tree {l rcastooth.s {1 0 0 -23.7618 0 1 0 -6.97711 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1__3} comb region no tree {l rcastooth.s {1 0 0 10.1056 0 1 0 31.1019 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1__2} comb region no tree {l rcastooth.s {1 0 0 -10.2229 0 1 0 26.9556 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1__4} comb region no tree {l rcastooth.s {1 0 0 34.0469 0 1 0 13.1898 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s5_1__1} comb region no tree {l rcastooth.s {1 0 0 -23.7618 0 1 0 6.97711 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1__3} comb region no tree {l rcastooth.s {1 0 0 21.8822 0 1 0 24.3027 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_9} comb region no tree {l rcastooth.s {1 0 0 65.0875 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1__2} comb region no tree {l rcastooth.s {1 0 0 3.47495 0 1 0 28.6188 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s4_1__1} comb region no tree {l rcastooth.s {1 0 0 -16.2176 0 1 0 18.7161 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1__3} comb region no tree {l rcastooth.s {1 0 0 29.8752 0 1 0 13.3013 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1__2} comb region no tree {l rcastooth.s {1 0 0 16.3767 0 1 0 23.7258 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_8} comb region no tree {l rcastooth.s {1 0 0 57.15 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s3_1__1} comb region no tree {l rcastooth.s {1 0 0 -3.52443 0 1 0 24.5129 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1__2} comb region no tree {l rcastooth.s {1 0 0 25.5268 0 1 0 13.3975 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s2_1__1} comb region no tree {l rcastooth.s {1 0 0 10.2878 0 1 0 22.527 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_7} comb region no tree {l rcastooth.s {1 0 0 49.2125 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s1_1__1} comb region no tree {l rcastooth.s {1 0 0 20.8336 0 1 0 13.389 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_6} comb region no tree {l rcastooth.s {1 0 0 42.8625 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_5} comb region no tree {l rcastooth.s {1 0 0 36.5125 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_4} comb region no tree {l rcastooth.s {1 0 0 32.7025 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_3} comb region no tree {l rcastooth.s {1 0 0 28.829 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_2} comb region no tree {l rcastooth.s {1 0 0 24.765 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s_1_1_1} comb region no tree {l rcastooth.s {1 0 0 22.86 0 1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcas28t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -57.14999999999999857891453 0} B {57.14999999999999857891453 0 0} C {0 -57.14999999999999857891453 0} D {57.14999999999999857891453 0 0}
|
||||
put {rcas18t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -36.51249999999999573674359 0} B {36.51249999999999573674359 0 0} C {0 -36.51249999999999573674359 0} D {36.51249999999999573674359 0 0}
|
||||
put {spkl_1_1_9} comb region no tree {l spkl {0.766044 0.642788 0 0 -0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkk_1_1_9} comb region no tree {l spkk {0.766044 0.642788 0 0 -0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcas16t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -32.70250000000000056843419 0} B {32.70250000000000056843419 0 0} C {0 -32.70250000000000056843419 0} D {32.70250000000000056843419 0 0}
|
||||
put {spkj_1_1_9} comb region no tree {l spkj {0.766044 0.642788 0 0 -0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkl_1_1_8} comb region no tree {l spkl {0.173648 0.984808 0 0 -0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spki_1_1_9} comb region no tree {l spki {0.766044 0.642788 0 0 -0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcas24t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -49.21249999999999857891453 0} B {49.21249999999999857891453 0 0} C {0 -49.21249999999999857891453 0} D {49.21249999999999857891453 0 0}
|
||||
put {spkk_1_1_8} comb region no tree {l spkk {0.173648 0.984808 0 0 -0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkj_1_1_8} comb region no tree {l spkj {0.173648 0.984808 0 0 -0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcas14t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -28.82899999999999707256393 0} B {28.82899999999999707256393 0 0} C {0 -28.82899999999999707256393 0} D {28.82899999999999707256393 0 0}
|
||||
put {spkl_1_1_7} comb region no tree {l spkl {-0.5 0.866025 0 0 -0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcas32t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -65.08749999999999147348717 0} B {65.08749999999999147348717 0 0} C {0 -65.08749999999999147348717 0} D {65.08749999999999147348717 0 0}
|
||||
put {spki_1_1_8} comb region no tree {l spki {0.173648 0.984808 0 0 -0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkk_1_1_7} comb region no tree {l spkk {-0.5 0.866025 0 0 -0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkj_1_1_7} comb region no tree {l spkj {-0.5 0.866025 0 0 -0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkl_1_1_6} comb region no tree {l spkl {-0.939693 0.34202 0 0 -0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcas12t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -24.76499999999999701572051 0} B {24.76499999999999701572051 0 0} C {0 -24.76499999999999701572051 0} D {24.76499999999999701572051 0 0}
|
||||
put {rcas21t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -42.86249999999999715782906 0} B {42.86249999999999715782906 0 0} C {0 -42.86249999999999715782906 0} D {42.86249999999999715782906 0 0}
|
||||
put {spki_1_1_7} comb region no tree {l spki {-0.5 0.866025 0 0 -0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkk_1_1_6} comb region no tree {l spkk {-0.939693 0.34202 0 0 -0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcas11t.s1} tgc V {0 0 0} H {0 0 1.651000000000000023092639} A {0 -22.85999999999999943156581 0} B {22.85999999999999943156581 0 0} C {0 -22.85999999999999943156581 0} D {22.85999999999999943156581 0 0}
|
||||
put {spkj_1_1_6} comb region no tree {l spkj {-0.939693 0.34202 0 0 -0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkl_1_1_5} comb region no tree {l spkl {-0.939693 -0.34202 0 0 0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spki_1_1_6} comb region no tree {l spki {-0.939693 0.34202 0 0 -0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkk_1_1_5} comb region no tree {l spkk {-0.939693 -0.34202 0 0 0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkj_1_1_5} comb region no tree {l spkj {-0.939693 -0.34202 0 0 0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkl_1_1_4} comb region no tree {l spkl {-0.5 -0.866025 0 0 0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spki_1_1_5} comb region no tree {l spki {-0.939693 -0.34202 0 0 0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkk_1_1_4} comb region no tree {l spkk {-0.5 -0.866025 0 0 0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkj_1_1_4} comb region no tree {l spkj {-0.5 -0.866025 0 0 0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkl_1_1_3} comb region no tree {l spkl {0.173648 -0.984808 0 0 0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spki_1_1_4} comb region no tree {l spki {-0.5 -0.866025 0 0 0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkk_1_1_3} comb region no tree {l spkk {0.173648 -0.984808 0 0 0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkj_1_1_3} comb region no tree {l spkj {0.173648 -0.984808 0 0 0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkl_1_1_2} comb region no tree {l spkl {0.766044 -0.642788 0 0 0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spki_1_1_3} comb region no tree {l spki {0.173648 -0.984808 0 0 0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkk_1_1_2} comb region no tree {l spkk {0.766044 -0.642788 0 0 0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkj_1_1_2} comb region no tree {l spkj {0.766044 -0.642788 0 0 0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s19_1_3} comb region no tree {l rcastooth.s {1 0 0 -49.3857 0 1 0 -42.3962 0 0 1 0 0 0 0 1}}
|
||||
put {spkl_1_1_1} comb region no tree {l spkl}
|
||||
put {spki_1_1_2} comb region no tree {l spki {0.766044 -0.642788 0 0 0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {spkk_1_1_1} comb region no tree {l spkk}
|
||||
put {spkj_1_1_1} comb region no tree {l spkj}
|
||||
put {spki_1_1_1} comb region no tree {l spki}
|
||||
put {rcastooth.s18_1_3} comb region no tree {l rcastooth.s {1 0 0 -56.909 0 1 0 -31.5871 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s19_1_2} comb region no tree {l rcastooth.s {1 0 0 -16.3908 0 1 0 -54.7491 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s16_1_4} comb region no tree {l rcastooth.s {1 0 0 -64.7536 0 1 0 -6.58479 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s17_1_3} comb region no tree {l rcastooth.s {1 0 0 -62.1025 0 1 0 -19.4848 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s18_1_2} comb region no tree {l rcastooth.s {1 0 0 -28.575 0 1 0 -49.4934 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s14_1_5} comb region no tree {l rcastooth.s {1 0 0 -62.1025 0 1 0 19.4848 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s19_1_1} comb region no tree {l rcastooth.s {1 0 0 22.641 0 1 0 -43.6951 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s15_1_4} comb region no tree {l rcastooth.s {1 0 0 -64.7536 0 1 0 6.58479 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s16_1_3} comb region no tree {l rcastooth.s {1 0 0 -47.7481 0 1 0 -31.4044 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s12_1_6} comb region no tree {l rcastooth.s {1 0 0 -49.3857 0 1 0 42.3962 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s17_1_2} comb region no tree {l rcastooth.s {1 0 0 -39.2187 0 1 0 -41.5694 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s13_1_5} comb region no tree {l rcastooth.s {1 0 0 -56.909 0 1 0 31.5871 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s18_1_1} comb region no tree {l rcastooth.s {1 0 0 10.0126 0 1 0 -48.1832 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s14_1_4} comb region no tree {l rcastooth.s {1 0 0 -56.7636 0 1 0 -6.63471 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s10_1_7} comb region no tree {l rcastooth.s {1 0 0 -28.6642 0 1 0 58.4359 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s1sh} tgc V {177.7999999999999829469743 0 11.81099999999999994315658} H {38.09999999999999431565811 0 0} A {0 0 -2.285999999999999587885213} B {0 2.285999999999999587885213 0} C {0 0 -2.285999999999999587885213} D {0 2.285999999999999587885213 0}
|
||||
put {rcastooth.s15_1_3} comb region no tree {l rcastooth.s {1 0 0 -53.7034 0 1 0 -19.5465 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s11_1_6} comb region no tree {l rcastooth.s {1 0 0 -39.8404 0 1 0 51.4696 0 0 1 0 0 0 0 1}}
|
||||
put {rcas28t.c1} comb region no tree {- {l rcas28t.s1 {1 0 0 0 0 1 0 0 0 0 1 31.892875 0 0 0 1}} {l rcas28t.s1-1 {1 0 0 0 0 1 0 0 0 0 1 31.892875 0 0 0 1}}}
|
||||
put {rcastooth.s16_1_2} comb region no tree {l rcastooth.s {1 0 0 -16.4803 0 1 0 -46.371 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s12_1_5} comb region no tree {l rcastooth.s {1 0 0 -53.7034 0 1 0 19.5465 0 0 1 0 0 0 0 1}}
|
||||
put {rcas18t.c1} comb region no tree {- {l rcas18t.s1 {1 0 0 0 0 1 0 0 0 0 1 18.2245 0 0 0 1}} {l rcas18t.s1-1 {1 0 0 0 0 1 0 0 0 0 1 18.2245 0 0 0 1}}}
|
||||
put {rcastooth.s17_1_1} comb region no tree {l rcastooth.s {1 0 0 -3.35838 0 1 0 -49.0978 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s26_1_1} comb region no tree {l rcastooth.s {1 0 0 34.4289 0 1 0 -55.2361 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s13_1_4} comb region no tree {l rcastooth.s {1 0 0 -56.7636 0 1 0 6.63471 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s14_1_3} comb region no tree {l rcastooth.s {1 0 0 -38.1747 0 1 0 -31.0574 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s10_1_6} comb region no tree {l rcastooth.s {1 0 0 -39.2187 0 1 0 41.5694 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s15_1_2} comb region no tree {l rcastooth.s {1 0 0 -28.3799 0 1 0 -40.2051 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s11_1_5} comb region no tree {l rcastooth.s {1 0 0 -47.7481 0 1 0 31.4044 0 0 1 0 0 0 0 1}}
|
||||
put {rcas16t.c1} comb region no tree {- {l rcas16t.s1 {1 0 0 0 0 1 0 0 0 0 1 13.668375 0 0 0 1}} {l rcas16t.s1-1 {1 0 0 0 0 1 0 0 0 0 1 13.668375 0 0 0 1}}}
|
||||
put {rcastooth.s16_1_1} comb region no tree {l rcastooth.s {1 0 0 13.2452 0 1 0 -40.7647 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s25_1_1} comb region no tree {l rcastooth.s {1 0 0 22.6052 0 1 0 -61.0359 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s12_1_4} comb region no tree {l rcastooth.s {1 0 0 -48.7541 0 1 0 -6.7011 0 0 1 0 0 0 0 1}}
|
||||
put {rcas24t.c1} comb region no tree {- {l rcas24t.s1 {1 0 0 0 0 1 0 0 0 0 1 27.33675 0 0 0 1}} {l rcas24t.s1-1 {1 0 0 0 0 1 0 0 0 0 1 27.33675 0 0 0 1}}}
|
||||
put {rcastooth.s13_1_3} comb region no tree {l rcastooth.s {1 0 0 -45.1383 0 1 0 -19.6063 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s14_1_2} comb region no tree {l rcastooth.s {1 0 0 -13.2452 0 1 0 -40.7647 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s10_1_5} comb region no tree {l rcastooth.s {1 0 0 -45.1383 0 1 0 19.6063 0 0 1 0 0 0 0 1}}
|
||||
put {rcas14t.c1} comb region no tree {- {l rcas14t.s1 {1 0 0 0 0 1 0 0 0 0 1 9.11225 0 0 0 1}} {l rcas14t.s1-1 {1 0 0 0 0 1 0 0 0 0 1 9.11225 0 0 0 1}}}
|
||||
put {rcas32t.c1} comb region no tree {- {l rcas32t.s1 {1 0 0 0 0 1 0 0 0 0 1 36.449 0 0 0 1}} {l rcas32t.s1-1 {1 0 0 0 0 1 0 0 0 0 1 36.449 0 0 0 1}}}
|
||||
put {rcastooth.s15_1_1} comb region no tree {l rcastooth.s {1 0 0 2.2761e-10 0 1 0 -42.8625 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s24_1_1} comb region no tree {l rcastooth.s {1 0 0 9.85606 0 1 0 -64.3369 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s11_1_4} comb region no tree {l rcastooth.s {1 0 0 -48.7541 0 1 0 6.7011 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s12_1_3} comb region no tree {l rcastooth.s {1 0 0 -34.6765 0 1 0 -25.1939 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s13_1_2} comb region no tree {l rcastooth.s {1 0 0 -25.1939 0 1 0 -34.6765 0 0 1 0 0 0 0 1}}
|
||||
put {rcas12t.c1} comb region no tree {- {l rcas12t.s1 {1 0 0 0 0 1 0 0 0 0 1 4.556125 0 0 0 1}} {l rcas12t.s1-1 {1 0 0 0 0 1 0 0 0 0 1 4.556125 0 0 0 1}}}
|
||||
put {rcastooth.s22_1_2} comb region no tree {l rcastooth.s {1 0 0 -16.3143 0 1 0 -63.0097 0 0 1 0 0 0 0 1}}
|
||||
put {rcas21t.c1} comb region no tree {- {l rcas21t.s1 {1 0 0 0 0 1 0 0 0 0 1 22.780625 0 0 0 1}} {l rcas21t.s1-1 {1 0 0 0 0 1 0 0 0 0 1 22.780625 0 0 0 1}}}
|
||||
put {rcastooth.s14_1_1} comb region no tree {l rcastooth.s {1 0 0 16.275 0 1 0 -32.6846 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s23_1_1} comb region no tree {l rcastooth.s {1 0 0 -3.29663 0 1 0 -65.004 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s10_1_4} comb region no tree {l rcastooth.s {1 0 0 -42.8625 0 1 0 -8.86496e-12 0 0 1 0 0 0 0 1}}
|
||||
put {rcas11t.c1} comb region no tree {- {l rcas11t.s1} {l rcas11t.s1-1}}
|
||||
put {rcastooth.s11_1_3} comb region no tree {l rcastooth.s {1 0 0 -40.7647 0 1 0 -13.2452 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s12_1_2} comb region no tree {l rcastooth.s {1 0 0 -9.99212 0 1 0 -35.1187 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s21_1_2} comb region no tree {l rcastooth.s {1 0 0 -28.6642 0 1 0 -58.4359 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s13_1_1} comb region no tree {l rcastooth.s {1 0 0 3.36895 0 1 0 -36.3567 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s22_1_1} comb region no tree {l rcastooth.s {1 0 0 22.636 0 1 0 -52.4761 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s10_1_3} comb region no tree {l rcastooth.s {1 0 0 -31.0436 0 1 0 -19.2214 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s11_1_2} comb region no tree {l rcastooth.s {1 0 0 -22.0037 0 1 0 -29.1376 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s20_1_2} comb region no tree {l rcastooth.s {1 0 0 -39.8404 0 1 0 -51.4696 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s12_1_1} comb region no tree {l rcastooth.s {1 0 0 10.1056 0 1 0 -31.1019 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s21_1_1} comb region no tree {l rcastooth.s {1 0 0 9.92399 0 1 0 -56.2818 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s10_1_2} comb region no tree {l rcastooth.s {1 0 0 -16.3512 0 1 0 -28.3212 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s11_1_1} comb region no tree {l rcastooth.s {1 0 0 -3.41834 0 1 0 -32.5234 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s20_1_1} comb region no tree {l rcastooth.s {1 0 0 -3.32298 0 1 0 -57.0533 0 0 1 0 0 0 0 1}}
|
||||
put {rcastooth.s10_1_1} comb region no tree {l rcastooth.s {1 0 0 3.47495 0 1 0 -28.6188 0 0 1 0 0 0 0 1}}
|
||||
put {rtire.s1-1} eto V {0 0 11.81099999999999994315658} N {0 0 25.39999999999999857891453} C {15.87499999999999822364316 0 0} r 222.25 r_d 14.28749999999999964472863
|
||||
put {spokes.r} comb region yes tree {u {u {l spoke_A} {l spoke_b}} {u {l spoke_c} {l spoke_d}}}
|
||||
attr set {spokes.r} {region} {R} {region_id} {1000} {material_id} {1} {los} {100}
|
||||
put {rrim.s29sh_1_1_29} comb region no tree {l rrim.s1sh {0.173648 0.984808 0 0 -0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s19sh_1_1_19} comb region no tree {l rrim.s1sh {-1 -9.79318e-12 0 0 9.79318e-12 -1 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s28sh_1_1_28} comb region no tree {l rrim.s1sh {-1.46898e-11 1 0 0 -1 -1.46898e-11 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s18sh_1_1_18} comb region no tree {l rrim.s1sh {-0.984808 -0.173648 0 0 0.173648 -0.984808 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s27sh_1_1_27} comb region no tree {l rrim.s1sh {-0.173648 0.984808 0 0 -0.984808 -0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s36sh_1_1_36} comb region no tree {l rrim.s1sh {0.984808 0.173648 0 0 -0.173648 0.984808 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s17sh_1_1_17} comb region no tree {l rrim.s1sh {-0.939693 -0.34202 0 0 0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s26sh_1_1_26} comb region no tree {l rrim.s1sh {-0.34202 0.939693 0 0 -0.939693 -0.34202 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s35sh_1_1_35} comb region no tree {l rrim.s1sh {0.939693 0.34202 0 0 -0.34202 0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s16sh_1_1_16} comb region no tree {l rrim.s1sh {-0.866025 -0.5 0 0 0.5 -0.866025 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s25sh_1_1_25} comb region no tree {l rrim.s1sh {-0.5 0.866025 0 0 -0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s34sh_1_1_34} comb region no tree {l rrim.s1sh {0.866025 0.5 0 0 -0.5 0.866025 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s15sh_1_1_15} comb region no tree {l rrim.s1sh {-0.766044 -0.642788 0 0 0.642788 -0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s24sh_1_1_24} comb region no tree {l rrim.s1sh {-0.642788 0.766044 0 0 -0.766044 -0.642788 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s33sh_1_1_33} comb region no tree {l rrim.s1sh {0.766044 0.642788 0 0 -0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s14sh_1_1_14} comb region no tree {l rrim.s1sh {-0.642788 -0.766044 0 0 0.766044 -0.642788 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s23sh_1_1_23} comb region no tree {l rrim.s1sh {-0.766044 0.642788 0 0 -0.642788 -0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s32sh_1_1_32} comb region no tree {l rrim.s1sh {0.642788 0.766044 0 0 -0.766044 0.642788 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s13sh_1_1_13} comb region no tree {l rrim.s1sh {-0.5 -0.866025 0 0 0.866025 -0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s22sh_1_1_22} comb region no tree {l rrim.s1sh {-0.866025 0.5 0 0 -0.5 -0.866025 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s31sh_1_1_31} comb region no tree {l rrim.s1sh {0.5 0.866025 0 0 -0.866025 0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s12sh_1_1_12} comb region no tree {l rrim.s1sh {-0.34202 -0.939693 0 0 0.939693 -0.34202 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s21sh_1_1_21} comb region no tree {l rrim.s1sh {-0.939693 0.34202 0 0 -0.34202 -0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s30sh_1_1_30} comb region no tree {l rrim.s1sh {0.34202 0.939693 0 0 -0.939693 0.34202 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s11sh_1_1_11} comb region no tree {l rrim.s1sh {-0.173648 -0.984808 0 0 0.984808 -0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s20sh_1_1_20} comb region no tree {l rrim.s1sh {-0.984808 0.173648 0 0 -0.173648 -0.984808 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s10sh_1_1_10} comb region no tree {l rrim.s1sh {4.89659e-12 -1 0 0 1 4.89659e-12 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s1-4} comb region no tree {- {l rrii} {l rri}}
|
||||
put {rrim.s1-3} comb region no tree {u {u {u {u {u {u {l rrim.s1sh_1_1_1} {l rrim.s2sh_1_1_2}} {u {l rrim.s3sh_1_1_3} {l rrim.s4sh_1_1_4}}} {u {u {l rrim.s5sh_1_1_5} {l rrim.s6sh_1_1_6}} {u {l rrim.s7sh_1_1_7} {l rrim.s8sh_1_1_8}}}} {u {u {u {l rrim.s9sh_1_1_9} {l rrim.s10sh_1_1_10}} {u {l rrim.s11sh_1_1_11} {l rrim.s12sh_1_1_12}}} {u {u {l rrim.s13sh_1_1_13} {l rrim.s14sh_1_1_14}} {u {l rrim.s15sh_1_1_15} {l rrim.s16sh_1_1_16}}}}} {u {u {u {u {l rrim.s17sh_1_1_17} {l rrim.s18sh_1_1_18}} {u {l rrim.s19sh_1_1_19} {l rrim.s20sh_1_1_20}}} {u {u {l rrim.s21sh_1_1_21} {l rrim.s22sh_1_1_22}} {u {l rrim.s23sh_1_1_23} {l rrim.s24sh_1_1_24}}}} {u {u {u {l rrim.s25sh_1_1_25} {l rrim.s26sh_1_1_26}} {u {l rrim.s27sh_1_1_27} {l rrim.s28sh_1_1_28}}} {u {u {l rrim.s29sh_1_1_29} {l rrim.s30sh_1_1_30}} {u {l rrim.s31sh_1_1_31} {l rrim.s32sh_1_1_32}}}}}} {u {u {l rrim.s33sh_1_1_33} {l rrim.s34sh_1_1_34}} {u {l rrim.s35sh_1_1_35} {l rrim.s36sh_1_1_36}}}}
|
||||
put {rrim.s1-2} tgc V {0 0 25.19983160980545022766819} H {0 0 -13.38883160980544850815477} A {0 197.3801853527571950053243 0} B {197.3801853527571950053243 0 0} C {0 192.8812499999999943156581 0} D {192.8812499999999943156581 0 0}
|
||||
put {rrim.s1-1} tgc V {0 0 -1.453479018435659853025754} H {0 0 14.75836748475629534027576} A {0 -197.3384002078076662201056 0} B {197.3384002078076662201056 0 0} C {0 -192.3792713486825789459544 0} D {192.3792713486825789459544 0 0}
|
||||
put {rhub.s5-1} comb region no tree {u {u {u {u {u {l rhspkh_1_1_1} {l rhspkh_1_1_2}} {u {l rhspkh_1_1_3} {l rhspkh_1_1_4}}} {u {u {l rhspkh_1_1_5} {l rhspkh_1_1_6}} {u {l rhspkh_1_1_7} {l rhspkh_1_1_8}}}} {u {u {u {l rhspkh_1_1_9} {l rhspkh_1_1_10}} {u {l rhspkh_1_1_11} {l rhspkh_1_1_12}}} {u {u {l rhspkh_1_1_13} {l rhspkh_1_1_14}} {u {l rhspkh_1_1_15} {l rhspkh_1_1_16}}}}} {u {l rhspkh_1_1_17} {l rhspkh_1_1_18}}}
|
||||
put {rhub.s3-1} comb region no tree {u {u {u {u {u {l rhspkh2_1_1_1} {l rhspkh2_1_1_2}} {u {l rhspkh2_1_1_3} {l rhspkh2_1_1_4}}} {u {u {l rhspkh2_1_1_5} {l rhspkh2_1_1_6}} {u {l rhspkh2_1_1_7} {l rhspkh2_1_1_8}}}} {u {u {u {l rhspkh2_1_1_9} {l rhspkh2_1_1_10}} {u {l rhspkh2_1_1_11} {l rhspkh2_1_1_12}}} {u {u {l rhspkh2_1_1_13} {l rhspkh2_1_1_14}} {u {l rhspkh2_1_1_15} {l rhspkh2_1_1_16}}}}} {u {l rhspkh2_1_1_17} {l rhspkh2_1_1_18}}}
|
||||
put {rhub.s1-1} tgc V {0 0 -1.587500000000000133226763} H {0 0 149.2249999999999943156581} A {0 -2.540000000000000035527137 0} B {2.540000000000000035527137 0 0} C {0 -2.540000000000000035527137 0} D {2.540000000000000035527137 0 0}
|
||||
put {rrimi.s2} tgc V {0 0 1.016000000000000014210855} H {0 0 21.59000000000000341060513} A {0 -208.5339999999999633928383 0} B {208.5339999999999633928383 0 0} C {0 -208.5339999999999633928383 0} D {208.5339999999999633928383 0 0}
|
||||
put {rtire.s1} eto V {0 0 11.81099999999999994315658} N {0 0 25.39999999999999857891453} C {17.46249999999999857891453 0 0} r 222.25 r_d 15.875
|
||||
put {rrimi.s1} tgc V {0 0 2.032000000000000028421709} H {0 0 19.55799999999999982946974} A {0 -211.1374999999999602096068 0} B {211.1374999999999602096068 0 0} C {0 -211.1374999999999602096068 0} D {211.1374999999999602096068 0 0}
|
||||
put {rtire.r1} comb region yes tree {- {- {l rtire.s1 {1 0 0 0 0 1 0 0 0 0 1 61.214 0 0 0 1}} {l rrim.s1 {1 0 0 0 0 1 0 0 0 0 1 61.214 0 0 0 1}}} {l rtire.s1-1 {1 0 0 0 0 1 0 0 0 0 1 61.214 0 0 0 1}}}
|
||||
attr set {rtire.r1} {color} {33/33/33} {shader} {stack {{fbmbump {o 4 s 5 a 30}} {plastic {}}}} {region} {R} {region_id} {1002} {material_id} {1} {los} {100}
|
||||
put {spoke_d} comb region no tree {u {u {u {u {l spkj_1_1_1} {l spkj_1_1_2}} {u {l spkj_1_1_3} {l spkj_1_1_4}}} {u {u {l spkj_1_1_5} {l spkj_1_1_6}} {u {l spkj_1_1_7} {l spkj_1_1_8}}}} {l spkj_1_1_9}}
|
||||
put {spoke_c} comb region no tree {u {u {u {u {l spki_1_1_1} {l spki_1_1_2}} {u {l spki_1_1_3} {l spki_1_1_4}}} {u {u {l spki_1_1_5} {l spki_1_1_6}} {u {l spki_1_1_7} {l spki_1_1_8}}}} {l spki_1_1_9}}
|
||||
put {spoke_b} comb region no tree {u {u {u {u {l spkl_1_1_1} {l spkl_1_1_2}} {u {l spkl_1_1_3} {l spkl_1_1_4}}} {u {u {l spkl_1_1_5} {l spkl_1_1_6}} {u {l spkl_1_1_7} {l spkl_1_1_8}}}} {l spkl_1_1_9}}
|
||||
put {spoke_A} comb region no tree {u {u {u {u {l spkk_1_1_1} {l spkk_1_1_2}} {u {l spkk_1_1_3} {l spkk_1_1_4}}} {u {u {l spkk_1_1_5} {l spkk_1_1_6}} {u {l spkk_1_1_7} {l spkk_1_1_8}}}} {l spkk_1_1_9}}
|
||||
put {rhspkh2} tgc V {21.7622817260637724245953 3.83727743008382748968188 35.05199999999999249666871} H {0 0 3.809999999999999609201495} A {0.2756664820462519926991263 -1.563382307906880042125408 0} B {1.563382307906880042125408 0.2756664820462519926991263 0} C {0.2756664820462519926991263 -1.563382307906880042125408 0} D {1.563382307906880042125408 0.2756664820462519926991263 0}
|
||||
put {rrim.s1} tgc V {0 0 0} H {0 0 23.62199999999999988631316} A {0 -209.5499999999999829469743 0} B {209.5499999999999829469743 0 0} C {0 -209.5499999999999829469743 0} D {209.5499999999999829469743 0 0}
|
||||
put {rhub.s5} tgc V {0 0 91.5669999999999930651029} H {0 0 3.174999999999999822364316} A {0 -26.86049999999999826627572 0} B {26.8605000000000018189894 0 0} C {0 -26.86049999999999826627572 0} D {26.8605000000000018189894 0 0}
|
||||
put {rrim.r1} comb region yes tree {- {- {- {- {l rrim.s1 {1 0 0 0 0 1 0 0 0 0 1 61.214 0 0 0 1}} {l rrim.s1-1 {1 0 0 0 0 1 0 0 0 0 1 61.214 0 0 0 1}}} {l rrim.s1-2 {1 0 0 0 0 1 0 0 0 0 1 61.214 0 0 0 1}}} {l rrim.s1-3 {1 0 0 0 0 1 0 0 0 0 1 61.214 0 0 0 1}}} {l rrim.s1-4 {1 0 0 0 0 1 0 0 0 0 1 61.214 0 0 0 1}}}
|
||||
attr set {rrim.r1} {region} {R} {region_id} {1001} {material_id} {1} {los} {100}
|
||||
put {rhub.s4} tgc V {0 0 38.73499999999999232613845} H {0 0 52.83200000000000073896445} A {0 -15.04950000000000009947598 0} B {15.04950000000000009947598 0 0} C {0 -15.04950000000000009947598 0} D {15.04950000000000009947598 0 0}
|
||||
put {rhub.s3} tgc V {0 0 35.5599999999999951683094} H {0 0 3.174999999999999822364316} A {0 -26.86049999999999826627572 0} B {26.8605000000000018189894 0 0} C {0 -26.86049999999999826627572 0} D {26.8605000000000018189894 0 0}
|
||||
put {rhub.s2} tgc V {0 0 12.69999999999999928945726} H {0 0 22.85999999999999943156581} A {0 -6.349999999999999644728632 0} B {6.349999999999999644728632 0 0} C {0 -11.42999999999999971578291 0} D {11.42999999999999971578291 0 0}
|
||||
put {rcas.s2} tgc V {0 0 0} H {0 0 38.09999999999999431565811} A {0 -17.7799999999999975841547 0} B {17.7799999999999975841547 0 0} C {0 -17.7799999999999975841547 0} D {17.7799999999999975841547 0 0}
|
||||
put {rhub.s1} tgc V {0 0 0} H {0 0 146.0499999999999829469743} A {0 -4.889499999999999957367436 0} B {4.889499999999999957367436 0 0} C {0 -4.889499999999999957367436 0} D {4.889499999999999957367436 0 0}
|
||||
put {rhub.r1} comb region yes tree {u {u {u {u {- {l rhub.s1} {l rhub.s1-1}} {l rhub.s2}} {- {l rhub.s3} {l rhub.s3-1}}} {l rhub.s4}} {- {l rhub.s5} {l rhub.s5-1}}}
|
||||
attr set {rhub.r1} {color} {35/35/35} {shader} {plastic} {region} {R} {region_id} {1001} {material_id} {1} {los} {100}
|
||||
put {rhspkh} tgc V {22.09799999999999897681846 0 91.43999999999999772626325} H {0 0 3.809999999999999609201495} A {0 -1.587499999999999911182158 0} B {1.587499999999999911182158 0 0} C {0 -1.587499999999999911182158 0} D {1.587499999999999911182158 0 0}
|
||||
put {rwheel} comb region no tree {u {u {u {l rcassette.r {1 0 0 0 0 -1 0 0 0 0 -1 139.7 0 0 0 1}} {l rhub.r1}} {u {l rrim.r1} {l rtire.r1}}} {l spokes.r}}
|
||||
put {rri.s3} tor V {0 0 23.62199999999999988631316} H {0 0 0.9999999999999998889776975} r_a 196.8499999999999943156581 r_h 6.349999999999999644728632
|
||||
put {rri.s2} tor V {0 0 0} H {0 0 0.9999999999999998889776975} r_a 196.8499999999999943156581 r_h 6.349999999999999644728632
|
||||
put {rri.s1} tgc V {0 0 5.080000000000000071054274} H {0 0 13.97000000000000063948846} A {0 -196.8499999999999658939487 0} B {196.8499999999999943156581 0 0} C {0 -196.8499999999999658939487 0} D {196.8499999999999943156581 0 0}
|
||||
put {rrim.s9sh_1_1_9} comb region no tree {l rrim.s1sh {0.173648 -0.984808 0 0 0.984808 0.173648 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s8sh_1_1_8} comb region no tree {l rrim.s1sh {0.34202 -0.939693 0 0 0.939693 0.34202 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s7sh_1_1_7} comb region no tree {l rrim.s1sh {0.5 -0.866025 0 0 0.866025 0.5 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s6sh_1_1_6} comb region no tree {l rrim.s1sh {0.642788 -0.766044 0 0 0.766044 0.642788 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s5sh_1_1_5} comb region no tree {l rrim.s1sh {0.766044 -0.642788 0 0 0.642788 0.766044 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s4sh_1_1_4} comb region no tree {l rrim.s1sh {0.866025 -0.5 0 0 0.5 0.866025 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s3sh_1_1_3} comb region no tree {l rrim.s1sh {0.939693 -0.34202 0 0 0.34202 0.939693 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s2sh_1_1_2} comb region no tree {l rrim.s1sh {0.984808 -0.173648 0 0 0.173648 0.984808 0 0 0 0 1 0 0 0 0 1}}
|
||||
put {rrim.s1sh_1_1_1} comb region no tree {l rrim.s1sh}
|
||||
put {spkl} pipe V0 { 20.76709480285642683838887 7.551670837402355118683772 90.65737819671632280460472 } O0 1.337557689563829255163796 I0 -0 R0 1.778000000000000024868996 V1 { 20.77675991058347904072434 7.551670837402345348721155 91.2437280654907425514466 } O1 3.550397189753127680234002 I1 -0 R1 1.778000000000000024868996 V2 { 20.76548395156863691113358 7.551670837402342684185896 92.05237541198734163572226 } O2 1.778000000000000024868996 I2 -0 R2 1.778000000000000024868996 V3 { 20.76709480285642328567519 7.551670837402365776824809 97.27797698974610796085472 } O3 1.778000000000000024868996 I3 -0 R3 1.778000000000000024868996 V4 { 96.65107727050778407829057 -168.714120483398488659077 72.89613189697269035605132 } O4 1.778000000000000024868996 I4 -0 R4 1.778000000000000024868996
|
||||
put {spkk} pipe V0 { 22.11288281250000409272616 0.01288681030274606807706217 95.60269165039063921085472 } O0 1.785138282554655120293319 I0 -0 R0 6.598046874999998756550212 V1 { 22.11288281250000409272616 0.01288681030274606807706217 95.03567199707032386868377 } O1 4.070271197360822768018807 I1 -0 R1 6.598046874999998756550212 V2 { 22.11288281250001475086719 0.01288681030274606807706217 93.65678329467775142802566 } O2 1.778000000000000024868996 I2 -0 R2 6.598046874999998756550212 V3 { 22.10339501953125207478479 0.08911623464794377058595387 90.33015632036135400539933 } O3 1.778000000000000024868996 I3 -0 R3 2.496955272208652765186798 V4 { 33.55725402832030823674359 192.3227569580077442878974 73.30678124999998601651896 } O4 1.778000000000000024868996 I4 -0 R4 6.598046874999998756550212
|
||||
put {spkj} pipe V0 { 19.1582472419363760707256 10.97847094045843441278976 39.25328368547360469165142 } O0 1.074875597385660741522884 I0 -0 R0 1.778000000000000024868996 V1 { 19.15824724193638672886664 10.97847094045843441278976 38.81835383775631953540142 } O1 3.552089230759687854543927 I1 -0 R1 1.778000000000000024868996 V2 { 19.15824724193635120172985 10.97847094045843441278976 38.33187674882810114240783 } O2 1.778000000000000024868996 I2 -0 R2 1.778000000000000024868996 V3 { 19.15824724193635830715721 10.97847094045843441278976 32.88719939592282770490783 } O3 1.778000000000000024868996 I3 -0 R3 1.778000000000000024868996 V4 { 124.1515304565429431704615 -148.5849227905274005934189 73.63529357316897971941216 } O4 1.778000000000000024868996 I4 -0 R4 1.778000000000000024868996
|
||||
put {spki} pipe V0 { 21.85159059520787394603758 3.839178032743594037867751 34.56892814042966932674972 } O0 1.778000000000000024868996 I0 -0 R0 1.778000000000000024868996 V1 { 21.85159059520787749875126 3.839178032743594037867751 34.81377753618162529392066 } O1 3.311175825425637153642811 I1 -0 R1 1.778000000000000024868996 V2 { 21.85159059520787749875126 3.839178032743594037867751 35.07151374223631279392066 } O2 1.777999999999999802824391 I2 -0 R2 1.778000000000000024868996 V3 { 21.85159059520787394603758 3.848843140470644463846384 39.34188050630491062520377 } O3 1.777999999999999802824391 I3 -0 R3 1.778000000000000024868996 V4 { 0 192.9928710937499261035555 72.84086766820408342937299 } O4 1.777999999999999802824391 I4 -0 R4 1.778000000000000024868996
|
||||
put {rrii} comb region no tree {u {l rrimi.s1} {l rrimi.s2}}
|
||||
put {rri} comb region no tree {u {u {l rri.s1} {l rri.s2}} {l rri.s3}}
|
||||
@@ -1,5 +1,4 @@
|
||||
set(
|
||||
CHESS_PARTS
|
||||
set(CHESS_PARTS
|
||||
bishop.asc
|
||||
chessboard.asc
|
||||
king.asc
|
||||
@@ -7,16 +6,16 @@ set(
|
||||
pawn.asc
|
||||
queen.asc
|
||||
rook.asc
|
||||
)
|
||||
)
|
||||
|
||||
foreach(piece ${CHESS_PARTS})
|
||||
g_target(${piece} "BRL-CAD Geometry Models/Sample/Chess")
|
||||
ADD_G_TARGET(${piece} "BRL-CAD Geometry Models/Sample/Chess")
|
||||
endforeach(piece ${CHESS_PARTS})
|
||||
|
||||
cmakefiles(
|
||||
CMAKEFILES(
|
||||
${CHESS_PARTS}
|
||||
CMakeLists.txt
|
||||
)
|
||||
)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
set(COMGEOM_V5_MODELS ADA073408.comgeom)
|
||||
set(COMGEOM_V5_MODELS
|
||||
ADA073408.comgeom
|
||||
)
|
||||
|
||||
foreach(comgeom_input ${COMGEOM_V5_MODELS})
|
||||
g_target(${comgeom_input} "BRL-CAD Geometry Models/Sample")
|
||||
ADD_G_TARGET(${comgeom_input} "BRL-CAD Geometry Models/Sample")
|
||||
endforeach(comgeom_input ${COMGEOM_V5_MODELS})
|
||||
|
||||
cmakefiles(
|
||||
CMAKEFILES(
|
||||
${COMGEOM_V5_MODELS}
|
||||
CMakeLists.txt
|
||||
README_ADA073408
|
||||
|
||||
Executable
+41
@@ -0,0 +1,41 @@
|
||||
string(REPLACE "\\" "" GCV_EXEC "${EXEC}")
|
||||
set(INPUT_FILE "@INPUT_FILE@")
|
||||
set(OUTPUT_FILE "@OUTPUT_FILE@")
|
||||
set(BIN_DIR "@BIN_DIR@")
|
||||
|
||||
# NOTE: OUTPUT_FILE needs to be defined in terms of a path relative to the root
|
||||
# of the build diretory, not as an absolute path. Since that root may change
|
||||
# at runtime in multiconfig builds, the full output path cannot be encoded
|
||||
# directly into the generated script.
|
||||
get_filename_component(OF_ABS "${OUTPUT_FILE}" ABSOLUTE)
|
||||
if ("${OF_ABS}" STREQUAL "${OUTPUT_FILE}")
|
||||
message(FATAL_ERROR "Absoute output file path \"${OUTPUT_FILE}\" supplied for conversion of \"${INPUT_FILE}\" - path must be relative.")
|
||||
endif ("${OF_ABS}" STREQUAL "${OUTPUT_FILE}")
|
||||
|
||||
# Because the build directory changes at runtime in multiconfig builds, we
|
||||
# need to deduce its current value from GCV_EXEC.
|
||||
get_filename_component(CBDIR "${GCV_EXEC}" DIRECTORY)
|
||||
string(REGEX REPLACE "${BIN_DIR}$" "" CROOT "${CBDIR}")
|
||||
|
||||
# BRLCAD_ROOT is the hammer that makes certain we are running
|
||||
# things found in the build directory.
|
||||
set(ENV{BRLCAD_ROOT} "${CROOT}")
|
||||
|
||||
# Now that we know the root, finalize the full path output file location
|
||||
set(OUTPUT_FILE "${CROOT}/${OUTPUT_FILE}")
|
||||
|
||||
execute_process(
|
||||
COMMAND "${GCV_EXEC}" -o "${OUTPUT_FILE}" "${INPUT_FILE}"
|
||||
RESULT_VARIABLE conv_result OUTPUT_VARIABLE conv_log ERROR_VARIABLE conv_log
|
||||
)
|
||||
|
||||
if(conv_result)
|
||||
message(FATAL_ERROR "[geometry conversion] Failure: ${conv_result}\n${GCV_EXEC} -o \"${OUTPUT_FILE}\" \"${INPUT_FILE}\"\n\n${conv_log}")
|
||||
endif(conv_result)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
Regular → Executable
+1
-1
@@ -2,7 +2,7 @@
|
||||
# C U B E . R T
|
||||
# BRL-CAD
|
||||
#
|
||||
# Copyright (c) 2004-2026 United States Government as represented by
|
||||
# Copyright (c) 2004-2020 United States Government as represented by
|
||||
# the U.S. Army Research Laboratory.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/* D B . P H P
|
||||
* BRL-CAD
|
||||
*
|
||||
* Copyright (c) 2004-2026 United States Government as represented by
|
||||
* Copyright (c) 2004-2020 United States Government as represented by
|
||||
* the U.S. Army Research Laboratory.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
title {Earth Model v1.1 by starseeker}
|
||||
units km
|
||||
put {mesosphere.s} ell V {0 0 0} A {6468100000 0 0} B {0 6468100000 0} C {0 0 6446800000}
|
||||
put {mesosphere.c} comb region no tree {- {l mesosphere.s} {l stratosphere.s}}
|
||||
attr set {mesosphere.c} {shader} {glass {tr 0.85}}
|
||||
put {atmosphere.c} comb region no tree {u {u {- {l mesosphere.c} {l slice-earth-2.s}} {- {l stratosphere.c} {l slice-earth-2.s}}} {- {l troposphere.c} {l slice-earth-2.s}}}
|
||||
put {outer-core.s} ell V {0 0 0} A {-2394906651.625486850738525 1382699999.999999523162842 0} B {-1382699999.999999523162842 -2394906651.625486850738525 0} C {0 0 2750000000}
|
||||
put {inner-core.s} ell V {0 0 0} A {-1047890738.579170942306519 604999999.9999997615814209 0} B {-604999999.9999997615814209 -1047890738.579170942306519 0} C {0 0 1210000000}
|
||||
put {inner-core.r} comb region yes tree {n {l inner-core.s} {l slice-earth-2.s}}
|
||||
attr set {inner-core.r} {color} {255/255/255} {shader} {plastic {sp 0.9 di 0.1}} {region} {R} {region_id} {1003} {material_id} {1} {los} {100}
|
||||
put {lower-mantle-core-subtract.c} comb region no tree {u {l outer-core.s} {l inner-core.s}}
|
||||
put {upper-mantle-core-subtract.c} comb region no tree {u {u {l lower-mantle.s} {l outer-core.s}} {l inner-core.s}}
|
||||
put {slice-earth-outcore.s} arb8 V1 {1000000 1000000 1000000} V2 {1500000000 11550000000 1500000000} V3 {11550000000 1500000000 1500000000} V4 {1000000 1000000 1000000} V5 {1500000000 1500000000 11550000000} V6 {1500000000 1500000000 11550000000} V7 {1500000000 1500000000 11550000000} V8 {1500000000 1500000000 11550000000}
|
||||
put {crust-core-subtract.c} comb region no tree {u {u {l upper-mantle.s} {l lower-mantle.s}} {u {l outer-core.s} {l inner-core.s}}}
|
||||
put {outer-core-display.r} comb region yes tree {- {n {l outer-core.s} {l slice-earth-2.s}} {l inner-core.s}}
|
||||
attr set {outer-core-display.r} {color} {254/255/178} {shader} {plastic} {region} {R} {region_id} {1002} {material_id} {1} {los} {100}
|
||||
put {slice-earth-lowman.s} arb8 V1 {1000000 1000000 1000000} V2 {1000000000 11550000000 1000000000} V3 {11550000000 1000000000 1000000000} V4 {1000000 1000000 1000000} V5 {1000000000 1000000000 11550000000} V6 {1000000000 1000000000 11550000000} V7 {1000000000 1000000000 11550000000} V8 {1000000000 1000000000 11550000000}
|
||||
put {earth-cutaway.c} comb region no tree {- {l earth-crust.c} {l slice-earth.s}}
|
||||
put {earth-display.c} comb region no tree {u {u {u {u {u {l earth-cutaway.c} {l cutout-earth-backdrop.c}} {- {l upper-mantle-display.r} {l slice-earth-upman.s}}} {- {l lower-mantle-display.r} {l slice-earth-lowman.s}}} {- {l outer-core-display.r} {l slice-earth-outcore.s}}} {l inner-core.r}}
|
||||
put {stratosphere.s} ell V {0 0 0} A {6428100000 0 0} B {0 6428100000 0} C {0 0 6406800000}
|
||||
put {stratosphere.c} comb region no tree {- {l stratosphere.s} {l troposphere.s}}
|
||||
attr set {stratosphere.c} {shader} {glass {tr 0.8}}
|
||||
put {cutout-earth-backdrop.c} comb region no tree {n {l cutout-earth.c} {l earth-crust.s}}
|
||||
put {lower-mantle.s} ell V {0 0 0} A {-4900404747.314247131347656 2829249999.999999046325684 0} B {-2829249999.999999046325684 -4900404747.314247131347656 0} C {0 0 5640000000}
|
||||
put {upper-mantle.s} ell V {0 0 0} A {-5474406384.942572593688965 3160649999.999999046325684 0} B {-3160649999.999999046325684 -5474406384.942572593688965 0} C {0 0 6300000000}
|
||||
put {slice-earth-2.s} arb8 V1 {1000000 1000000 1000000} V2 {1000000 11550000000 1000000} V3 {11550000000 1000000 1000000} V4 {1000000 1000000 1000000} V5 {1000000 1000000 11550000000} V6 {1000000 1000000 11550000000} V7 {1000000 1000000 11550000000} V8 {1000000 1000000 11550000000}
|
||||
put {slice-earth-upman.s} arb8 V1 {1000000 1000000 1000000} V2 {500000000 11550000000 500000000} V3 {11550000000 500000000 500000000} V4 {1000000 1000000 1000000} V5 {500000000 500000000 11550000000} V6 {500000000 500000000 11550000000} V7 {500000000 500000000 11550000000} V8 {500000000 500000000 11550000000}
|
||||
put {cutout-earth.c} comb region no tree {- {l slice-earth.s} {l slice-earth-2.s}}
|
||||
put {troposphere.s} ell V {0 0 0} A {6396100000 0 0} B {0 6396100000 0} C {0 0 6374800000}
|
||||
put {earth-crust.s} ell V {0 0 0} A {-5523596627.877529144287109 3189049999.999999046325684 0} B {-3189049999.999999046325684 -5523596627.877529144287109 0} C {0 0 6356800000}
|
||||
put {troposphere.c} comb region no tree {- {l troposphere.s} {l earth-crust.s}}
|
||||
attr set {troposphere.c} {shader} {stack {{cloud {}} {glass {tr 0.65}}}}
|
||||
put {earth-crust.c} comb region no tree {- {l earth-crust.s} {l crust-core-subtract.c}}
|
||||
attr set {earth-crust.c} {shader} {texture {file earth.pix w 2048 n 1024}}
|
||||
put {slice-earth.s} arb8 V1 {0 0 0} V2 {0 11500000000 0} V3 {11500000000 0 0} V4 {0 0 0} V5 {0 0 11500000000} V6 {0 0 11500000000} V7 {0 0 11500000000} V8 {0 0 11500000000}
|
||||
put {lower-mantle-display.r} comb region yes tree {- {n {l lower-mantle.s} {l slice-earth-2.s}} {l lower-mantle-core-subtract.c}}
|
||||
attr set {lower-mantle-display.r} {color} {255/255/0} {shader} {plastic} {region} {R} {region_id} {1001} {material_id} {1} {los} {100}
|
||||
put {upper-mantle-display.r} comb region yes tree {- {n {l upper-mantle.s} {l slice-earth-2.s}} {l upper-mantle-core-subtract.c}}
|
||||
attr set {upper-mantle-display.r} {color} {254/160/60} {shader} {plastic} {region} {R} {region_id} {1000} {material_id} {1} {los} {100}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
@@ -1,14 +1,17 @@
|
||||
set(FAA_SAMPLE_MODELS Business_Jet.fg4 Generic_Twin.fg4)
|
||||
set(FAA_SAMPLE_MODELS
|
||||
Business_Jet.fg4
|
||||
Generic_Twin.fg4
|
||||
)
|
||||
|
||||
foreach(faa_input ${FAA_SAMPLE_MODELS})
|
||||
g_target(${faa_input} "BRL-CAD Geometry Models/Sample")
|
||||
ADD_G_TARGET(${faa_input} "BRL-CAD Geometry Models/Sample")
|
||||
endforeach(faa_input ${FAA_SAMPLE_MODELS})
|
||||
|
||||
cmakefiles(
|
||||
CMAKEFILES(
|
||||
${FAA_SAMPLE_MODELS}
|
||||
CMakeLists.txt
|
||||
README
|
||||
)
|
||||
)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
|
||||
@@ -64920,7 +64920,7 @@ CQUAD 12 13 4 12 16 8 0.000 2
|
||||
CCONE2 1 4 17 18 2.250 +
|
||||
+ 2.250 0.000 0.000
|
||||
SECTION 3 168 2 1
|
||||
$NAME 3 168 Horizontal Stabilator Vector Pulley left forward
|
||||
$NAME 3 168 Horiztonal Stabilator Vector Pulley left forward
|
||||
$COMMENT12345678123456781234567812345678123456781234567812345678123456781234567812345678
|
||||
$COMMENT 2 3 4 5 6 7 8 9 10
|
||||
GRID 1 -280.990 6.010 208.570
|
||||
@@ -64992,7 +64992,7 @@ CQUAD 12 13 4 12 16 8 0.000 2
|
||||
CCONE2 1 4 17 18 0.500 +
|
||||
+ 0.500 0.000 0.000
|
||||
SECTION 3 170 2 1
|
||||
$NAME 3 170 Horizontal Stabilator Vector Pulley left aft
|
||||
$NAME 3 170 Horiztonal Stabilator Vector Pulley left aft
|
||||
$COMMENT12345678123456781234567812345678123456781234567812345678123456781234567812345678
|
||||
$COMMENT 2 3 4 5 6 7 8 9 10
|
||||
GRID 1 -1239.68 7.150 204.800
|
||||
@@ -65064,7 +65064,7 @@ CQUAD 12 13 4 12 16 8 0.000 2
|
||||
CCONE2 1 4 17 18 0.500 +
|
||||
+ 0.500 0.000 0.000
|
||||
SECTION 3 172 2 1
|
||||
$NAME 3 172 Horizontal Stabilator Vector Pulley right forward
|
||||
$NAME 3 172 Horiztonal Stabilator Vector Pulley right forward
|
||||
$COMMENT12345678123456781234567812345678123456781234567812345678123456781234567812345678
|
||||
$COMMENT 2 3 4 5 6 7 8 9 10
|
||||
GRID 1 -280.990 -6.010 208.570
|
||||
@@ -65136,7 +65136,7 @@ CQUAD 12 13 4 12 16 8 0.000 2
|
||||
CCONE2 1 4 17 18 0.500 +
|
||||
+ 0.500 0.000 0.000
|
||||
SECTION 3 174 2 1
|
||||
$NAME 3 174 Horizontal Stabilator Vector Pulley right aft
|
||||
$NAME 3 174 Horiztonal Stabilator Vector Pulley right aft
|
||||
$COMMENT12345678123456781234567812345678123456781234567812345678123456781234567812345678
|
||||
$COMMENT 2 3 4 5 6 7 8 9 10
|
||||
GRID 1 -1239.68 -7.150 204.800
|
||||
@@ -209761,7 +209761,7 @@ CTRI 10 1 4 6 8 0.100 2
|
||||
CTRI 11 1 5 7 1 0.100 2
|
||||
CTRI 12 1 7 2 1 0.100 2
|
||||
SECTION 9 639 2 0
|
||||
$NAME 9 639 Standby power control unit
|
||||
$NAME 9 639 Standby power contol unit
|
||||
GRID 1 -217.100 -43.700 249.434
|
||||
GRID 2 -217.100 -44.700 247.434
|
||||
GRID 3 -217.000 -43.700 249.434
|
||||
|
||||
-78680
File diff suppressed because it is too large
Load Diff
+11817
-3473
File diff suppressed because one or more lines are too long
@@ -1,5 +1,4 @@
|
||||
set(
|
||||
NIST_SAMPLE_MODELS
|
||||
set(NIST_SAMPLE_MODELS
|
||||
NIST_MBE_PMI_1.stp
|
||||
NIST_MBE_PMI_2.stp
|
||||
NIST_MBE_PMI_3.stp
|
||||
@@ -11,10 +10,10 @@ set(
|
||||
)
|
||||
|
||||
foreach(im ${NIST_SAMPLE_MODELS})
|
||||
g_target(${im} "BRL-CAD Geometry Models/Sample")
|
||||
ADD_G_TARGET(${im} "BRL-CAD Geometry Models/Sample")
|
||||
endforeach(im ${NIST_SAMPLE_MODELS})
|
||||
|
||||
cmakefiles(
|
||||
CMAKEFILES(
|
||||
${NIST_SAMPLE_MODELS}
|
||||
CMakeLists.txt
|
||||
README
|
||||
@@ -30,7 +29,7 @@ cmakefiles(
|
||||
pdf/9.pdf
|
||||
pdf/10.pdf
|
||||
pdf/11.pdf
|
||||
)
|
||||
)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
title {Photo holder by csanyi_pal}
|
||||
units mm
|
||||
put {keretgyurf.s} eto V {0 0 175} N {0 0 0.9866229999999999167314968} C {0 0 4.933115000000001693081231} r 156 r_d 2.959869000000000749395213
|
||||
put {keretgyura.s} eto V {0 0 25} N {0 0 0.9863332009625119800588777} C {0 0 4.931666004812560011316691} r 156 r_d 2.95899960288753804960038
|
||||
put {kartonekhk.s} tgc V {0 0 20} H {0 0 160} A {0 -162 0} B {162 0 0} C {0 -162 0} D {162 0 0}
|
||||
put {kartonekhb.s} tgc V {0 0 20} H {0 0 160} A {0 -161 0} B {161 0 0} C {0 -161 0} D {161 0 0}
|
||||
put {uvegszelo.s} arb8 V1 {0 0 0} V2 {-273.2568000000004531102604 -199.463712010076335445774 0} V3 {-273.2568000000004531102604 -199.4637120100763070240646 200} V4 {-2.137306219959771470627159E-14 1.560125977964318386935442E-14 199.9999999999999715782906} V5 {-273.2568000000009078576113 199.4637120100766765062872 0} V6 {-273.2568000000009078576113 199.4637120100766765062872 0} V7 {-273.2568000000009078576113 199.4637120100766765062872 200.0000000000001705302566} V8 {-273.2568000000009078576113 199.4637120100766765062872 200.0000000000001705302566}
|
||||
put {kereteehj.s} tgc V {-144.7437920000004965004337 58.16567399999996013093551 20} H {0 0 160} A {1.791839747726502229951961 4.667902132486008603962091 0} B {-2.800741279491604895923729 1.075103848635900805064125 0} C {1.791839747726502229951961 4.667902132486008603962091 0} D {-2.800741279491604895923729 1.075103848635900805064125 0}
|
||||
put {kereteehb.s} tgc V {-144.6299540000000831696525 -58.43016799999981714108799 20} H {0 0 160} A {1.873032967079560906498159 -4.635919272833937121447434 0} B {2.781551563700361828779251 1.123819780247735433675871 0} C {1.873032967079560906498159 -4.635919272833937121447434 0} D {2.781551563700361828779251 1.123819780247735433675871 0}
|
||||
put {kereteehjkicsi.s} tgc V {-144.736713000000236206688 58.16567399999982512781571 25} H {0 0 150} A {1.791839747726502229951961 4.667902132486008603962091 0} B {-2.800741279491604895923729 1.075103848635900805064125 0} C {1.791839747726502229951961 4.667902132486008603962091 0} D {-2.800741279491604895923729 1.075103848635900805064125 0}
|
||||
put {keptarto.c} comb region no tree {u {u {l uveglap.r} {l karton.r}} {l keret.r}}
|
||||
put {kereteehbkicsi.s} tgc V {-144.6299510000000339005055 -58.43016799999985266822478 25.00000000000002842170943} H {0 0 150} A {1.873032967079560906498159 -4.635919272833937121447434 0} B {2.781551563700361828779251 1.123819780247735433675871 0} C {1.873032967079560906498159 -4.635919272833937121447434 0} D {2.781551563700361828779251 1.123819780247735433675871 0}
|
||||
put {uvegekhk.s} tgc V {0 0 0} H {0 0 200} A {0 -160 0} B {160 0 0} C {0 -160 0} D {160 0 0}
|
||||
put {uvegekhb.s} tgc V {0 0 0} H {0 0 200} A {0 -156 0} B {156 0 0} C {0 -156 0} D {156 0 0}
|
||||
put {uveglap.r} comb region yes tree {n {- {l uvegekhk.s} {l uvegekhb.s}} {l uvegszelo.s}}
|
||||
attr set {uveglap.r} {color} {254/240/254} {shader} {glass} {region} {R} {region_id} {1000} {material_id} {1} {los} {100}
|
||||
put {kartonkozepenlyuk.s} ell V {-161.3665119999998296407284 9.880522794467734402637521E-15 100.0809629999999117444531} A {7.347638122934263549268508E-16 12 0} B {-12 7.347638122934263549268508E-16 0} C {0 0 12}
|
||||
put {karton.r} comb region yes tree {u {- {- {- {- {n {- {l kartonekhk.s} {l kartonekhb.s}} {l kartonszelok.s}} {l kartongmbab.s}} {l kartongmbaj.s}} {l kartongmbfk.s}} {l kartonkozepenlyuk.s}} {- {- {- {n {- {l kartonekhb.s} {l uvegekhk.s}} {l kartonszelok.s}} {l kartonszelob.s}} {l kartongmbab.s}} {l kartongmbaj.s}}}
|
||||
attr set {karton.r} {color} {255/255/255} {shader} {plastic} {region} {R} {region_id} {1003} {material_id} {1} {los} {100}
|
||||
put {keretszelokozepen.s} arb8 V1 {0 0 0} V2 {-166.3083958664467161270295 -67.15610201701679216057528 0} V3 {-166.3083958664467161270295 -67.15610201701677794972056 214.8175999999999135070539} V4 {-1.578905978938171909047631E-16 1.426081241349886421227616E-14 214.8175999999999419287633} V5 {-166.659954164212450677951 67.12896928889989567323937 0} V6 {-166.659954164212450677951 67.12896928889989567323937 0} V7 {-166.659954164212450677951 67.12896928889990988409409 214.8175999999999987721822} V8 {-166.659954164212450677951 67.12896928889990988409409 214.8175999999999987721822}
|
||||
put {keret.r} comb region yes tree {- {u {u {u {u {u {u {u {u {u {n {l keretgyura.s} {l kereteehb.s}} {l kereteehbkicsi.s}} {n {l keretgyura.s} {l kereteehj.s}}} {l kereteehjkicsi.s}} {n {l keretgyurf.s} {l kereteehb.s}}} {l kereteehbkicsi.s}} {n {l keretgyurf.s} {l kereteehj.s}}} {l kereteehjkicsi.s}} {n {l keretgyura.s} {l keretszelokozepen.s}}} {- {n {l keretgyurf.s} {l keretszelokozepen.s}} {l uveglap.r}}} {l uveglap.r}}
|
||||
attr set {keret.r} {color} {255/240/120} {shader} {plastic} {region} {R} {region_id} {1001} {material_id} {1} {los} {100}
|
||||
put {kartonszelok.s} arb8 V1 {0 0 0} V2 {-168.0589500000000384716259 -71.77879269107120308035519 0} V3 {-168.0589500000000384716259 -71.77879269107113202608161 224.0785999999999660303729} V4 {-1.631395896368632521173223E-29 1.592174214692930869044001E-14 224.0786000000000228737917} V5 {-168.0589500000001237367542 71.77879269107125992377405 0} V6 {-168.0589500000001237367542 71.77879269107125992377405 0} V7 {-168.0589500000001237367542 71.77879269107127413462877 224.0786000000000797172106} V8 {-168.0589500000001237367542 71.77879269107127413462877 224.0786000000000797172106}
|
||||
put {kartonszelob.s} arb8 V1 {0 0 0} V2 {-166.4836399999998661769496 -63.37119199999997221084413 0} V3 {-166.4836399999998661769496 -63.37119199999995799998942 214.8175999999999135070539} V4 {-1.757644366536248560321584E-29 1.526370851934186986541124E-14 214.8175999999999419287633} V5 {-166.4836399999998661769496 63.37119199999997221084413 0} V6 {-166.4836399999998661769496 63.37119199999997221084413 0} V7 {-166.4836399999998661769496 63.37119199999999352712621 214.8175999999999987721822} V8 {-166.4836399999998661769496 63.37119199999999352712621 214.8175999999999987721822}
|
||||
put {kartongmbfk.s} ell V {-161.2951809999994736699591 9.876155174676486577133334E-15 180.0822759999995525959093} A {7.347638122934263549268508E-16 12 0} B {-12 7.347638122934263549268508E-16 0} C {0 0 12}
|
||||
put {kartongmbaj.s} ell V {-148.5169369999997002196324 -63.37174099999977983088684 19.92848799999995890175342} A {7.347638122934263549268508E-16 12 0} B {-12 7.347638122934263549268508E-16 0} C {0 0 12}
|
||||
put {kartongmbab.s} ell V {-147.9239789999987806368154 63.24422300000000518593879 20.08229800000001219473234} A {7.347638122934263549268508E-16 12 0} B {-12 7.347638122934263549268508E-16 0} C {0 0 12}
|
||||
+63
-25513
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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}}
|
||||
File diff suppressed because one or more lines are too long
+2
-2
@@ -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
|
||||
|
||||
@@ -1,58 +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}")
|
||||
file(TO_CMAKE_PATH "${CROOT}" CROOT)
|
||||
string(REGEX REPLACE "/$" "" CROOT "${CROOT}")
|
||||
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
|
||||
)
|
||||
|
||||
set(conv_success_codes "@CONV_SUCCESS_CODES@")
|
||||
list(FIND conv_success_codes "${conv_result}" conv_result_index)
|
||||
if(conv_result_index EQUAL -1 OR NOT EXISTS "@CONV_OUTPUT_PATH@")
|
||||
set(CARGS @CONV_ARGS@)
|
||||
message(FATAL_ERROR "[@in_model_root@] Failure: ${conv_result}\n${CONV_EXEC} ${CARGS}\"\n\n${conv_log}")
|
||||
endif()
|
||||
|
||||
# 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
|
||||
@@ -1,27 +0,0 @@
|
||||
# Make sure the converter executable exists.
|
||||
string(REPLACE "\\" "" CONV_EXEC "${EXEC}")
|
||||
if(NOT EXISTS "${CONV_EXEC}")
|
||||
message(FATAL_ERROR "Invalid pix converter executable specified: ${CONV_EXEC}")
|
||||
endif(NOT EXISTS "${CONV_EXEC}")
|
||||
|
||||
set(IN_FILE "@PIX_INPUT@")
|
||||
set(OUT_FILE "@PIX_OUTPUT@")
|
||||
set(CONV_LABEL "@PIX_LABEL@")
|
||||
|
||||
execute_process(
|
||||
COMMAND "${CONV_EXEC}" "${IN_FILE}"
|
||||
RESULT_VARIABLE conv_result
|
||||
OUTPUT_FILE "${OUT_FILE}"
|
||||
ERROR_VARIABLE conv_log
|
||||
)
|
||||
|
||||
if(conv_result)
|
||||
message(FATAL_ERROR "[${CONV_LABEL}] Failure: ${conv_result}\n${CONV_EXEC} ${IN_FILE} > ${OUT_FILE}\n\n${conv_log}")
|
||||
endif(conv_result)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
-184496
File diff suppressed because it is too large
Load Diff
@@ -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."
|
||||
Binary file not shown.
+3
-94
@@ -645,7 +645,7 @@
|
||||
volume = {Proceedings SPIE, 1098},
|
||||
pages = {42-54},
|
||||
year = {1989},
|
||||
url = {http://dx.doi.org/10.1117/12.960423},
|
||||
url = { http://dx.doi.org/10.1117/12.960423},
|
||||
owner = {morrison},
|
||||
timestamp = {2008.02.05}
|
||||
}
|
||||
@@ -1298,7 +1298,7 @@
|
||||
|
||||
@TECHREPORT{Ross92,
|
||||
author = {Ross, Adam},
|
||||
title = {3D Geometric Target Analysis of The Advanced Field Artillery System (AFAS)},
|
||||
title = {3D Geometric Target Analysis of The Advanced Field Artillary System (AFAS)},
|
||||
year = {1992},
|
||||
month = aug,
|
||||
publisher = {The U.S. Army Ballistic Research Laboratory},
|
||||
@@ -1847,21 +1847,6 @@
|
||||
timestamp = {2008.02.07}
|
||||
}
|
||||
|
||||
@INPROCEEDINGS{Moulton02a,
|
||||
author = {Moulton, Jr., Russ and Fink, Christopher E.},
|
||||
title = {Ray-tracing approach for realistic hyperspectral forest canopies},
|
||||
booktitle = {Targets and Backgrounds VIII: Characterization and Representation, Proceedings of SPIE},
|
||||
volume = {4178},
|
||||
pages = {46-64},
|
||||
year = {2002},
|
||||
month = aug,
|
||||
doi = {10.1117/12.478828},
|
||||
location = {Orlando, FL, United States},
|
||||
note = {Society of Photo-Optical Instrumentation Engineers (SPIE). Presented at AeroSense 2002.},
|
||||
owner = {morrison},
|
||||
timestamp = {2022.01.10}
|
||||
}
|
||||
|
||||
@ARTICLE{Mathy03a,
|
||||
author = {Mathy, F. and Guillemaud, R. and Picone, M.},
|
||||
title = {Experimental validation of a coupled photon Monte Carlo and CAD software},
|
||||
@@ -1887,7 +1872,7 @@
|
||||
pages = {175-193},
|
||||
number = {2},
|
||||
month = feb,
|
||||
eid = {10.1016/S0010-4485(03)00060-5},
|
||||
eid = {10.1016/S0010-4485(03)00060-5 },
|
||||
owner = {cyapp},
|
||||
timestamp = {2008.02.08}
|
||||
}
|
||||
@@ -2261,82 +2246,6 @@
|
||||
timestamp = {2018.06.06}
|
||||
}
|
||||
|
||||
@TECHREPORT{Dean18a,
|
||||
author = {Dean, Allen and Thomas, Jr., John},
|
||||
title = {Development of Large and Small Missile Target Models},
|
||||
institution = {United States Air Force Research Laboratory, Munitions Directorate},
|
||||
year = {2018},
|
||||
month = dec,
|
||||
number = {AFRL-RW-EG-TR-2018-100},
|
||||
address = {Air Force Research Laboratory, Eglin Air Force Base, FL 32542-6810},
|
||||
note = {Distribution authorized to Department of Defense and U.S. DoD contractors only; critical technology; distribution limitations applied November 2018. Other requests must be referred to AFRL/RWML, Eglin AFB FL 32542-5910.},
|
||||
owner = {morrison},
|
||||
timestamp = {2020.10.30}
|
||||
}
|
||||
|
||||
@TECHREPORT{Velykodniy19a,
|
||||
author = {Velykodniy, Stanislav and Burlachenko, Zh and Zaitseva-Velykodna, Svitlana},
|
||||
title = {Graphic Databases Reengineering in BRL-CAD Open Source Computer-aided Design Environment. Modeling of the Structural Part},
|
||||
institution = {Odessa State Environmental University},
|
||||
year = {2019},
|
||||
month = {06},
|
||||
pages = {130-139},
|
||||
doi = {10.30929/1995-0519.2019.3.130-139},
|
||||
note = {Ukrainian title: РЕИНЖИНИРИНГ ГРАФИЧЕСКИХ БАЗ ДАННЫХ В СРЕДЕ ОТКРЫТОЙ СИСТЕМЫ АВТОМАТИЗИРОВАННОГО ПРОЕКТИРОВАНИЯ BRL-CAD. МОДЕЛИРОВАНИЕ СТРУКТУРНОЙ ЧАСТИ},
|
||||
owner = {morrison},
|
||||
timestamp = {2021.10.02}
|
||||
}
|
||||
|
||||
@ARTICLE{Velykodniy19b,
|
||||
author = {Velykodniy, Stanislav Sergeyevich},
|
||||
title = {ANALYSIS AND SYNTHESIS OF THE RESULTS OF COMPLEX EXPERIMENTAL RESEARCH ON REENGINEERING OF OPEN CAD SYSTEMS},
|
||||
journal = {Applied Aspects of Information Technology},
|
||||
institution = {Ministry of Education and Science of Ukraine, Odessa National Polytechnic University},
|
||||
year = {2019},
|
||||
month = {06},
|
||||
pages = {186-205},
|
||||
volume = {2}
|
||||
number = {3},
|
||||
issn = {2617-4316},
|
||||
doi = {10.15276/aait.03.2019.2},
|
||||
address = {Odessa National Polytechnic University 1, Shevchenko Avenue 65044, Odessa, Ukraine},
|
||||
note = {Web Site: https://aait.opu.ua},
|
||||
owner = {morrison},
|
||||
timestamp = {2021.10.02}
|
||||
}
|
||||
|
||||
@ARTICLE{Velykodniy19c,
|
||||
author = {Velykodniy, Stanislav Sergeyevich},
|
||||
title = {Reengineering of Open Software System of 3D Modeling BRL-CAD},
|
||||
journal = {Innovative Technologies and Scientific Solutions for Industries},
|
||||
institution = {Kharkov National University of Radio Electronics, State Enterprise "Southern National Design & Research Institute of Aerospace Industries"},
|
||||
year = {2019},
|
||||
month = sep,
|
||||
day = {23},
|
||||
pages = {62-71},
|
||||
number = {3 (9)},
|
||||
issn = {2522-9818},
|
||||
doi = {10.30837/2522-9818.2019.9.062},
|
||||
url = {https://itssi-journal.com/index.php/ittsi/article/view/145},
|
||||
address = {Ukraine, 61166, Kharkiv, Nauka Ave, 14},
|
||||
note = {Affiliation: Odessa State Environmental University. Information site: http://itssi-journal.com},
|
||||
owner = {morrison},
|
||||
timestamp = {2021.10.02}
|
||||
}
|
||||
|
||||
@TECHREPORT{Yapp20,
|
||||
author = {Yapp, Cliff},
|
||||
title = {Methodology Improvements to Non-Uniform Rational B-Splines (NURBS) Geometry Conversion in BRL-CAD},
|
||||
institution = {United States Army, Data and Analysis Center},
|
||||
year = {2020},
|
||||
month = mar,
|
||||
number = {CCDC DAC-TR-2020-021, JASPO-V-19-03-001},
|
||||
address = {Data and Analysis Center, Aberdeen Proving Ground, MD 21005-5068},
|
||||
note = {Approved for Public Release, distribution unlimited.},
|
||||
owner = {morrison},
|
||||
timestamp = {2021.08.05}
|
||||
}
|
||||
|
||||
@comment{jabref-meta: selector_journal:}
|
||||
|
||||
@comment{jabref-meta: selector_author:}
|
||||
|
||||
+21
-46
@@ -1,41 +1,36 @@
|
||||
verbose_add_subdirectory(doc asciidoc)
|
||||
verbose_add_subdirectory(doc changes)
|
||||
verbose_add_subdirectory(doc docbook)
|
||||
verbose_add_subdirectory(doc html)
|
||||
verbose_add_subdirectory(doc legal)
|
||||
|
||||
set(
|
||||
documentation_DATA
|
||||
set(documentation_DATA
|
||||
BRL-CAD.bib
|
||||
GITHUB
|
||||
IDEAS
|
||||
PROJECTS
|
||||
README.Linux
|
||||
README.MacOSX
|
||||
README.Windows
|
||||
README.BSD
|
||||
README.other/README.AIX
|
||||
README.other/README.BSD
|
||||
README.other/README.IRIX
|
||||
README.other/README.Solaris
|
||||
README.other/README.VAX
|
||||
checklist.txt
|
||||
description.txt
|
||||
optimization_ideas.adoc
|
||||
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/itcl4_migration.txt
|
||||
notes/mater.txt
|
||||
notes/matrix.txt
|
||||
pre_BRL-CAD.bib
|
||||
)
|
||||
add_doc(documentation_DATA ".")
|
||||
)
|
||||
ADD_DOC(documentation_DATA ".")
|
||||
|
||||
set(
|
||||
documentation_mged_old_DATA
|
||||
set(documentation_mged_old_DATA
|
||||
mged/a.tex
|
||||
mged/adc.ps
|
||||
mged/all.tex
|
||||
@@ -205,36 +200,17 @@ set(
|
||||
notes/rounding.txt
|
||||
notes/tool_categories.txt
|
||||
old-mged.tr
|
||||
)
|
||||
add_doc(documentation_mged_old_DATA mged_old REQUIRED "mged")
|
||||
)
|
||||
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(
|
||||
CMAKEFILES(
|
||||
CMakeLists.txt
|
||||
README.Solaris
|
||||
README.VAX
|
||||
README.adoc
|
||||
README.other/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
|
||||
inventory.adoc
|
||||
notes/bsd_semaphore_bug.txt
|
||||
notes/cmake_paths/CMakeLists.txt
|
||||
notes/cmake_paths/README.txt
|
||||
@@ -244,12 +220,11 @@ cmakefiles(
|
||||
notes/csv_to_comgeom.txt
|
||||
notes/implicit_constraints.txt
|
||||
notes/lcov.txt
|
||||
notes/struct_resource_removal.txt
|
||||
pad_file.xml.in
|
||||
)
|
||||
)
|
||||
|
||||
# Generic C/C++ examples
|
||||
cmakefiles(
|
||||
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
|
||||
@@ -272,10 +247,10 @@ cmakefiles(
|
||||
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(
|
||||
CMAKEFILES(
|
||||
notes/parsers/bison_to_lemon.txt
|
||||
notes/parsers/flex_to_re2c.txt
|
||||
notes/parsers/templates/CMakeLists.txt
|
||||
@@ -284,7 +259,7 @@ cmakefiles(
|
||||
notes/parsers/templates/parser.lemon
|
||||
notes/parsers/templates/scanner.perplex
|
||||
notes/parsers/writing_perplex_lemon_parsers.txt
|
||||
)
|
||||
)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
|
||||
-104
@@ -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/
|
||||
+10
-72
@@ -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,14 +89,10 @@ 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:
|
||||
|
||||
yum install git cmake gcc gcc-c++
|
||||
|
||||
Development packages for building on Redhat-based platforms:
|
||||
Development packages for building on Redhat/Fedora platforms:
|
||||
|
||||
yum install libX11-devel
|
||||
yum install libXext-devel # optional
|
||||
@@ -116,53 +101,14 @@ Development packages for building on Redhat-based platforms:
|
||||
yum install fontconfig-devel # optional
|
||||
yum install mesa-libGL-devel # optional
|
||||
|
||||
If you wish to create rpm packages, you'll need rpmbuild
|
||||
|
||||
yum install rpm-build # optional
|
||||
|
||||
When setting up older 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 +119,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
@@ -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
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
*** ARCHIVED -- legacy platform, no longer supported (retained for
|
||||
*** historical reference). This document is not installed and is kept
|
||||
*** only to preserve the historical record.
|
||||
|
||||
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.
|
||||
|
||||
Kitware does not provide a pre-compiled binary for CMake on Solaris
|
||||
type systems. To bootstrap from the source code, try the following:
|
||||
|
||||
(You probably want to use gmake and gcc/g++ for this...)
|
||||
|
||||
1. Download the source from http://www.cmake.org/cmake/resources/software.html
|
||||
2. unzip the tarball: gunzip cmake-X.Y.Z.tar.gz
|
||||
3. open the tarball: tar -xvf cmake-X.Y.Z.tar
|
||||
4. cd cmake-X.Y.Z
|
||||
5. CXX=g++ ./bootstrap -prefix=/home/user/cmake-install (or your preferred directory)
|
||||
6. gmake
|
||||
7. gmake install
|
||||
|
||||
Then (if you installed to somewhere other than a system dir) add the
|
||||
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
|
||||
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.)
|
||||
+45
-131
@@ -3,23 +3,57 @@ 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
|
||||
In principle, BRL-CAD can be built using CMake and environments like
|
||||
Cygwin and/or Mingw/Msys, but the latter is largely untested and
|
||||
infrequently supported. Enhancements or bug reports are welcome.
|
||||
|
||||
Visual Studio
|
||||
-------------
|
||||
|
||||
=== Notes on Windows 10 with latest SDK ===
|
||||
Because Tk before 8.6.8 cannot be built with the latest Windows SDK
|
||||
(naming conflicts; see [1]), an earlier one (10.0.15063.0 is the
|
||||
last working version) is needed (available at [2]).
|
||||
|
||||
Targets `tk`, `tkstub` and `libfb` need to be changed to use this SDK
|
||||
(right click on a target -> Configuration Properties -> General;
|
||||
select the SDK in Windows SDK Version).
|
||||
|
||||
Compilation is then unchanged from the below.
|
||||
|
||||
[1]: https://core.tcl.tk/tk/tktview?name=3d34589aa0
|
||||
[2]: https://developer.microsoft.com/en-us/windows/downloads/sdk-archive
|
||||
|
||||
===========================================
|
||||
|
||||
=== 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
|
||||
|
||||
======================================
|
||||
|
||||
|
||||
To build with CMake and Visual Studio, the first step is to obtain the
|
||||
BRL-CAD sources and create a build directory. In principle, it is not
|
||||
*required* to have a separate build directory, but with Windows and
|
||||
@@ -59,126 +93,6 @@ 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
|
||||
|
||||
======================================
|
||||
|
||||
|
||||
MINGW (WORK IN PROGRESS - THIS DOES NOT YET WORK!!!)
|
||||
-----
|
||||
|
||||
|
||||
@@ -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.26+)
|
||||
* **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 have consolidated our extensive documentation (formerly a mix of DocBook/XML, MediaWiki, troff, plain text, and more) onto **AsciiDoc**, with the authoritative sources under `doc/asciidoc/`.
|
||||
|
||||
* **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.
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,61 @@
|
||||
BRL-CAD on Solaris README
|
||||
=========================
|
||||
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:
|
||||
|
||||
(You probably want to use gmake and gcc/g++ for this...)
|
||||
|
||||
1. Download the source from http://www.cmake.org/cmake/resources/software.html
|
||||
2. unzip the tarball: gunzip cmake-X.Y.Z.tar.gz
|
||||
3. open the tarball: tar -xvf cmake-X.Y.Z.tar
|
||||
4. cd cmake-X.Y.Z
|
||||
5. CXX=g++ ./bootstrap -prefix=/home/user/cmake-install (or your preferred directory)
|
||||
6. gmake
|
||||
7. gmake install
|
||||
|
||||
Then (if you installed to somewhere other than a system dir) add the
|
||||
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 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 (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.
|
||||
|
||||
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. It may be an older gcc would
|
||||
have better luck...)
|
||||
@@ -1,7 +1,3 @@
|
||||
*** ARCHIVED -- legacy platform, no longer supported (retained for
|
||||
*** historical reference). This document is not installed and is kept
|
||||
*** only to preserve the historical record.
|
||||
|
||||
BRL-CAD on VAX README
|
||||
=====================
|
||||
|
||||
+1
-1
@@ -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
@@ -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)
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
include(${BRLCAD_CMAKE_DIR}/AsciiDoc.cmake)
|
||||
|
||||
verbose_add_subdirectory(asciidoc toplevel)
|
||||
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
|
||||
@@ -1,58 +0,0 @@
|
||||
= BRL-CAD AsciiDoc Documentation
|
||||
:toc: left
|
||||
:toclevels: 2
|
||||
|
||||
== Overview
|
||||
|
||||
This directory contains BRL-CAD documentation in AsciiDoc format. The `.adoc`
|
||||
files here are the authoritative documentation sources and are committed to
|
||||
version control. The one-time conversion from the original DocBook 5 XML
|
||||
sources is complete, and those legacy XML sources have been removed; edit the
|
||||
`.adoc` files directly.
|
||||
|
||||
The `.adoc` files 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`.
|
||||
|
||||
== Authoritative Sources
|
||||
|
||||
The `.adoc` files in this directory are the authoritative documentation
|
||||
sources. The one-time conversion from the retired DocBook 5 XML sources is
|
||||
complete, so there is no conversion step to re-run: make all documentation
|
||||
changes by editing the `.adoc` files directly.
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
Documentation is built only when CMake is configured with
|
||||
`BRLCAD_EXTRADOCS=ON`. With the default configuration the documentation
|
||||
targets are skipped, so remember to enable this option when working on or
|
||||
verifying documentation.
|
||||
====
|
||||
@@ -1,550 +0,0 @@
|
||||
set(
|
||||
articles_EN
|
||||
TEMPLATE.adoc
|
||||
about.adoc
|
||||
adrt_pathtrace.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
|
||||
object_types.adoc
|
||||
oed.adoc
|
||||
overlap_tool.adoc
|
||||
pipes.adoc
|
||||
procedural_geometry.adoc
|
||||
projection_shader.adoc
|
||||
renderer_showcase.adoc
|
||||
solid_geometry_comparison.adoc
|
||||
taxonomy.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
|
||||
images/gallery_terragen.png
|
||||
images/gallery_voxelize.png
|
||||
images/gallery_lattice.png
|
||||
images/gallery_loftwing.png
|
||||
images/gallery_loftwing_prop.png
|
||||
images/gallery_gears.png
|
||||
images/gallery_helicoil.png
|
||||
images/gallery_specimen.png
|
||||
images/gallery_seashell.png
|
||||
images/gallery_seashell_nautilus.png
|
||||
images/gallery_sphflake.png
|
||||
images/gallery_donuts.png
|
||||
images/gallery_menger.png
|
||||
images/gallery_pyramid.png
|
||||
images/gallery_torii.png
|
||||
images/gallery_masonry_frame.png
|
||||
images/gallery_masonry_sheetrock.png
|
||||
images/gallery_masonry_brick.png
|
||||
images/gallery_masonry_bm.png
|
||||
images/gallery_brickwall.png
|
||||
images/gallery_mkbuilding.png
|
||||
images/gallery_cchannel.png
|
||||
images/gallery_ringworld.png
|
||||
images/gallery_vegetation.png
|
||||
images/gallery_clutter.png
|
||||
images/gallery_metaball.png
|
||||
images/gallery_molecule.png
|
||||
images/gallery_pdb-g.png
|
||||
images/gallery_pipe.png
|
||||
images/gallery_pipetest.png
|
||||
images/gallery_tube.png
|
||||
images/gallery_lens.png
|
||||
images/gallery_brep_simple.png
|
||||
images/gallery_brep_cube.png
|
||||
images/gallery_brep_cobb.png
|
||||
images/gallery_brep_surface.png
|
||||
images/gallery_brep_trimmed.png
|
||||
images/gallery_brep_invalid.png
|
||||
images/gallery_breplicator.png
|
||||
images/gallery_csgbrep.png
|
||||
images/gallery_surfaceintersect.png
|
||||
images/gallery_spltest.png
|
||||
images/gallery_tea.png
|
||||
images/gallery_wavy.png
|
||||
images/gallery_kurt.png
|
||||
images/gallery_sketch.png
|
||||
images/gallery_wdb_example.png
|
||||
images/gallery_globe.png
|
||||
images/gallery_bottest.png
|
||||
images/gallery_pix2g.png
|
||||
images/gallery_bolt.png
|
||||
images/gallery_coil.png
|
||||
images/gallery_fence.png
|
||||
images/gallery_gastank.png
|
||||
images/gallery_handle.png
|
||||
images/gallery_human.png
|
||||
images/gallery_picket_fence.png
|
||||
images/gallery_tire.png
|
||||
images/gallery_window.png
|
||||
images/gallery_window_frame.png
|
||||
images/gallery_wire.png
|
||||
images/renderer_gallery_rt_l0.png
|
||||
images/renderer_gallery_rt_l1.png
|
||||
images/renderer_gallery_rt_l2.png
|
||||
images/renderer_gallery_rt_l3.png
|
||||
images/renderer_gallery_rt_l4.png
|
||||
images/renderer_gallery_rt_l5.png
|
||||
images/renderer_gallery_rt_l6.png
|
||||
images/renderer_gallery_rt_l7.png
|
||||
images/renderer_gallery_rt_l8.png
|
||||
images/renderer_gallery_rt_haze.png
|
||||
images/renderer_gallery_rt_cutaway.png
|
||||
images/renderer_gallery_rtedge_default.png
|
||||
images/renderer_gallery_rtedge_colored.png
|
||||
images/renderer_gallery_rtedge_regions.png
|
||||
images/renderer_gallery_rthide.png
|
||||
images/renderer_gallery_rtdepth.png
|
||||
images/renderer_gallery_rtxray.png
|
||||
images/solid_rep_csg.png
|
||||
images/solid_rep_brep_boolean.png
|
||||
images/solid_rep_brep_evaluated.png
|
||||
images/solid_rep_polygonal_boolean.png
|
||||
images/solid_rep_nmg.png
|
||||
images/solid_rep_bot.png
|
||||
images/solid_rep_revolve.png
|
||||
images/solid_rep_voxel_cells.png
|
||||
images/solid_rep_volume.png
|
||||
images/solid_rep_point_cloud.png
|
||||
images/solid_rep_wireframe.png
|
||||
images/adrt_castle_path.png
|
||||
images/adrt_castle_rt.png
|
||||
images/adrt_castle_rt_ao.png
|
||||
images/adrt_chess_path.png
|
||||
images/adrt_chess_rt.png
|
||||
images/adrt_chess_rt_ao.png
|
||||
images/adrt_cornell_path.png
|
||||
images/adrt_cornell_phong.png
|
||||
images/adrt_toyjeep_depth.png
|
||||
images/adrt_toyjeep_normal.png
|
||||
images/adrt_toyjeep_path.png
|
||||
images/adrt_toyjeep_phong.png
|
||||
images/adrt_toyjeep_rt.png
|
||||
images/adrt_toyjeep_rt_ao.png
|
||||
images/adrt_toyjeep_spall.png
|
||||
images/objtype_arb8.png
|
||||
images/objtype_arb8_variety.png
|
||||
images/objtype_arbn.png
|
||||
images/objtype_arbn_variety.png
|
||||
images/objtype_ars.png
|
||||
images/objtype_bot.png
|
||||
images/objtype_bot_variety.png
|
||||
images/objtype_brep.png
|
||||
images/objtype_cline.png
|
||||
images/objtype_comb_variety.png
|
||||
images/objtype_dsp.png
|
||||
images/objtype_ebm.png
|
||||
images/objtype_ehy.png
|
||||
images/objtype_ehy_variety.png
|
||||
images/objtype_ell.png
|
||||
images/objtype_ell_variety.png
|
||||
images/objtype_epa.png
|
||||
images/objtype_epa_variety.png
|
||||
images/objtype_eto.png
|
||||
images/objtype_eto_variety.png
|
||||
images/objtype_extrude.png
|
||||
images/objtype_half.png
|
||||
images/objtype_hrt.png
|
||||
images/objtype_hrt_variety.png
|
||||
images/objtype_hyp.png
|
||||
images/objtype_hyp_variety.png
|
||||
images/objtype_metaball.png
|
||||
images/objtype_metaball_variety.png
|
||||
images/objtype_nmg.png
|
||||
images/objtype_part.png
|
||||
images/objtype_part_variety.png
|
||||
images/objtype_pipe.png
|
||||
images/objtype_pipe_variety.png
|
||||
images/objtype_pnts.png
|
||||
images/objtype_rcc.png
|
||||
images/objtype_rec.png
|
||||
images/objtype_revolve.png
|
||||
images/objtype_rhc.png
|
||||
images/objtype_rhc_variety.png
|
||||
images/objtype_rpc.png
|
||||
images/objtype_rpc_variety.png
|
||||
images/objtype_sph.png
|
||||
images/objtype_submodel.png
|
||||
images/objtype_superell.png
|
||||
images/objtype_superell_variety.png
|
||||
images/objtype_tgc.png
|
||||
images/objtype_tgc_variety.png
|
||||
images/objtype_tor.png
|
||||
images/objtype_tor_variety.png
|
||||
images/objtype_trc.png
|
||||
images/objtype_vol.png
|
||||
)
|
||||
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)
|
||||
|
||||
# Procedural geometry gallery -- opt-in regeneration of the committed snapshot.
|
||||
#
|
||||
# The .adoc article and the gallery_*.png images above are a committed snapshot
|
||||
# (consumed by the normal doc build like any other article). This target
|
||||
# rebuilds that snapshot from the actual built tools via a pure-CMake generator
|
||||
# (no shell, python, or platform assumptions). It is opt-in and excluded from
|
||||
# the default build; a developer regenerates, reviews the diff, and commits.
|
||||
option(BRLCAD_GENERATE_GALLERY "Regenerate the procedural geometry gallery snapshot" OFF)
|
||||
if(BRLCAD_GENERATE_GALLERY AND TARGET rt AND TARGET mged)
|
||||
# Demo generator programs to build before regenerating (those that exist).
|
||||
set(
|
||||
GALLERY_DEMO_TARGETS
|
||||
terragen voxelize lattice loftwing gears helicoil specimen seashell sphflake donuts
|
||||
menger pyramid torii masonry brickwall mkbuilding cchannel ringworld
|
||||
vegetation clutter metaball molecule pdb-g pipe pipetest tube lens
|
||||
brep_simple brep_cube brep_cobb brep_surface brep_trimmed brep_invalid
|
||||
breplicator csgbrep surfaceintersect spltest tea wavy kurt sketch
|
||||
wdb_example globe bottest pix2g bolt coil fence gastank handle human
|
||||
picket_fence tire window window_frame wire
|
||||
)
|
||||
set(gallery_deps rt mged)
|
||||
foreach(t ${GALLERY_DEMO_TARGETS})
|
||||
if(TARGET ${t})
|
||||
list(APPEND gallery_deps ${t})
|
||||
endif(TARGET ${t})
|
||||
endforeach(t)
|
||||
|
||||
add_custom_target(
|
||||
procedural-gallery-snapshot
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -DRT=$<TARGET_FILE:rt> -DMGED=$<TARGET_FILE:mged>
|
||||
-DBINDIR=$<TARGET_FILE_DIR:rt>
|
||||
-DMANIFEST=${CMAKE_CURRENT_SOURCE_DIR}/gallery/gallery_manifest.cmake
|
||||
-DIMGDIR=${CMAKE_CURRENT_SOURCE_DIR}/images
|
||||
-DADOC=${CMAKE_CURRENT_SOURCE_DIR}/procedural_geometry.adoc
|
||||
-DINPUTDIR=${CMAKE_CURRENT_SOURCE_DIR}/gallery/inputs
|
||||
-DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/gallery_work -DSIZE=512
|
||||
"-DTITLE=BRL-CAD Procedural Geometry Gallery"
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/gallery/generate_gallery.cmake
|
||||
DEPENDS ${gallery_deps}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Regenerating procedural geometry gallery snapshot (images + adoc)"
|
||||
VERBATIM
|
||||
USES_TERMINAL
|
||||
)
|
||||
set_target_properties(procedural-gallery-snapshot PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
|
||||
endif(BRLCAD_GENERATE_GALLERY AND TARGET rt AND TARGET mged)
|
||||
|
||||
# Renderer showcase gallery -- opt-in regeneration of the committed snapshot.
|
||||
#
|
||||
# Like the procedural geometry gallery above, the .adoc article and
|
||||
# renderer_gallery_*.png images are normal committed documentation. This target
|
||||
# refreshes those products from the built renderers and sample Cornell box so a
|
||||
# developer can review and commit the resulting diff.
|
||||
option(BRLCAD_GENERATE_RENDERER_GALLERY "Regenerate the renderer showcase gallery snapshot" OFF)
|
||||
if(
|
||||
BRLCAD_GENERATE_RENDERER_GALLERY
|
||||
AND TARGET rt
|
||||
AND TARGET rtedge
|
||||
AND TARGET rtdepth
|
||||
AND TARGET rtxray
|
||||
AND TARGET rthide
|
||||
AND TARGET bw-png
|
||||
AND TARGET fbclear
|
||||
AND TARGET plot3-fb
|
||||
AND TARGET fb-png
|
||||
AND TARGET cornell.g
|
||||
)
|
||||
add_custom_target(
|
||||
renderer-gallery-snapshot
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DRT=$<TARGET_FILE:rt>
|
||||
-DRTEDGE=$<TARGET_FILE:rtedge>
|
||||
-DRTDEPTH=$<TARGET_FILE:rtdepth>
|
||||
-DRTXRAY=$<TARGET_FILE:rtxray>
|
||||
-DRTHIDE=$<TARGET_FILE:rthide>
|
||||
-DBWPNG=$<TARGET_FILE:bw-png>
|
||||
-DFBCLEAR=$<TARGET_FILE:fbclear>
|
||||
-DPLOT3FB=$<TARGET_FILE:plot3-fb>
|
||||
-DFBPNG=$<TARGET_FILE:fb-png>
|
||||
-DMANIFEST=${CMAKE_CURRENT_SOURCE_DIR}/renderer_gallery/renderer_gallery_manifest.cmake
|
||||
-DIMGDIR=${CMAKE_CURRENT_SOURCE_DIR}/images
|
||||
-DADOC=${CMAKE_CURRENT_SOURCE_DIR}/renderer_showcase.adoc
|
||||
-DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/renderer_gallery_work
|
||||
-DDB=${CMAKE_BINARY_DIR}/${DATA_DIR}/db/cornell.g
|
||||
-DSIZE=512
|
||||
"-DTITLE=BRL-CAD Renderer Showcase"
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/renderer_gallery/generate_renderer_gallery.cmake
|
||||
DEPENDS
|
||||
rt
|
||||
rtedge
|
||||
rtdepth
|
||||
rtxray
|
||||
rthide
|
||||
bw-png
|
||||
fbclear
|
||||
plot3-fb
|
||||
fb-png
|
||||
cornell.g
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Regenerating renderer showcase gallery snapshot (images + adoc)"
|
||||
VERBATIM
|
||||
USES_TERMINAL
|
||||
)
|
||||
set_target_properties(renderer-gallery-snapshot PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
|
||||
endif()
|
||||
|
||||
# Solid geometry comparison -- opt-in regeneration of committed snapshots.
|
||||
#
|
||||
# The article and solid_rep_*.png images are normal committed documentation.
|
||||
# This target rebuilds the common pawn, derives each representation with the
|
||||
# built tools, and refreshes the images for review.
|
||||
option(
|
||||
BRLCAD_GENERATE_SOLID_REPRESENTATION_COMPARISON
|
||||
"Regenerate the solid geometry representation comparison snapshots"
|
||||
OFF
|
||||
)
|
||||
if(
|
||||
BRLCAD_GENERATE_SOLID_REPRESENTATION_COMPARISON
|
||||
AND TARGET mged
|
||||
AND TARGET rt
|
||||
AND TARGET g-voxel
|
||||
AND TARGET asc2pix
|
||||
AND TARGET fbclear
|
||||
AND TARGET plot3-fb
|
||||
AND TARGET fb-png
|
||||
)
|
||||
add_custom_target(
|
||||
solid-representation-comparison-snapshot
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DMGED=$<TARGET_FILE:mged>
|
||||
-DRT=$<TARGET_FILE:rt>
|
||||
-DGVOXEL=$<TARGET_FILE:g-voxel>
|
||||
-DASC2PIX=$<TARGET_FILE:asc2pix>
|
||||
-DFBCLEAR=$<TARGET_FILE:fbclear>
|
||||
-DPLOT3FB=$<TARGET_FILE:plot3-fb>
|
||||
-DFBPNG=$<TARGET_FILE:fb-png>
|
||||
-DMODEL_SCRIPT=${CMAKE_CURRENT_SOURCE_DIR}/solid_geometry_comparison/create_pawn.tcl
|
||||
-DIMGDIR=${CMAKE_CURRENT_SOURCE_DIR}/images
|
||||
-DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/solid_representation_comparison_work
|
||||
-DSIZE=512
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/solid_geometry_comparison/generate_comparison.cmake
|
||||
DEPENDS mged rt g-voxel asc2pix fbclear plot3-fb fb-png
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Regenerating solid geometry representation comparison snapshots"
|
||||
VERBATIM
|
||||
USES_TERMINAL
|
||||
)
|
||||
set_target_properties(
|
||||
solid-representation-comparison-snapshot
|
||||
PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1
|
||||
)
|
||||
endif()
|
||||
|
||||
# ADRT path-tracing gallery -- opt-in regeneration of the committed snapshot.
|
||||
#
|
||||
# Like the galleries above, the adrt_pathtrace.adoc article is hand-written and
|
||||
# the adrt_*.png images are committed documentation. This target refreshes the
|
||||
# images from the built `adrt`, `rt`, and `mged` tools and the sample databases
|
||||
# so a developer can review and commit the resulting diff.
|
||||
option(BRLCAD_GENERATE_ADRT_GALLERY "Regenerate the ADRT path-tracing snapshot" OFF)
|
||||
if(
|
||||
BRLCAD_GENERATE_ADRT_GALLERY
|
||||
AND TARGET adrt
|
||||
AND TARGET rt
|
||||
AND TARGET mged
|
||||
AND TARGET toyjeep.g
|
||||
AND TARGET castle.g
|
||||
AND TARGET cornell-kunigami.g
|
||||
AND TARGET chessboard.g
|
||||
)
|
||||
add_custom_target(
|
||||
adrt-pathtrace-snapshot
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DADRT=$<TARGET_FILE:adrt>
|
||||
-DRT=$<TARGET_FILE:rt>
|
||||
-DMGED=$<TARGET_FILE:mged>
|
||||
-DDB=${CMAKE_BINARY_DIR}/${DATA_DIR}/db
|
||||
-DIMGDIR=${CMAKE_CURRENT_SOURCE_DIR}/images
|
||||
-DWORKDIR=${CMAKE_CURRENT_BINARY_DIR}/adrt_gallery_work
|
||||
-DSIZE=512
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/adrt_gallery/generate_adrt_gallery.cmake
|
||||
DEPENDS
|
||||
adrt
|
||||
rt
|
||||
mged
|
||||
toyjeep.g
|
||||
castle.g
|
||||
cornell-kunigami.g
|
||||
chessboard.g
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Regenerating ADRT path-tracing snapshot (images)"
|
||||
VERBATIM
|
||||
USES_TERMINAL
|
||||
)
|
||||
set_target_properties(adrt-pathtrace-snapshot PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
|
||||
endif()
|
||||
|
||||
cmakefiles(
|
||||
CMakeLists.txt
|
||||
${articles_EN}
|
||||
${articles_EN_IMAGES}
|
||||
images/tire_fig12.svg
|
||||
images/tire_fig13.svg
|
||||
gallery/gallery_manifest.cmake
|
||||
gallery/generate_gallery.cmake
|
||||
renderer_gallery/renderer_gallery_manifest.cmake
|
||||
renderer_gallery/generate_renderer_gallery.cmake
|
||||
solid_geometry_comparison/create_pawn.tcl
|
||||
solid_geometry_comparison/generate_comparison.cmake
|
||||
adrt_gallery/generate_adrt_gallery.cmake
|
||||
gallery/inputs/pipe.stdin
|
||||
gallery/inputs/wire.stdin
|
||||
gallery/inputs/tube.stdin
|
||||
gallery/inputs/moss64.pix
|
||||
gallery/inputs/caffeine.pdb
|
||||
gallery/inputs/mol-cube.dat
|
||||
images/objtype_src/README.adoc
|
||||
images/objtype_src/objtype_lib.py
|
||||
images/objtype_src/gen_object_types.py
|
||||
)
|
||||
|
||||
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
|
||||
@@ -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 AsciiDoc. Consult the reference documentation for syntax and examples:
|
||||
|
||||
|
||||
* https://docs.asciidoctor.org/asciidoc/latest/[AsciiDoc Language Documentation]
|
||||
* https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/[AsciiDoc Syntax Quick Reference]
|
||||
|
||||
====
|
||||
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
====
|
||||
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
# generate_adrt_gallery.cmake -- regenerate the ADRT path-tracing snapshot.
|
||||
#
|
||||
# Run via: cmake -DADRT=... -DRT=... -DMGED=... -DDB=<share/db dir>
|
||||
# -DIMGDIR=... -DWORKDIR=... -DSIZE=512
|
||||
# -P generate_adrt_gallery.cmake
|
||||
#
|
||||
# Reproduces the committed images for doc/asciidoc/articles/adrt_pathtrace.adoc:
|
||||
# path-traced renders from the standalone `adrt` tool alongside `rt` full
|
||||
# lighting and `rt` ambient occlusion, for the sample toyjeep, chessboard,
|
||||
# castle, and Cornell box models. Cross-platform: uses only cmake tooling.
|
||||
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
foreach(v ADRT RT MGED DB IMGDIR WORKDIR)
|
||||
if(NOT DEFINED ${v})
|
||||
message(FATAL_ERROR "generate_adrt_gallery: -D${v}=... is required")
|
||||
endif()
|
||||
endforeach()
|
||||
if(NOT DEFINED SIZE)
|
||||
set(SIZE 512)
|
||||
endif()
|
||||
|
||||
set(RENDER_TIMEOUT 1800)
|
||||
set(AO "set ambSamples=128")
|
||||
|
||||
file(MAKE_DIRECTORY "${WORKDIR}")
|
||||
file(MAKE_DIRECTORY "${IMGDIR}")
|
||||
|
||||
set(N_OK 0)
|
||||
set(N_FAIL 0)
|
||||
set(FAILED "")
|
||||
|
||||
# Run a render command whose -o target is "${IMGDIR}/<out>", and report on it.
|
||||
function(render label out)
|
||||
set(img "${IMGDIR}/${out}")
|
||||
file(REMOVE "${img}")
|
||||
execute_process(
|
||||
COMMAND ${ARGN}
|
||||
WORKING_DIRECTORY "${WORKDIR}" TIMEOUT ${RENDER_TIMEOUT}
|
||||
RESULT_VARIABLE rc OUTPUT_VARIABLE log ERROR_VARIABLE log)
|
||||
if(EXISTS "${img}")
|
||||
file(SIZE "${img}" isz)
|
||||
else()
|
||||
set(isz 0)
|
||||
endif()
|
||||
if(isz GREATER 0 AND rc EQUAL 0)
|
||||
message(STATUS "[${label}] wrote ${out} (${isz} bytes)")
|
||||
math(EXPR N_OK "${N_OK} + 1" )
|
||||
else()
|
||||
message(WARNING "[${label}] FAILED (rc=${rc}):\n${log}")
|
||||
math(EXPR N_FAIL "${N_FAIL} + 1")
|
||||
list(APPEND FAILED "${out}")
|
||||
endif()
|
||||
set(N_OK "${N_OK}" PARENT_SCOPE)
|
||||
set(N_FAIL "${N_FAIL}" PARENT_SCOPE)
|
||||
set(FAILED "${FAILED}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# --- Toy jeep: path trace, rt comparison, and adrt shading modes ------------
|
||||
set(TJ "${DB}/toyjeep.g")
|
||||
render(toyjeep_path adrt_toyjeep_path.png
|
||||
${ADRT} -s${SIZE} -H256 -p12 -a35 -e25 -o "${IMGDIR}/adrt_toyjeep_path.png" "${TJ}" all)
|
||||
render(toyjeep_normal adrt_toyjeep_normal.png
|
||||
${ADRT} -s${SIZE} -m normal -p12 -a35 -e25 -o "${IMGDIR}/adrt_toyjeep_normal.png" "${TJ}" all)
|
||||
render(toyjeep_phong adrt_toyjeep_phong.png
|
||||
${ADRT} -s${SIZE} -m phong -p12 -a35 -e25 -o "${IMGDIR}/adrt_toyjeep_phong.png" "${TJ}" all)
|
||||
render(toyjeep_depth adrt_toyjeep_depth.png
|
||||
${ADRT} -s${SIZE} -m depth -p12 -a35 -e25 -o "${IMGDIR}/adrt_toyjeep_depth.png" "${TJ}" all)
|
||||
render(toyjeep_rt adrt_toyjeep_rt.png
|
||||
${RT} -s${SIZE} -a35 -e25 -A0.4 -o "${IMGDIR}/adrt_toyjeep_rt.png" "${TJ}" all)
|
||||
render(toyjeep_rt_ao adrt_toyjeep_rt_ao.png
|
||||
${RT} -s${SIZE} -a35 -e25 -A1.1 -c "${AO}" -o "${IMGDIR}/adrt_toyjeep_rt_ao.png" "${TJ}" all)
|
||||
|
||||
# --- Chessboard: bright sky lifts the flat, light-colored tiles -------------
|
||||
set(CH "${DB}/chess/chessboard.g")
|
||||
render(chess_path adrt_chess_path.png
|
||||
${ADRT} -s${SIZE} -H768 -p12 -a40 -e35 -C 255/255/255 -o "${IMGDIR}/adrt_chess_path.png" "${CH}" board.g)
|
||||
render(chess_rt adrt_chess_rt.png
|
||||
${RT} -s${SIZE} -a40 -e35 -A0.4 -o "${IMGDIR}/adrt_chess_rt.png" "${CH}" board.g)
|
||||
render(chess_rt_ao adrt_chess_rt_ao.png
|
||||
${RT} -s${SIZE} -a40 -e35 -A1.1 -c "${AO}" -o "${IMGDIR}/adrt_chess_rt_ao.png" "${CH}" board.g)
|
||||
|
||||
# --- Castle: facetize the CSG to a colored BoT, then path trace -------------
|
||||
# The castle is one region unioning many instanced solids; on-the-fly NMG
|
||||
# evaluation fails, so convert it once with the Manifold facetizer. rt still
|
||||
# traces the original CSG natively for the comparison images.
|
||||
set(CFAC "${WORKDIR}/castle_fac.g")
|
||||
file(REMOVE "${CFAC}")
|
||||
configure_file("${DB}/castle.g" "${CFAC}" COPYONLY)
|
||||
execute_process(COMMAND ${MGED} -c "${CFAC}" facetize -o castle_only all.g/castle
|
||||
TIMEOUT ${RENDER_TIMEOUT} RESULT_VARIABLE frc OUTPUT_VARIABLE flog ERROR_VARIABLE flog)
|
||||
execute_process(COMMAND ${MGED} -c "${CFAC}" r castle_r u castle_only
|
||||
TIMEOUT 120 OUTPUT_QUIET ERROR_QUIET)
|
||||
execute_process(COMMAND ${MGED} -c "${CFAC}" mater castle_r plastic 255 255 100 0
|
||||
TIMEOUT 120 OUTPUT_QUIET ERROR_QUIET)
|
||||
render(castle_path adrt_castle_path.png
|
||||
${ADRT} -s${SIZE} -H256 -p12 -a135 -e30 -o "${IMGDIR}/adrt_castle_path.png" "${CFAC}" castle_r)
|
||||
render(castle_rt adrt_castle_rt.png
|
||||
${RT} -s${SIZE} -a135 -e30 -A0.4 -o "${IMGDIR}/adrt_castle_rt.png" "${DB}/castle.g" castle)
|
||||
render(castle_rt_ao adrt_castle_rt_ao.png
|
||||
${RT} -s${SIZE} -a135 -e30 -A1.1 -c "${AO}" -o "${IMGDIR}/adrt_castle_rt_ao.png" "${DB}/castle.g" castle)
|
||||
|
||||
# --- Cornell box: global illumination from the emissive ceiling panel -------
|
||||
set(CB "${DB}/cornell-kunigami.g")
|
||||
render(cornell_path adrt_cornell_path.png
|
||||
${ADRT} -s${SIZE} -H512 -E 278,370.9,-454 -L 278,274,279 -p25 -o "${IMGDIR}/adrt_cornell_path.png" "${CB}" all.g)
|
||||
render(cornell_phong adrt_cornell_phong.png
|
||||
${ADRT} -s${SIZE} -m phong -E 278,370.9,-454 -L 278,274,279 -p25 -o "${IMGDIR}/adrt_cornell_phong.png" "${CB}" all.g)
|
||||
|
||||
message(STATUS "")
|
||||
message(STATUS "ADRT path-tracing snapshot: ${N_OK} rendered, ${N_FAIL} failed.")
|
||||
if(FAILED)
|
||||
string(REPLACE ";" ", " failstr "${FAILED}")
|
||||
message(STATUS "Failed: ${failstr}")
|
||||
endif()
|
||||
@@ -1,220 +0,0 @@
|
||||
= Path Tracing with ADRT
|
||||
:doctype: article
|
||||
:toc:
|
||||
:toclevels: 3
|
||||
|
||||
ADRT (the _Advanced Distributed Ray Tracer_) is BRL-CAD's triangle-based
|
||||
rendering engine. Alongside the usual scanline shaders it carries a
|
||||
Monte-Carlo *path tracer* that computes global illumination -- soft ambient
|
||||
light, contact shadows, and diffuse color bleeding -- by tracing many random
|
||||
light paths per pixel. This article explains how ADRT is put together and
|
||||
walks through producing path-traced images with the standalone `adrt`
|
||||
command, comparing the result to `rt`'s ambient-occlusion lighting.
|
||||
|
||||
.Path-traced global illumination: the Cornell box rendered with `adrt -m path`
|
||||
image::images/adrt_cornell_path.png[Cornell box path traced,384]
|
||||
|
||||
== How ADRT works
|
||||
|
||||
ADRT is layered on top of BRL-CAD's *TIE* (Triangle Intersection Engine), the
|
||||
same SIMD-friendly kd-tree ray tracer used by `rtwizard`, `nirt`'s mesh mode,
|
||||
and the geometry viewers. Because TIE only intersects triangles, ADRT first
|
||||
*tessellates* geometry:
|
||||
|
||||
* Bags-of-triangles (BoT) are handed to TIE directly.
|
||||
* Every other solid (CSG primitives, NMG, etc.) is tessellated to triangles as
|
||||
the database tree is walked. Region colors are carried onto the resulting
|
||||
meshes, and regions whose material shader is a light source (the classic
|
||||
`light` shader or an OSL `emitter`) are marked *emissive*.
|
||||
|
||||
Rendering itself lives in *librender* (`src/adrt/librender`), a small library of
|
||||
interchangeable shaders selected by name:
|
||||
|
||||
[cols="1,4"]
|
||||
|===
|
||||
|`path` |Monte-Carlo path tracer (global illumination)
|
||||
|`phong` |Direct Phong lighting from the eye
|
||||
|`normal` |Surface normals encoded as RGB
|
||||
|`depth` |Camera-space depth
|
||||
|`flat` |Flat region color
|
||||
|`component`, `cut`, `flos`, `grid`, `spall`, `surfel` |Analysis shaders
|
||||
|===
|
||||
|
||||
Several front ends drive that library:
|
||||
|
||||
* *`adrt`* -- a single-process, headless renderer that writes an image file.
|
||||
This is the tool used throughout this article.
|
||||
* *`isst`* -- an interactive Tcl/Tk + OpenGL viewer for real-time fly-throughs.
|
||||
* *`adrt_master`* / *`adrt_slave`* -- a networked master/worker pair (the
|
||||
"distributed" in ADRT) that farms tiles out to compute nodes for an external
|
||||
observer.
|
||||
|
||||
== Rendering a path-traced image
|
||||
|
||||
The `adrt` command loads a `.g` database, frames the requested objects, renders
|
||||
one frame, and writes the image (the extension selects the format):
|
||||
|
||||
----
|
||||
adrt [options] model.g object [object ...]
|
||||
----
|
||||
|
||||
[cols="1,4"]
|
||||
|===
|
||||
|`-o file` |Output image; extension picks the format (default `adrt.png`)
|
||||
|`-s N` |Square image size in pixels (default 512); or `-w`/`-n` for width/height
|
||||
|`-m mode` |Shader: `path`, `phong`, `normal`, `depth`, `flat` (default `path`)
|
||||
|`-H N` |Path-tracer samples per pixel (default 32) -- more samples, less noise
|
||||
|`-a` / `-e` |View azimuth / elevation in degrees (default 35 / 25)
|
||||
|`-E x,y,z` |Explicit eye point in model units (overrides `-a`/`-e`)
|
||||
|`-L x,y,z` |Explicit look-at point (default: model center)
|
||||
|`-p fov` |Perspective half-angle in degrees (default 25)
|
||||
|`-C r/g/b` |Environment/sky color, 0-255 (default `230/237/255`)
|
||||
|`-P N` |Render threads (default: all CPUs)
|
||||
|===
|
||||
|
||||
A first render of the sample toy jeep:
|
||||
|
||||
----
|
||||
adrt -s 512 -H 256 -a 35 -e 25 -o toyjeep.png toyjeep.g all
|
||||
----
|
||||
|
||||
`adrt` reports the triangle count, load time, and render time, then writes the
|
||||
PNG. The camera is a perspective camera aimed at the model center; `-a`/`-e`
|
||||
orbit it and `-p` sets the field of view. For scenes that are not simply
|
||||
oriented -- an enclosed, Y-up Cornell box, for instance -- give an explicit eye
|
||||
and look-at point instead:
|
||||
|
||||
----
|
||||
adrt -s 512 -H 512 -E 278,370.9,-454 -L 278,274,279 -p 25 \
|
||||
-o cornell.png cornell-kunigami.g all.g
|
||||
----
|
||||
|
||||
=== The environment and ambient light
|
||||
|
||||
Rays that leave the scene without hitting anything pick up light from a built-in
|
||||
environment: a vertical gradient of the sky color, full strength overhead and
|
||||
dimming toward the ground. This "overcast sky" is what illuminates open
|
||||
scenes. With diffuse surfaces it produces physically-based *ambient occlusion*
|
||||
for free -- up-facing faces catch the bright sky while crevices and undersides
|
||||
fall into shadow -- and it also paints the graduated background. `-C` tunes the
|
||||
sky color and brightness (a brighter sky lifts flat, light-colored surfaces).
|
||||
|
||||
Enclosed scenes such as the Cornell box see no sky; there, the emissive light
|
||||
region is the only source, and the interior is lit entirely by bounced,
|
||||
indirect light.
|
||||
|
||||
== Path tracing versus `rt` ambient occlusion
|
||||
|
||||
`rt`, BRL-CAD's production CSG ray tracer, approximates indirect shading with an
|
||||
*ambient occlusion* pass, enabled with a nonzero ambient factor and a sample
|
||||
count:
|
||||
|
||||
----
|
||||
rt -A1.1 -c "set ambSamples=128" -s512 -a35 -e25 -o out.png model.g object
|
||||
----
|
||||
|
||||
The panels below compare, for the same view, ADRT's path tracer against `rt`
|
||||
with full lighting only and `rt` with ambient occlusion added. ADRT's path
|
||||
tracer resolves the sky illumination and soft inter-surface shadowing in a
|
||||
single physically-based pass; `rt`'s ambient occlusion darkens cavities on top
|
||||
of its direct lighting model.
|
||||
|
||||
.Toy jeep -- `adrt -m path` / `rt` full lighting / `rt` ambient occlusion
|
||||
[cols="1,1,1",frame=none,grid=none]
|
||||
|===
|
||||
|image:images/adrt_toyjeep_path.png[adrt path,256]
|
||||
|image:images/adrt_toyjeep_rt.png[rt plain,256]
|
||||
|image:images/adrt_toyjeep_rt_ao.png[rt AO,256]
|
||||
|*adrt path traced*
|
||||
|*rt full lighting*
|
||||
|*rt ambient occlusion*
|
||||
|===
|
||||
|
||||
.Chessboard -- `adrt -m path` / `rt` full lighting / `rt` ambient occlusion
|
||||
[cols="1,1,1",frame=none,grid=none]
|
||||
|===
|
||||
|image:images/adrt_chess_path.png[adrt path,256]
|
||||
|image:images/adrt_chess_rt.png[rt plain,256]
|
||||
|image:images/adrt_chess_rt_ao.png[rt AO,256]
|
||||
|*adrt path traced*
|
||||
|*rt full lighting*
|
||||
|*rt ambient occlusion*
|
||||
|===
|
||||
|
||||
== Global illumination: the Cornell box
|
||||
|
||||
The Cornell box is the classic test of indirect lighting: a closed room lit only
|
||||
by a small ceiling panel. ADRT detects the emissive light region and lets the
|
||||
path tracer bounce that light around the room. Compared with the direct-only
|
||||
`phong` shader, the path-traced image adds the glowing light source, soft
|
||||
shadows beneath the blocks, and *color bleeding* -- the red floor and blue walls
|
||||
tint the neighboring surfaces.
|
||||
|
||||
.Cornell box -- `adrt -m path` (global illumination) versus `adrt -m phong` (direct only)
|
||||
[cols="1,1",frame=none,grid=none]
|
||||
|===
|
||||
|image:images/adrt_cornell_path.png[adrt path,320]
|
||||
|image:images/adrt_cornell_phong.png[adrt phong,320]
|
||||
|*Path traced:* area light, soft shadows, color bleeding
|
||||
|*Phong:* direct lighting only, no indirect light
|
||||
|===
|
||||
|
||||
== Complex CSG: facetize first
|
||||
|
||||
ADRT tessellates as it loads, but a few heavily-booleaned models do not survive
|
||||
on-the-fly NMG evaluation -- the sample `castle`, whose whole structure is one
|
||||
region unioning dozens of instanced solids, is one. `rt` traces it natively as
|
||||
CSG, but for ADRT the robust path is to convert it to a triangle mesh once with
|
||||
the Manifold-based facetizer, then render the mesh:
|
||||
|
||||
----
|
||||
# in mged, on a working copy of the database
|
||||
facetize -o castle_bot all.g/castle
|
||||
|
||||
adrt -s 512 -H 256 -a 135 -e 30 -o castle.png castle.g castle_bot
|
||||
----
|
||||
|
||||
.Castle -- facetized then `adrt -m path` / `rt` full lighting / `rt` ambient occlusion
|
||||
[cols="1,1,1",frame=none,grid=none]
|
||||
|===
|
||||
|image:images/adrt_castle_path.png[adrt path,256]
|
||||
|image:images/adrt_castle_rt.png[rt plain,256]
|
||||
|image:images/adrt_castle_rt_ao.png[rt AO,256]
|
||||
|*adrt path traced*
|
||||
|*rt full lighting*
|
||||
|*rt ambient occlusion*
|
||||
|===
|
||||
|
||||
== Other shading modes
|
||||
|
||||
The same `adrt` invocation reaches librender's analysis shaders through `-m`,
|
||||
useful for inspecting form and orientation without lighting:
|
||||
|
||||
[cols="1,1,1",frame=none,grid=none]
|
||||
|===
|
||||
|image:images/adrt_toyjeep_phong.png[phong,256]
|
||||
|image:images/adrt_toyjeep_normal.png[normal,256]
|
||||
|image:images/adrt_toyjeep_depth.png[depth,256]
|
||||
|*`-m phong`* direct lighting
|
||||
|*`-m normal`* surface normals
|
||||
|*`-m depth`* camera depth
|
||||
|===
|
||||
|
||||
== Notes and limitations
|
||||
|
||||
* The path tracer is a straightforward forward tracer with no next-event
|
||||
estimation or denoising. Raise `-H` to reduce Monte-Carlo noise; large
|
||||
perfectly-diffuse, high-albedo surfaces are the noisiest.
|
||||
* Materials are approximated: regions render as opaque diffuse surfaces using
|
||||
their region color, `light`/`emitter` regions become area lights, and
|
||||
specular/refractive shaders are not yet modeled.
|
||||
* Only triangle-representable geometry contributes; non-tessellatable solids
|
||||
(for example infinite half-spaces) are skipped.
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
The images in this article are a committed snapshot. Developers can regenerate
|
||||
them from the built tools by configuring with
|
||||
`-DBRLCAD_GENERATE_ADRT_GALLERY=ON` and building the `adrt-pathtrace-snapshot`
|
||||
target.
|
||||
====
|
||||
@@ -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 to 25. The span is the count of distinct leftmost numbers taken inclusively, from the lowest through the highest: 22, 23, 24, and 25 -- four values in all. It is computed as (highest - lowest) + 1, that is, (25 - 22) + 1 = 4. If we use an increment of four, each leftmost number is shifted up by four (22 becomes 26, 23 becomes 27, and so on), and 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[]
|
||||
|
||||
|
||||
@@ -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, as shown in <<build_region9>>. We can break this name down as follows: the root name `wgn` identifies the region; `.s2` is the base solid the operation applies to; and the trailing `-2` marks this as the second subtraction from that solid (the first having been `wgn.s2-1`).
|
||||
|
||||
[[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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
====
|
||||
|
||||
@@ -1,108 +0,0 @@
|
||||
# gallery_manifest.cmake -- data table for the procedural geometry gallery.
|
||||
#
|
||||
# Pure-CMake data file consumed by generate_gallery.cmake. ALL per-demo
|
||||
# knowledge lives here so the generator stays generic (no `mged tops` parsing,
|
||||
# no platform branches).
|
||||
#
|
||||
# Each demo is one bracket-argument string in GALLERY_DEMO_<i>, with fields
|
||||
# separated by '|'. Bracket args ([=[ ... ]=]) preserve embedded quotes,
|
||||
# semicolons, and commas verbatim, so captions need no escaping. The caption
|
||||
# is the LAST field; the generator takes everything after the 9th '|' as the
|
||||
# caption (so semicolons in captions are safe).
|
||||
#
|
||||
# Fields (in order):
|
||||
# name image basename -> gallery_<name>.png
|
||||
# section group heading (drives .adoc sections, in first-seen order)
|
||||
# driver exec | stdin:<inputfile> | tomged | mgedcmd:<cmd>
|
||||
# exe target/binary basename (resolved via ensearch)
|
||||
# args argument template; @OUT@ = chosen .g path, @IN:<file>@ = input data path
|
||||
# gfile database to render: @OUT@ (the chosen .g) or @GLOB@ (lone *.g in workdir)
|
||||
# objects space-separated render objects
|
||||
# autoview space-separated objects for `-c "autoview ..."`, or empty
|
||||
# render ao (default, adds -c "set ambSamples=64") | noao
|
||||
# caption one-line description
|
||||
|
||||
set(GALLERY_DEMO_COUNT 61)
|
||||
|
||||
# ---- New demonstrations -----------------------------------------------------
|
||||
set(GALLERY_DEMO_0 [=[terragen|New demonstrations|exec|terragen|@OUT@|@OUT@|all|terrain.r water.r|ao|Fractal DSP terrain island with reflective water and a cloud environment-map sky; rendered with the new rt autoview command framing terrain+water.]=])
|
||||
set(GALLERY_DEMO_1 [=[voxelize|New demonstrations|exec|voxelize|@OUT@|@OUT@|all||ao|Demonstrates BRL-CAD's "vol" (3-D volume) and "ebm" (extruded bitmap) primitives by sampling a procedural 3-D scalar field (a triply-periodic gyroid by default) over a regular grid. It writes sidecar .vol/.ebm data files and builds an orange voxel isosurface (with a cutaway box) plus a blue extruded height-field companion.]=])
|
||||
set(GALLERY_DEMO_2 [=[lattice|New demonstrations|exec|lattice|@OUT@|@OUT@|all||ao|A full geodesic-sphere space-frame built by instancing one unit strut prototype across every de-duplicated geodesic edge, with joint spheres.]=])
|
||||
set(GALLERY_DEMO_3 [=[loftwing|New demonstrations|exec|loftwing|@OUT@|@OUT@|all||ao|A lofted NACA 4-digit airfoil wing (ARS) with taper, twist, sweep, and dihedral and a full root section.]=])
|
||||
set(GALLERY_DEMO_4 [=[loftwing_prop|New demonstrations|exec|loftwing|@OUT@ --mode prop|@OUT@|all||ao|Propeller mode of loftwing: one strongly twisted NACA blade instanced around a central hub to form a 3-blade propeller.]=])
|
||||
set(GALLERY_DEMO_5 [=[gears|New demonstrations|exec|gears|@OUT@|@OUT@|all|ground.r|ao|Builds a meshing involute spur-gear train, demonstrating the sketch->extrude procedural-modeling workflow in libwdb: each gear is one extruded involute tooth profile unioned in rotated copies around a hub with a central bore, laid left-to-right so the teeth interlock, plus a ground plane and a light under a top group "all".]=])
|
||||
set(GALLERY_DEMO_6 [=[helicoil|New demonstrations|exec|helicoil|@OUT@|@OUT@|all|coil.r|ao|Procedurally builds helical pipe solids (spring, screw, or DNA double helix) swept along a helix centerline via mk_pipe(); the default "spring" mode renders a chrome coil spring on a ground plane with a light, assembled into a top-level group "all".]=])
|
||||
set(GALLERY_DEMO_7 [=[specimen|New demonstrations|exec|specimen|@OUT@|@OUT@|all|ground.r|ao|Analytic-primitive specimen shelf (rpc, rhc, epa, ehy, hyp, eto, hrt, arbn, particle, tor, tgc, ell); rt autoview frames the shelf.]=])
|
||||
set(GALLERY_DEMO_59 [=[seashell|New demonstrations|exec|seashell|@OUT@|@OUT@|all||ao|A shelf of procedurally grown seashells. Each shell is one watertight BoT solid: a superformula generating curve (the aperture cross-section) is swept along a logarithmic helico-spiral, with the coil radius, axial rise, and cross-section all scaling by the same exponential growth factor per whorl -- the self-similar "gnomonic" growth a real mollusk uses -- so successive whorls nest without intersecting. Four species (a planispiral nautilus, a rounded-pentagon-mouthed conch, a tall fluted turret/auger, and a round snail) come from one parametric model, each with analytically smoothed vertex normals and rounded, tapered ends.]=])
|
||||
set(GALLERY_DEMO_60 [=[seashell_nautilus|New demonstrations|exec|seashell|@OUT@ --mode nautilus|@OUT@|all||ao|Single hero shell from the seashell generator: a pearly planispiral nautilus. The logarithmic-spiral sweep of a growing elliptical aperture reproduces the classic equiangular whorl, closed into a ray-traceable BoT solid with smooth shading.]=])
|
||||
|
||||
# ---- Fractals & recursion ---------------------------------------------------
|
||||
set(GALLERY_DEMO_8 [=[sphflake|Fractals & recursion|exec|sphflake|-d 3 -f @OUT@|@OUT@|scene.r|depth0.r depth1.r depth2.r depth3.r|ao|Recursive mirror-sphere flake fractal; rendered with rt autoview framing the flake (depth0-3.r) over a checkered plane.]=])
|
||||
set(GALLERY_DEMO_9 [=[donuts|Fractals & recursion|exec|donuts|-o @OUT@|@OUT@|scene.r|depth0.r depth1.r depth2.r depth3.r|ao|Recursive torus "donut flake" fractal; rendered with rt autoview framing the flake regions.]=])
|
||||
set(GALLERY_DEMO_10 [=[menger|Fractals & recursion|exec|menger|-o @OUT@|@OUT@|menger|sponge.r|ao|A Menger sponge fractal carved from a cube with the recursive exterior (subtractive) pattern, on a ground plane with two lights.]=])
|
||||
set(GALLERY_DEMO_11 [=[pyramid|Fractals & recursion|exec|pyramid|5|@GLOB@|tree||ao|Generates a recursive 3-D Sierpinski-style pyramid built from ARB4 tetrahedra, subdividing each pyramid into 4 smaller ones per level (inspired by Glassner's SigGraph paper).]=])
|
||||
set(GALLERY_DEMO_12 [=[torii|Fractals & recursion|exec|torii|@OUT@|@OUT@|all||ao|An interwoven chain-mail weave of interlocking torii with a radial gradient of tube thickness (and color). Adjacent rings thread each other's holes without the solid tubes ever intersecting (verified 0 overlaps), so the whole sheet is a single, articulating, fully 3D-printable piece of mail.]=])
|
||||
|
||||
# ---- Architecture & structural ----------------------------------------------
|
||||
set(GALLERY_DEMO_13 [=[masonry_frame|Architecture & structural|exec|masonry|-t frame -u ft -w 12,8 -o 3,0,5,7 -n wall|@GLOB@|r.wall.studs||ao|masonry wall generator, wood-frame wall type: studs, plates, and framing around a window opening.]=])
|
||||
set(GALLERY_DEMO_14 [=[masonry_sheetrock|Architecture & structural|exec|masonry|-t sheetrock -u ft -w 12,8 -o 3,0,5,7 -n wall|@GLOB@|r.wall.sr1||ao|masonry wall generator, sheetrock wall type.]=])
|
||||
set(GALLERY_DEMO_15 [=[masonry_brick|Architecture & structural|exec|masonry|-t brick -u in -w 96,48 -n wall|@GLOB@|r.wall.b||ao|masonry wall generator, brick wall type (prototype brick).]=])
|
||||
set(GALLERY_DEMO_16 [=[masonry_bm|Architecture & structural|exec|masonry|-t bm -u in -w 96,48 -m 0.25 -n wall|@GLOB@|r.wall.b||ao|masonry wall generator, mortar-brick wall type: brick with horizontal and vertical mortar joints.]=])
|
||||
set(GALLERY_DEMO_17 [=[brickwall|Architecture & structural|tomged|brickwall||@OUT@|g.brick||ao|Builds a brick wall: emits mged commands that create RPP brick solids arranged in rows (with optional mortar slabs between them) to fill a specified wall width and height. Output is a stream of mged commands on stdout, not a .g directly.]=])
|
||||
set(GALLERY_DEMO_18 [=[mkbuilding|Architecture & structural|exec|mkbuilding|@OUT@|@OUT@|house||ao|Generates a physically dimensioned building with material-separated walls, slabs, framed openings, roof, and optional structural members; JSON, OSM, and CityJSON specifications can produce full building catalogs.]=])
|
||||
set(GALLERY_DEMO_19 [=[cchannel|Architecture & structural|exec|cchannel|-f @OUT@ -H 0.2|@OUT@|channel.r||ao|Creates a section of fully configurable C-channel (structural metal beam). Default is a 1" diameter by 12" long section of American standard C-channel, here generated with a row of drilled holes.]=])
|
||||
set(GALLERY_DEMO_20 [=[ringworld|Architecture & structural|exec|ringworld|-o @OUT@|@OUT@|all.g||ao|Generates a "ringworld" as imagined by Larry Niven: a central sun sphere and a large CSG ring (built from three RCCs) orbiting it, combined into a top-level group all.g.]=])
|
||||
|
||||
# ---- Organic, molecular & scenery -------------------------------------------
|
||||
set(GALLERY_DEMO_21 [=[vegetation|Organic, molecular & scenery|exec|vegetation|@OUT@ 20 30000 300 0.1 42|@GLOB@|plant.r||ao|Procedurally generates plant-like geometry (trees/shrubbery) from particle primitives built recursively with random branching and growth parameters, including an optional repeatability seed.]=])
|
||||
set(GALLERY_DEMO_22 [=[clutter|Organic, molecular & scenery|exec|clutter||@GLOB@|clut||ao|Generates procedural "clutter" made of primitive geometric objects: a grid of detail cells on a ground plane, each holding a random stack of spheres, crystals, or mixed primitives (boxes, cylinders, cones, ellipsoids), all enclosed by concentric torus rings and lit by four corner lights.]=])
|
||||
set(GALLERY_DEMO_23 [=[metaball|Organic, molecular & scenery|exec|metaball|-o @OUT@|@OUT@|meatballs.r||ao|Programmatically creates and combines metaball ("blobby") primitives: it generates three sets of randomly-placed iso-method metaballs via libwdb, then reads them back and merges all their points into one combined "mega metaball" via librt.]=])
|
||||
set(GALLERY_DEMO_24 [=[molecule|Organic, molecular & scenery|stdin:mol-cube.dat|molecule|Cube|@GLOB@|molecule||ao|Ball-and-stick molecule (spheres for atoms, cylinders for bonds) read from a G. Adams .dat file -- here a bonded cube of atoms with a central hub.]=])
|
||||
set(GALLERY_DEMO_25 [=[pdb-g|Organic, molecular & scenery|exec|pdb-g|@IN:caffeine.pdb@ @OUT@|@OUT@|all_atoms.r||ao|Reads a Protein Data Bank (PDB) text file and converts each atom into a 1mm-radius sphere, grouping them into a single combination to produce a BRL-CAD geometry database of the molecule (caffeine).]=])
|
||||
|
||||
# ---- Mechanical & engineering -----------------------------------------------
|
||||
set(GALLERY_DEMO_26 [=[pipe|Mechanical & engineering|stdin:pipe.stdin|pipe|-t demo @OUT@|@OUT@|demo.pipe demo.fluid||ao|Generates piping (fuel/hydraulic lines, etc.) in MGED format from a routed sequence of 3D points, building both tubing regions and inner fluid regions, with automatically generated elbow regions wherever the pipe changes direction.]=])
|
||||
set(GALLERY_DEMO_27 [=[pipetest|Mechanical & engineering|exec|pipetest||@GLOB@|p1 p2 p3 pipe1||ao|Generates a test database of pipe and particle primitives: three particle solids (spherical, cylindrical, and conical) plus a multi-segment straight pipe and a bent pipe traced around a cube's faces.]=])
|
||||
set(GALLERY_DEMO_28 [=[tube|Mechanical & engineering|stdin:tube.stdin|tube||@GLOB@|g0||ao|Generates a gun-tube (cannon barrel) as a procedural spline/cylinder whose core lies on the X axis, optionally deformed per-frame from projectile firing data. With no stdin data it emits the static frame-0 geometry from a built-in center-of-mass table.]=])
|
||||
set(GALLERY_DEMO_29 [=[lens|Mechanical & engineering|exec|lens|@OUT@|@OUT@|lens_DCX_f600.0_d200.0.r||ao|Generates basic optical lenses (plano/double convex or concave) by using the lensmaker's equation to derive the geometry from inputs like type, diameter, focal length, refractive index, and thickness.]=])
|
||||
|
||||
# ---- NURBS, B-rep, splines & surfaces ---------------------------------------
|
||||
set(GALLERY_DEMO_30 [=[brep_simple|NURBS, B-rep, splines & surfaces|exec|brep_simple||@GLOB@|cube.r||ao|Creates a single twisted-cube B-Rep solid directly via the openNURBS API (8 vertices, 12 edges, 6 faces) and writes it to a BRL-CAD database, demonstrating NURBS B-Rep construction.]=])
|
||||
set(GALLERY_DEMO_31 [=[brep_cube|NURBS, B-rep, splines & surfaces|exec|brep_cube||@GLOB@|cube.r||ao|Creates a twisted-cube B-Rep solid (8 vertices, 12 edges, 6 faces) by directly using the openNURBS API, then writes it to a BRL-CAD database. Copied almost verbatim from the openNURBS example_brep.cpp to explore B-Rep creation.]=])
|
||||
set(GALLERY_DEMO_32 [=[brep_cobb|NURBS, B-rep, splines & surfaces|exec|brep_cobb|@OUT@|@OUT@|cobb.r||ao|A Cobb NURBS unit sphere tiled with six rational Bezier patches.]=])
|
||||
set(GALLERY_DEMO_33 [=[brep_surface|NURBS, B-rep, splines & surfaces|exec|brep_surface|-H 1.0|@GLOB@|brep_surface.r||ao|Creates a single plate-mode NURBS (B-Rep) surface with a given thickness, defined by four control points, and writes it as a region to a .g database.]=])
|
||||
set(GALLERY_DEMO_34 [=[brep_trimmed|NURBS, B-rep, splines & surfaces|exec|brep_trimmed||@GLOB@|brep_trimmed.r||ao|Generates a single B-rep NURBS surface (a flat 10x10 square patch) with both an outer trimming loop and an interior rectangular trim/hole, demonstrating ON_Brep construction of trimmed surfaces.]=])
|
||||
set(GALLERY_DEMO_35 [=[brep_invalid|NURBS, B-rep, splines & surfaces|exec|brep_invalid||@GLOB@|brep_invalid.r||ao|Creates a single trimmed NURBS B-rep surface (one face of a Cobb sphere) with a deliberately invalid inner trim loop, to test/demonstrate handling of invalid trim geometry.]=])
|
||||
set(GALLERY_DEMO_36 [=[breplicator|NURBS, B-rep, splines & surfaces|exec|breplicator||@GLOB@|brep||ao|breplicator is a test tool for the BREP (boundary representation) primitive in librt; it builds a single closed 6-faced NURBS solid (an arb8-shaped box) via mk_brep() and writes it to a database.]=])
|
||||
set(GALLERY_DEMO_37 [=[csgbrep|NURBS, B-rep, splines & surfaces|exec|csgbrep||@GLOB@|all.g||ao|A reference gallery of CSG/implicit primitives, each also converted to a brep, grouped under a single top object.]=])
|
||||
set(GALLERY_DEMO_38 [=[surfaceintersect|NURBS, B-rep, splines & surfaces|exec|surfaceintersect|@OUT@|@OUT@|all||ao|Writes the two twisted-cube NURBS B-rep surfaces (red and blue). The experimental surface-surface intersection is behind a -x flag (off by default, as it currently crashes).]=])
|
||||
set(GALLERY_DEMO_39 [=[spltest|NURBS, B-rep, splines & surfaces|exec|spltest|@OUT@|@OUT@|spltest||ao|A NURBS spline test: a valid order-2 B-spline surface built from a 3x3 control mesh with a gently lifted center.]=])
|
||||
set(GALLERY_DEMO_40 [=[tea|NURBS, B-rep, splines & surfaces|exec|tea||@GLOB@|UtahTeapot||ao|Converts the Utah Teapot description from the IEEE CG&A database into BRL-CAD spline (NURBS) format, producing the classic closed-bottom teapot as a B-spline solid.]=])
|
||||
set(GALLERY_DEMO_41 [=[wavy|NURBS, B-rep, splines & surfaces|exec|wavy||@GLOB@|wavy||ao|Creates a random wavy surface modeled as a B-spline (NURBS) surface, generating a 10x10 grid of points with randomized height and interpolating them into a spline solid.]=])
|
||||
set(GALLERY_DEMO_42 [=[kurt|NURBS, B-rep, splines & surfaces|exec|kurt||@GLOB@|all||ao|Builds a surface from a multi-valued cubic function sampled over an 18x18 grid, triangulated into a BoT height-field sheet.]=])
|
||||
set(GALLERY_DEMO_43 [=[sketch|NURBS, B-rep, splines & surfaces|exec|sketch||@GLOB@|all||noao|Builds a 2D sketch (line/arc/bezier segments) and extrudes it into a renderable solid via mk_extrusion.]=])
|
||||
|
||||
# ---- Primitives, BoT & API basics -------------------------------------------
|
||||
set(GALLERY_DEMO_44 [=[wdb_example|Primitives, BoT & API basics|exec|wdb_example|@OUT@|@OUT@|box_n_ball.r||ao|Demonstrates creating a BRL-CAD geometry database from C code using the libwdb API: it writes a sphere (ball.s) and an rpp/box (box.s), then unions them into a green plastic region named box_n_ball.r.]=])
|
||||
set(GALLERY_DEMO_45 [=[globe|Primitives, BoT & API basics|exec|globe|@OUT@|@OUT@|globe.r land.c||ao|Creates a set of concentric spherical "shells" (like an onion) that together form a unified solid sphere: a green solid land core surrounded by progressively transparent blue air layers.]=])
|
||||
set(GALLERY_DEMO_46 [=[bottest|Primitives, BoT & API basics|exec|bottest|@OUT@|@OUT@|bot_u_surf bot_ccw_surf bot_cw_surf bot_u_solid bot_ccw_solid bot_cw_solid bot_u_plate bot_ccw_plate bot_cw_plate bot_solid_dup_vs bot_solid_dup_fs||ao|Generates a set of test BOT (Bag of Triangles) solids in a .g database, covering every BOT mode/orientation combination: surface, solid, and plate types in unoriented/CCW/CW orientations, plus BOTs with duplicate vertices and faces for fuse/condense testing.]=])
|
||||
set(GALLERY_DEMO_47 [=[pix2g|Primitives, BoT & API basics|exec|pix2g|@IN:moss64.pix@ @OUT@ 64 64|@OUT@|image.c||ao|pix2g generates geometry from a pixmap (.pix) image: it creates one colored sphere per pixel arranged on a grid, where each sphere's color matches the corresponding pixel's RGB value, producing a 3D point-cloud rendition of the image.]=])
|
||||
|
||||
# ---- src/shapes -- parametric shape generators ------------------------------
|
||||
set(GALLERY_DEMO_48 [=[bolt|src/shapes -- parametric shape generators|exec|bolt|-o3 -fbolt.g -n1 -hd30 -hh20 -wd45 -wh4 -sd14 -sh90|@GLOB@|bolta||ao|bolt is a BRL-CAD libwdb program that creates a bolt (in mm). It can build four types: a bolt head, head + washer, head + washer + stem, or head + stem. The head is a hex (two arb8 solids), the washer and stem are RCCs.]=])
|
||||
set(GALLERY_DEMO_49 [=[coil|src/shapes -- parametric shape generators|mgedcmd:coil mycoil|coil||@OUT@|mycoil||ao|Coil Generator -- a program to create coils (helical springs) using the BRL-CAD pipe primitive.]=])
|
||||
set(GALLERY_DEMO_50 [=[fence|src/shapes -- parametric shape generators|exec|fence|-o @OUT@ -L 2000 -N 1200 -j 400 -R 30 -r 5 -a 30 -c "70 90 110"|@OUT@|fence.r||ao|A chain-link fence generator. Every parameter (height, length, pole radius/spacing, wire radius, mesh twist angle, materials/colors) can be adjusted; it builds vertical RCC poles plus a woven zig-zag wire mesh between them.]=])
|
||||
set(GALLERY_DEMO_51 [=[gastank|src/shapes -- parametric shape generators|exec|gastank|-fgastank.g -n1 -H800 -w1200 -d500 -r120|@GLOB@|tnka||ao|A solid gas tank with all edges and corners rounded, composed of 3 arb8s, 8 spheres, and 12 cylinders, centered at the origin (dimensions in mm). Introduced in BRL-CAD release 4.4.]=])
|
||||
set(GALLERY_DEMO_52 [=[handle|src/shapes -- parametric shape generators|exec|handle|-fhandle.g -n1 -l200 -H120 -r130 -r215|@GLOB@|hana||ao|handle is a BRL-CAD libwdb sample program that constructs a handle (in millimeters) from three cylinders, two tori, and two arb8s, with its base centered at (0,0,0) and its height extending in the +Z direction. Introduced in BRL-CAD release 4.4.]=])
|
||||
set(GALLERY_DEMO_53 [=[human|src/shapes -- parametric shape generators|exec|human|-A -n Body|@GLOB@|Body||ao|Generator for human models based on height (and other anthropometric parameters). It procedurally builds an articulated humanoid body assembled from primitives (head, neck, torso, arms with shoulder/elbow/wrist joints, hands, thighs/calves with knee joints, and feet), defaulting to a standing 50th-percentile man.]=])
|
||||
set(GALLERY_DEMO_54 [=[picket_fence|src/shapes -- parametric shape generators|exec|picket_fence|@OUT@ fence_ 1000 30 0 0 0 3000 0 0 4500 2000 0|@OUT@|fence_sec0.c fence_sec1.c||ao|picket_fence builds a wooden picket fence: vertical pointed-top pickets (arb8 posts with wedge-cut tops) joined by two horizontal stringer rails, laid out along a sequence of x/y/z waypoints so the fence can follow a multi-segment path. Rendered as brown plastic pickets with two rails across two fence sections.]=])
|
||||
set(GALLERY_DEMO_55 [=[tire|src/shapes -- parametric shape generators|mgedcmd:tire|tire||@OUT@|tire-215-55R17||ao|tire is BRL-CAD's Tire Generator, a program to create basic tire shapes (with an optional wheel). The rendered model is a default ISO 215/55R17 passenger tire mounted on a wheel hub.]=])
|
||||
set(GALLERY_DEMO_56 [=[window|src/shapes -- parametric shape generators|exec|window|-fwindow.g -n1 -H1618 -w1000 -d100 -r80|@GLOB@|wina||ao|window constructs a window with all edges and corners rounded, composed of two arb8s and four cylinders, built using libwdb in millimeters. The front of the window is centered at the origin and extends in the negative X-direction by the window depth.]=])
|
||||
set(GALLERY_DEMO_57 [=[window_frame|src/shapes -- parametric shape generators|exec|window_frame|-fwindow_frame.g -n1 -H1618 -w1000 -d100 -r80 -i120|@GLOB@|wfra||ao|window_frame constructs a window frame with all edges and corners rounded, composed of 4 arb8s and 8 cylinders (in millimeters). The front of the frame is centered at the origin and extends in the negative x-direction by its depth.]=])
|
||||
set(GALLERY_DEMO_58 [=[wire|src/shapes -- parametric shape generators|stdin:wire.stdin|wire||@GLOB@|wires||ao|wire creates wiring or fuel lines from user-supplied endpoint coordinates and line radii. It builds a continuous tube as a chain of truncated cones (segments) joined by spheres at the vertices, grouped under a "wires" combination -- here a four-turn helix.]=])
|
||||
|
||||
# ---- Not rendered (documented in "Known limitations", no image) -------------
|
||||
set(GALLERY_NR_COUNT 3)
|
||||
set(GALLERY_NR_0 [=[nmgmodel|Intentionally non-manifold NMG exercising 3-, 2-, 1-, and 0-manifold features (a holed/voided block plus dangling faces, wires, and a lone vertex). It generates valid geometry, but the libnmg raytracer aborts on it (BU_ASSERT in isect.c), so it cannot be raytraced.]=])
|
||||
set(GALLERY_NR_1 [=[tea_nmg|Utah teapot as a t-NURBS NMG (closed bottom). The vertex-fuse fix lets it write geometry, but rt aborts importing the t-NURBS NMG (NMG_CK_DISKMAGIC) -- a librt limitation with t-NURBS NMG, not a usage issue.]=])
|
||||
set(GALLERY_NR_2 [=[gtimes|A ray-trace/database timing benchmark: it opens an existing .g repeatedly and prints timings for db_open, db_dirbuild, db_update_nref, tops, and db_close. It produces no geometry.]=])
|
||||
@@ -1,294 +0,0 @@
|
||||
# generate_gallery.cmake -- regenerate the procedural geometry gallery snapshot.
|
||||
#
|
||||
# Run via: cmake -DRT=... -DMGED=... -DBINDIR=... -DMANIFEST=... -DIMGDIR=...
|
||||
# -DADOC=... -DINPUTDIR=... -DWORKDIR=... -DSIZE=512
|
||||
# -DTITLE=... -P generate_gallery.cmake
|
||||
#
|
||||
# Drives every demo (manifest row) to produce a .g, ray traces it to a 512px
|
||||
# PNG with rt, and emits the AsciiDoc article. Cross-platform: uses only
|
||||
# cmake / execute_process / file / string -- no bash, cmd, python, or shell.
|
||||
# Tool argv is passed directly (no shell), so quoting bugs are impossible.
|
||||
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
# ---- required inputs --------------------------------------------------------
|
||||
foreach(v RT MGED MANIFEST IMGDIR ADOC INPUTDIR WORKDIR)
|
||||
if(NOT DEFINED ${v})
|
||||
message(FATAL_ERROR "generate_gallery: -D${v}=... is required")
|
||||
endif()
|
||||
endforeach()
|
||||
if(NOT DEFINED SIZE)
|
||||
set(SIZE 512)
|
||||
endif()
|
||||
if(NOT DEFINED TITLE)
|
||||
set(TITLE "BRL-CAD Procedural Geometry Gallery")
|
||||
endif()
|
||||
if(NOT DEFINED BINDIR)
|
||||
get_filename_component(BINDIR "${RT}" DIRECTORY)
|
||||
endif()
|
||||
|
||||
set(GEN_TIMEOUT 300) # seconds for a single geometry-generation step
|
||||
set(RENDER_TIMEOUT 1800) # seconds for a single rt render
|
||||
|
||||
include("${MANIFEST}")
|
||||
|
||||
file(MAKE_DIRECTORY "${WORKDIR}")
|
||||
file(MAKE_DIRECTORY "${IMGDIR}")
|
||||
|
||||
# ---- helpers ----------------------------------------------------------------
|
||||
|
||||
# Split a |-delimited record into D_name D_section D_driver D_exe D_args
|
||||
# D_gfile D_objects D_autoview D_render D_caption. Caption (last field) is the
|
||||
# verbatim remainder, so embedded semicolons/commas are preserved.
|
||||
function(parse_demo rec)
|
||||
set(remaining "${rec}")
|
||||
foreach(fn name section driver exe args gfile objects autoview render)
|
||||
string(FIND "${remaining}" "|" p)
|
||||
if(p LESS 0)
|
||||
set(D_${fn} "${remaining}" PARENT_SCOPE)
|
||||
set(remaining "")
|
||||
else()
|
||||
string(SUBSTRING "${remaining}" 0 ${p} v)
|
||||
set(D_${fn} "${v}" PARENT_SCOPE)
|
||||
math(EXPR np "${p} + 1")
|
||||
string(SUBSTRING "${remaining}" ${np} -1 remaining)
|
||||
endif()
|
||||
endforeach()
|
||||
set(D_caption "${remaining}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Locate a demo executable by basename in BINDIR (handles the .exe suffix).
|
||||
function(resolve_exe name outvar)
|
||||
foreach(cand "${name}" "${name}.exe")
|
||||
if(EXISTS "${BINDIR}/${cand}")
|
||||
set(${outvar} "${BINDIR}/${cand}" PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
endforeach()
|
||||
set(${outvar} "" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Substitute @OUT@ and @IN:<file>@ tokens in a single argv element. @OUT@ is
|
||||
# substituted as a RELATIVE filename (the demo runs with WORKING_DIRECTORY set
|
||||
# to its work dir), so legacy generators with small fixed-size filename buffers
|
||||
# do not truncate a long absolute path. @IN: paths stay absolute.
|
||||
function(subst_tokens tok outrel outvar)
|
||||
if(tok MATCHES "^@IN:(.+)@$")
|
||||
set(${outvar} "${INPUTDIR}/${CMAKE_MATCH_1}" PARENT_SCOPE)
|
||||
else()
|
||||
string(REPLACE "@OUT@" "${outrel}" tok "${tok}")
|
||||
set(${outvar} "${tok}" PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# ---- main loop --------------------------------------------------------------
|
||||
|
||||
set(SECTION_ORDER "") # ordered unique list of section names (no ';' in names)
|
||||
set(N_OK 0)
|
||||
set(N_FAIL 0)
|
||||
set(FAILED "")
|
||||
|
||||
math(EXPR LAST "${GALLERY_DEMO_COUNT} - 1")
|
||||
foreach(i RANGE 0 ${LAST})
|
||||
parse_demo("${GALLERY_DEMO_${i}}")
|
||||
|
||||
set(wd "${WORKDIR}/${D_name}")
|
||||
file(REMOVE_RECURSE "${wd}")
|
||||
file(MAKE_DIRECTORY "${wd}")
|
||||
set(out_rel "${D_name}.g") # relative name passed to demo args (@OUT@)
|
||||
set(outg "${wd}/${out_rel}") # absolute path for gfile resolution / mged
|
||||
|
||||
resolve_exe("${D_exe}" exepath)
|
||||
if(NOT exepath)
|
||||
message(WARNING "[${D_name}] executable '${D_exe}' not found in ${BINDIR} -- skipping")
|
||||
list(APPEND FAILED "${D_name} (no exe)")
|
||||
math(EXPR N_FAIL "${N_FAIL} + 1")
|
||||
continue()
|
||||
endif()
|
||||
|
||||
# Build the resolved argv list (quotes respected, tokens substituted).
|
||||
separate_arguments(rawargs UNIX_COMMAND "${D_args}")
|
||||
set(finalargs "")
|
||||
foreach(tok ${rawargs})
|
||||
subst_tokens("${tok}" "${out_rel}" rtok)
|
||||
list(APPEND finalargs "${rtok}")
|
||||
endforeach()
|
||||
|
||||
# ---- run the generator step by driver -------------------------------------
|
||||
set(rc 0)
|
||||
set(genout "")
|
||||
if(D_driver STREQUAL "exec")
|
||||
execute_process(
|
||||
COMMAND "${exepath}" ${finalargs}
|
||||
WORKING_DIRECTORY "${wd}" TIMEOUT ${GEN_TIMEOUT}
|
||||
RESULT_VARIABLE rc OUTPUT_VARIABLE genout ERROR_VARIABLE genout)
|
||||
elseif(D_driver MATCHES "^stdin:(.+)$")
|
||||
set(infile "${INPUTDIR}/${CMAKE_MATCH_1}")
|
||||
execute_process(
|
||||
COMMAND "${exepath}" ${finalargs}
|
||||
WORKING_DIRECTORY "${wd}" TIMEOUT ${GEN_TIMEOUT}
|
||||
INPUT_FILE "${infile}"
|
||||
RESULT_VARIABLE rc OUTPUT_VARIABLE genout ERROR_VARIABLE genout)
|
||||
elseif(D_driver STREQUAL "tomged")
|
||||
# capture exe stdout (mged command stream), then pipe into mged
|
||||
execute_process(
|
||||
COMMAND "${exepath}" ${finalargs}
|
||||
WORKING_DIRECTORY "${wd}" TIMEOUT ${GEN_TIMEOUT}
|
||||
OUTPUT_FILE "${wd}/cmds.mged" ERROR_VARIABLE genout RESULT_VARIABLE rc)
|
||||
if(rc EQUAL 0)
|
||||
execute_process(
|
||||
COMMAND "${MGED}" -c "${outg}"
|
||||
WORKING_DIRECTORY "${wd}" TIMEOUT ${GEN_TIMEOUT}
|
||||
INPUT_FILE "${wd}/cmds.mged" OUTPUT_VARIABLE genout ERROR_VARIABLE genout
|
||||
RESULT_VARIABLE rc)
|
||||
endif()
|
||||
elseif(D_driver MATCHES "^mgedcmd:(.+)$")
|
||||
set(gedcmd "${CMAKE_MATCH_1}")
|
||||
file(WRITE "${wd}/cmds.mged" "${gedcmd}\nq\n")
|
||||
execute_process(
|
||||
COMMAND "${MGED}" -c "${outg}"
|
||||
WORKING_DIRECTORY "${wd}" TIMEOUT ${GEN_TIMEOUT}
|
||||
INPUT_FILE "${wd}/cmds.mged" OUTPUT_VARIABLE genout ERROR_VARIABLE genout
|
||||
RESULT_VARIABLE rc)
|
||||
else()
|
||||
message(WARNING "[${D_name}] unknown driver '${D_driver}' -- skipping")
|
||||
list(APPEND FAILED "${D_name} (bad driver)")
|
||||
math(EXPR N_FAIL "${N_FAIL} + 1")
|
||||
continue()
|
||||
endif()
|
||||
|
||||
# ---- resolve the database to render ---------------------------------------
|
||||
if(D_gfile STREQUAL "@OUT@")
|
||||
set(gpath "${outg}")
|
||||
elseif(D_gfile STREQUAL "@GLOB@")
|
||||
file(GLOB gg "${wd}/*.g")
|
||||
list(LENGTH gg ng)
|
||||
if(ng EQUAL 0)
|
||||
set(gpath "")
|
||||
else()
|
||||
list(GET gg 0 gpath)
|
||||
if(ng GREATER 1)
|
||||
message(WARNING "[${D_name}] ${ng} .g files in workdir; using ${gpath}")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
set(gpath "${wd}/${D_gfile}")
|
||||
endif()
|
||||
|
||||
if(NOT gpath OR NOT EXISTS "${gpath}")
|
||||
message(WARNING "[${D_name}] generation failed (rc=${rc}, no .g). Output:\n${genout}")
|
||||
list(APPEND FAILED "${D_name} (no .g)")
|
||||
math(EXPR N_FAIL "${N_FAIL} + 1")
|
||||
continue()
|
||||
endif()
|
||||
|
||||
# ---- render with rt -------------------------------------------------------
|
||||
set(imgpath "${IMGDIR}/gallery_${D_name}.png")
|
||||
file(REMOVE "${imgpath}") # rt refuses to overwrite an existing -o target
|
||||
|
||||
set(rtcmd "${RT}" "-s${SIZE}")
|
||||
if(NOT D_render STREQUAL "noao")
|
||||
list(APPEND rtcmd -c "set ambSamples=64")
|
||||
endif()
|
||||
if(NOT D_autoview STREQUAL "")
|
||||
list(APPEND rtcmd -c "autoview ${D_autoview}")
|
||||
endif()
|
||||
list(APPEND rtcmd -A1 -o "${imgpath}" "${gpath}")
|
||||
separate_arguments(objlist UNIX_COMMAND "${D_objects}")
|
||||
foreach(o ${objlist})
|
||||
list(APPEND rtcmd "${o}")
|
||||
endforeach()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${rtcmd}
|
||||
WORKING_DIRECTORY "${wd}" TIMEOUT ${RENDER_TIMEOUT}
|
||||
RESULT_VARIABLE rc OUTPUT_VARIABLE rtout ERROR_VARIABLE rtout)
|
||||
|
||||
set(ok FALSE)
|
||||
if(EXISTS "${imgpath}")
|
||||
file(SIZE "${imgpath}" isz)
|
||||
if(isz GREATER 3000)
|
||||
set(ok TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ok)
|
||||
message(STATUS "[${D_name}] rendered ${imgpath} (${isz} bytes)")
|
||||
math(EXPR N_OK "${N_OK} + 1")
|
||||
else()
|
||||
message(WARNING "[${D_name}] rt render failed (rc=${rc}). Output:\n${rtout}")
|
||||
list(APPEND FAILED "${D_name} (render)")
|
||||
math(EXPR N_FAIL "${N_FAIL} + 1")
|
||||
endif()
|
||||
|
||||
# ---- stash result for adoc emission ---------------------------------------
|
||||
set(R_${i}_name "${D_name}")
|
||||
set(R_${i}_section "${D_section}")
|
||||
set(R_${i}_caption "${D_caption}")
|
||||
set(R_${i}_ok "${ok}")
|
||||
if(NOT D_section IN_LIST SECTION_ORDER)
|
||||
list(APPEND SECTION_ORDER "${D_section}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# ---- emit the AsciiDoc article ---------------------------------------------
|
||||
|
||||
set(AO_LINE "rt -s${SIZE} -c \"set ambSamples=64\" [-c \"autoview <objs>\"] -A1 -o <name>.png <db>.g <objects>")
|
||||
|
||||
set(adoc "= ${TITLE}\n")
|
||||
string(APPEND adoc ":doctype: article\n")
|
||||
string(APPEND adoc ":toc:\n")
|
||||
string(APPEND adoc ":toclevels: 2\n")
|
||||
string(APPEND adoc "\n")
|
||||
string(APPEND adoc "This gallery shows the procedural-geometry demonstration programs in BRL-CAD's\n")
|
||||
string(APPEND adoc "`src/proc-db` and `src/shapes` directories. Each model is built from source by its\n")
|
||||
string(APPEND adoc "generator program and then ray traced with `rt` -- no hand modeling. The renders are\n")
|
||||
string(APPEND adoc "auto-framed and auto-lit by the ray tracer using ambient occlusion:\n")
|
||||
string(APPEND adoc "\n----\n${AO_LINE}\n----\n")
|
||||
string(APPEND adoc "\n")
|
||||
string(APPEND adoc "Some renders use the `rt -c \"autoview <objs>\"` command to frame a sub-scene (for\n")
|
||||
string(APPEND adoc "example, to exclude a distant light source from the view).\n")
|
||||
string(APPEND adoc "\n")
|
||||
string(APPEND adoc "NOTE: This article and its images are a committed snapshot. Developers can regenerate\n")
|
||||
string(APPEND adoc "them from the built tools by configuring with `-DBRLCAD_GENERATE_GALLERY=ON` and\n")
|
||||
string(APPEND adoc "building the `procedural-gallery-snapshot` target.\n")
|
||||
|
||||
foreach(sec ${SECTION_ORDER})
|
||||
string(APPEND adoc "\n== ${sec}\n\n")
|
||||
string(APPEND adoc "[cols=\"1,3\"]\n[%noheader]\n|===\n")
|
||||
foreach(i RANGE 0 ${LAST})
|
||||
if(DEFINED R_${i}_ok AND R_${i}_ok AND R_${i}_section STREQUAL sec)
|
||||
set(nm "${R_${i}_name}")
|
||||
string(APPEND adoc "|image:images/gallery_${nm}.png[${nm},${SIZE}]\n")
|
||||
string(APPEND adoc "|*${nm}*: ${R_${i}_caption}\n")
|
||||
endif()
|
||||
endforeach()
|
||||
string(APPEND adoc "|===\n")
|
||||
endforeach()
|
||||
|
||||
# Known limitations
|
||||
if(DEFINED GALLERY_NR_COUNT AND GALLERY_NR_COUNT GREATER 0)
|
||||
string(APPEND adoc "\n== Known limitations\n\n")
|
||||
string(APPEND adoc "A few programs are part of the source tree but are not shown above, because the\n")
|
||||
string(APPEND adoc "geometry they produce cannot be ray traced in the current tree:\n\n")
|
||||
math(EXPR NRLAST "${GALLERY_NR_COUNT} - 1")
|
||||
foreach(j RANGE 0 ${NRLAST})
|
||||
set(rec "${GALLERY_NR_${j}}")
|
||||
string(FIND "${rec}" "|" p)
|
||||
string(SUBSTRING "${rec}" 0 ${p} nrname)
|
||||
math(EXPR np "${p} + 1")
|
||||
string(SUBSTRING "${rec}" ${np} -1 nrreason)
|
||||
string(APPEND adoc "* *${nrname}* -- ${nrreason}\n")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
file(WRITE "${ADOC}" "${adoc}")
|
||||
|
||||
# ---- summary ----------------------------------------------------------------
|
||||
message(STATUS "")
|
||||
message(STATUS "Gallery snapshot: ${N_OK} rendered, ${N_FAIL} failed/skipped.")
|
||||
if(FAILED)
|
||||
string(REPLACE ";" ", " failstr "${FAILED}")
|
||||
message(STATUS "Failed/skipped: ${failstr}")
|
||||
endif()
|
||||
message(STATUS "Article written: ${ADOC}")
|
||||
@@ -1,26 +0,0 @@
|
||||
HEADER CAFFEINE (1,3,7-TRIMETHYLXANTHINE) FORMULA C8H10N4O2
|
||||
HETATM 1 N1 CAF A 1 -1.250 1.250 0.000 1.00 0.00 N
|
||||
HETATM 2 C2 CAF A 1 0.000 1.500 0.000 1.00 0.00 C
|
||||
HETATM 3 O2 CAF A 1 1.200 1.300 0.000 1.00 0.00 O
|
||||
HETATM 4 N3 CAF A 1 1.500 0.000 0.000 1.00 0.00 N
|
||||
HETATM 5 C4 CAF A 1 1.000 -1.000 0.000 1.00 0.00 C
|
||||
HETATM 6 C5 CAF A 1 0.000 -1.500 0.000 1.00 0.00 C
|
||||
HETATM 7 C6 CAF A 1 -1.000 -1.000 0.000 1.00 0.00 C
|
||||
HETATM 8 O6 CAF A 1 -1.800 -2.000 0.000 1.00 0.00 O
|
||||
HETATM 9 N7 CAF A 1 -1.500 0.000 0.000 1.00 0.00 N
|
||||
HETATM 10 C8 CAF A 1 -2.300 1.000 0.000 1.00 0.00 C
|
||||
HETATM 11 H8 CAF A 1 -3.000 1.200 0.000 1.00 0.00 H
|
||||
HETATM 12 N9 CAF A 1 -2.900 2.100 0.000 1.00 0.00 N
|
||||
HETATM 13 CM1 CAF A 1 -1.800 2.200 0.000 1.00 0.00 C
|
||||
HETATM 14 HM1A CAF A 1 -1.000 2.500 0.000 1.00 0.00 H
|
||||
HETATM 15 HM1B CAF A 1 -2.400 2.900 0.000 1.00 0.00 H
|
||||
HETATM 16 HM1C CAF A 1 -2.200 1.300 0.000 1.00 0.00 H
|
||||
HETATM 17 CM3 CAF A 1 2.200 0.500 0.000 1.00 0.00 C
|
||||
HETATM 18 HM3A CAF A 1 2.700 1.200 0.000 1.00 0.00 H
|
||||
HETATM 19 HM3B CAF A 1 2.800 -0.200 0.000 1.00 0.00 H
|
||||
HETATM 20 HM3C CAF A 1 1.900 0.800 0.000 1.00 0.00 H
|
||||
HETATM 21 CM7 CAF A 1 -2.300 -0.500 0.000 1.00 0.00 C
|
||||
HETATM 22 HM7A CAF A 1 -3.200 -0.700 0.000 1.00 0.00 H
|
||||
HETATM 23 HM7B CAF A 1 -1.800 -1.300 0.000 1.00 0.00 H
|
||||
HETATM 24 HM7C CAF A 1 -2.800 0.100 0.000 1.00 0.00 H
|
||||
END
|
||||
@@ -1,32 +0,0 @@
|
||||
0 0 Carbon 40 40 40
|
||||
0 1 Center 230 60 60
|
||||
1 0 -4.0 -4.0 -4.0 1.2 0
|
||||
1 1 4.0 -4.0 -4.0 1.2 0
|
||||
1 2 4.0 4.0 -4.0 1.2 0
|
||||
1 3 -4.0 4.0 -4.0 1.2 0
|
||||
1 4 -4.0 -4.0 4.0 1.2 0
|
||||
1 5 4.0 -4.0 4.0 1.2 0
|
||||
1 6 4.0 4.0 4.0 1.2 0
|
||||
1 7 -4.0 4.0 4.0 1.2 0
|
||||
1 8 0.0 0.0 0.0 1.8 1
|
||||
2 0 1
|
||||
2 1 2
|
||||
2 2 3
|
||||
2 3 0
|
||||
2 4 5
|
||||
2 5 6
|
||||
2 6 7
|
||||
2 7 4
|
||||
2 0 4
|
||||
2 1 5
|
||||
2 2 6
|
||||
2 3 7
|
||||
2 8 0
|
||||
2 8 1
|
||||
2 8 2
|
||||
2 8 3
|
||||
2 8 4
|
||||
2 8 5
|
||||
2 8 6
|
||||
2 8 7
|
||||
3
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 12 KiB |
@@ -1,8 +0,0 @@
|
||||
mm
|
||||
50 5
|
||||
0 0 0
|
||||
300 0 0
|
||||
300 300 0
|
||||
300 300 300
|
||||
0 300 300
|
||||
0 300 600
|
||||
@@ -1,204 +0,0 @@
|
||||
wire.g
|
||||
101
|
||||
300.0000 0.0000 0.0000
|
||||
25.0000
|
||||
290.5749 74.6070 15.0000
|
||||
25.0000
|
||||
262.8920 144.5261 30.0000
|
||||
25.0000
|
||||
218.6906 205.3641 45.0000
|
||||
25.0000
|
||||
160.7480 253.2984 60.0000
|
||||
25.0000
|
||||
92.7051 285.3170 75.0000
|
||||
25.0000
|
||||
18.8372 299.4080 90.0000
|
||||
25.0000
|
||||
-56.2144 294.6862 105.0000
|
||||
25.0000
|
||||
-127.7338 271.4481 120.0000
|
||||
25.0000
|
||||
-191.2272 231.1540 135.0000
|
||||
25.0000
|
||||
-242.7051 176.3356 150.0000
|
||||
25.0000
|
||||
-278.9329 110.4374 165.0000
|
||||
25.0000
|
||||
-297.6344 37.6000 180.0000
|
||||
25.0000
|
||||
-297.6344 -37.6000 195.0000
|
||||
25.0000
|
||||
-278.9329 -110.4374 210.0000
|
||||
25.0000
|
||||
-242.7051 -176.3356 225.0000
|
||||
25.0000
|
||||
-191.2272 -231.1540 240.0000
|
||||
25.0000
|
||||
-127.7338 -271.4481 255.0000
|
||||
25.0000
|
||||
-56.2144 -294.6862 270.0000
|
||||
25.0000
|
||||
18.8372 -299.4080 285.0000
|
||||
25.0000
|
||||
92.7051 -285.3170 300.0000
|
||||
25.0000
|
||||
160.7480 -253.2984 315.0000
|
||||
25.0000
|
||||
218.6906 -205.3641 330.0000
|
||||
25.0000
|
||||
262.8920 -144.5261 345.0000
|
||||
25.0000
|
||||
290.5749 -74.6070 360.0000
|
||||
25.0000
|
||||
300.0000 -0.0000 375.0000
|
||||
25.0000
|
||||
290.5749 74.6070 390.0000
|
||||
25.0000
|
||||
262.8920 144.5261 405.0000
|
||||
25.0000
|
||||
218.6906 205.3641 420.0000
|
||||
25.0000
|
||||
160.7480 253.2984 435.0000
|
||||
25.0000
|
||||
92.7051 285.3170 450.0000
|
||||
25.0000
|
||||
18.8372 299.4080 465.0000
|
||||
25.0000
|
||||
-56.2144 294.6862 480.0000
|
||||
25.0000
|
||||
-127.7338 271.4481 495.0000
|
||||
25.0000
|
||||
-191.2272 231.1540 510.0000
|
||||
25.0000
|
||||
-242.7051 176.3356 525.0000
|
||||
25.0000
|
||||
-278.9329 110.4374 540.0000
|
||||
25.0000
|
||||
-297.6344 37.6000 555.0000
|
||||
25.0000
|
||||
-297.6344 -37.6000 570.0000
|
||||
25.0000
|
||||
-278.9329 -110.4374 585.0000
|
||||
25.0000
|
||||
-242.7051 -176.3356 600.0000
|
||||
25.0000
|
||||
-191.2272 -231.1540 615.0000
|
||||
25.0000
|
||||
-127.7338 -271.4481 630.0000
|
||||
25.0000
|
||||
-56.2144 -294.6862 645.0000
|
||||
25.0000
|
||||
18.8372 -299.4080 660.0000
|
||||
25.0000
|
||||
92.7051 -285.3170 675.0000
|
||||
25.0000
|
||||
160.7480 -253.2984 690.0000
|
||||
25.0000
|
||||
218.6906 -205.3641 705.0000
|
||||
25.0000
|
||||
262.8920 -144.5261 720.0000
|
||||
25.0000
|
||||
290.5749 -74.6070 735.0000
|
||||
25.0000
|
||||
300.0000 -0.0000 750.0000
|
||||
25.0000
|
||||
290.5749 74.6070 765.0000
|
||||
25.0000
|
||||
262.8920 144.5261 780.0000
|
||||
25.0000
|
||||
218.6906 205.3641 795.0000
|
||||
25.0000
|
||||
160.7480 253.2984 810.0000
|
||||
25.0000
|
||||
92.7051 285.3170 825.0000
|
||||
25.0000
|
||||
18.8372 299.4080 840.0000
|
||||
25.0000
|
||||
-56.2144 294.6862 855.0000
|
||||
25.0000
|
||||
-127.7338 271.4481 870.0000
|
||||
25.0000
|
||||
-191.2272 231.1540 885.0000
|
||||
25.0000
|
||||
-242.7051 176.3356 900.0000
|
||||
25.0000
|
||||
-278.9329 110.4374 915.0000
|
||||
25.0000
|
||||
-297.6344 37.6000 930.0000
|
||||
25.0000
|
||||
-297.6344 -37.6000 945.0000
|
||||
25.0000
|
||||
-278.9329 -110.4374 960.0000
|
||||
25.0000
|
||||
-242.7051 -176.3356 975.0000
|
||||
25.0000
|
||||
-191.2272 -231.1540 990.0000
|
||||
25.0000
|
||||
-127.7338 -271.4481 1005.0000
|
||||
25.0000
|
||||
-56.2144 -294.6862 1020.0000
|
||||
25.0000
|
||||
18.8372 -299.4080 1035.0000
|
||||
25.0000
|
||||
92.7051 -285.3170 1050.0000
|
||||
25.0000
|
||||
160.7480 -253.2984 1065.0000
|
||||
25.0000
|
||||
218.6906 -205.3641 1080.0000
|
||||
25.0000
|
||||
262.8920 -144.5261 1095.0000
|
||||
25.0000
|
||||
290.5749 -74.6070 1110.0000
|
||||
25.0000
|
||||
300.0000 -0.0000 1125.0000
|
||||
25.0000
|
||||
290.5749 74.6070 1140.0000
|
||||
25.0000
|
||||
262.8920 144.5261 1155.0000
|
||||
25.0000
|
||||
218.6906 205.3641 1170.0000
|
||||
25.0000
|
||||
160.7480 253.2984 1185.0000
|
||||
25.0000
|
||||
92.7051 285.3170 1200.0000
|
||||
25.0000
|
||||
18.8372 299.4080 1215.0000
|
||||
25.0000
|
||||
-56.2144 294.6862 1230.0000
|
||||
25.0000
|
||||
-127.7338 271.4481 1245.0000
|
||||
25.0000
|
||||
-191.2272 231.1540 1260.0000
|
||||
25.0000
|
||||
-242.7051 176.3356 1275.0000
|
||||
25.0000
|
||||
-278.9329 110.4374 1290.0000
|
||||
25.0000
|
||||
-297.6344 37.6000 1305.0000
|
||||
25.0000
|
||||
-297.6344 -37.6000 1320.0000
|
||||
25.0000
|
||||
-278.9329 -110.4374 1335.0000
|
||||
25.0000
|
||||
-242.7051 -176.3356 1350.0000
|
||||
25.0000
|
||||
-191.2272 -231.1540 1365.0000
|
||||
25.0000
|
||||
-127.7338 -271.4481 1380.0000
|
||||
25.0000
|
||||
-56.2144 -294.6862 1395.0000
|
||||
25.0000
|
||||
18.8372 -299.4080 1410.0000
|
||||
25.0000
|
||||
92.7051 -285.3170 1425.0000
|
||||
25.0000
|
||||
160.7480 -253.2984 1440.0000
|
||||
25.0000
|
||||
218.6906 -205.3641 1455.0000
|
||||
25.0000
|
||||
262.8920 -144.5261 1470.0000
|
||||
25.0000
|
||||
290.5749 -74.6070 1485.0000
|
||||
25.0000
|
||||
300.0000 -0.0000 1500.0000
|
||||
25.0000
|
||||
@@ -1,880 +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]
|
||||
====
|
||||
|
||||
[source,c]
|
||||
----
|
||||
#include "common.h"
|
||||
|
||||
#include "bu/log.h"
|
||||
#include "bu/mime.h"
|
||||
#include "gcv.h"
|
||||
|
||||
/* Convert the file at 'in_path' to the file at 'out_path', selecting the
|
||||
* first registered reader and writer filter that match the file types
|
||||
* inferred from the two path extensions. Returns 0 on success. */
|
||||
int
|
||||
convert(const char *in_path, const char *out_path)
|
||||
{
|
||||
struct gcv_context context;
|
||||
const struct gcv_filter *in_filter, *out_filter;
|
||||
bu_mime_model_t in_type, out_type;
|
||||
|
||||
/* Infer the model file types from the filename extensions. */
|
||||
in_type = (bu_mime_model_t)bu_file_mime(in_path, BU_MIME_MODEL);
|
||||
out_type = (bu_mime_model_t)bu_file_mime(out_path, BU_MIME_MODEL);
|
||||
|
||||
/* A context holds the conversion state, including an in-memory
|
||||
* database used for the intermediate representation. */
|
||||
gcv_context_init(&context);
|
||||
|
||||
/* Look up a reader for the input type and a writer for the output
|
||||
* type. find_filter() returns the first matching registered filter,
|
||||
* or NULL if none is available. */
|
||||
in_filter = find_filter(GCV_FILTER_READ, in_type, in_path, &context);
|
||||
out_filter = find_filter(GCV_FILTER_WRITE, out_type, NULL, &context);
|
||||
|
||||
if (!in_filter || !out_filter) {
|
||||
bu_log("No filter available for the requested conversion\n");
|
||||
gcv_context_destroy(&context);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Read the input into the context's in-memory database. Passing NULL
|
||||
* for the options selects the defaults from gcv_opts_default(). The
|
||||
* argc/argv pair would carry any filter-specific option strings.
|
||||
* gcv_execute() returns 1 on success and 0 on failure. */
|
||||
if (!gcv_execute(&context, in_filter, NULL, 0, NULL, in_path)) {
|
||||
bu_log("Read filter '%s' failed for '%s'\n", in_filter->name, in_path);
|
||||
gcv_context_destroy(&context);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Write the in-memory database out through the selected writer. */
|
||||
if (!gcv_execute(&context, out_filter, NULL, 0, NULL, out_path)) {
|
||||
bu_log("Write filter '%s' failed for '%s'\n", out_filter->name, out_path);
|
||||
gcv_context_destroy(&context);
|
||||
return 1;
|
||||
}
|
||||
|
||||
gcv_context_destroy(&context);
|
||||
return 0;
|
||||
}
|
||||
----
|
||||
|
||||
====
|
||||
|
||||
|
||||
== 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]
|
||||
====
|
||||
|
||||
[source,c]
|
||||
----
|
||||
#include "common.h"
|
||||
|
||||
#include "bu/log.h"
|
||||
#include "bu/mime.h"
|
||||
#include "gcv/api.h"
|
||||
#include "wdb.h"
|
||||
|
||||
/* The reader callback. For a GCV_FILTER_READ filter, 'target' is the
|
||||
* path of the input file, and geometry should be written into the
|
||||
* in-memory database reachable through context->dbip. Return 1 on
|
||||
* success and 0 on failure. */
|
||||
static int
|
||||
foo_read(struct gcv_context *context, const struct gcv_opts *gcv_options,
|
||||
const void *UNUSED(options_data), const char *target)
|
||||
{
|
||||
struct rt_wdb *wdbp;
|
||||
|
||||
if (gcv_options->verbosity_level)
|
||||
bu_log("Reading foo file: %s\n", target);
|
||||
|
||||
/* Open the context's in-memory database for writing. */
|
||||
wdbp = wdb_dbopen(context->dbip, RT_WDB_TYPE_DB_INMEM);
|
||||
mk_id_units(wdbp, "Converted from foo format", "mm");
|
||||
|
||||
/* ... parse 'target' and create objects with the wdb (mk_*) API,
|
||||
* e.g. mk_sph(), mk_bot(), mk_lcomb() ... */
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Describe the filter: a unique name, its type, the model type it
|
||||
* handles, and the callbacks. This reader defines no filter-specific
|
||||
* options, so the create/free option hooks and data_supported are NULL. */
|
||||
static const struct gcv_filter gcv_conv_foo_read = {
|
||||
"FOO Reader", GCV_FILTER_READ, BU_MIME_MODEL_FOO, NULL,
|
||||
NULL, NULL, foo_read
|
||||
};
|
||||
|
||||
/* A plugin exports a NULL-terminated array of its filters ... */
|
||||
static const struct gcv_filter * const filters[] = {&gcv_conv_foo_read, NULL};
|
||||
|
||||
/* ... referenced by a struct gcv_plugin ... */
|
||||
static const struct gcv_plugin gcv_plugin_info_s = { filters };
|
||||
|
||||
/* ... which libgcv discovers by dlsym()-ing this exported entry point. */
|
||||
COMPILER_DLLEXPORT const struct gcv_plugin *
|
||||
gcv_plugin_info(void) { return &gcv_plugin_info_s; }
|
||||
----
|
||||
|
||||
====
|
||||
|
||||
|
||||
|
||||
=== 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]
|
||||
====
|
||||
|
||||
[source,c]
|
||||
----
|
||||
#include "common.h"
|
||||
|
||||
#include "bu/log.h"
|
||||
#include "bu/mime.h"
|
||||
#include "nmg.h"
|
||||
#include "rt/geom.h"
|
||||
#include "raytrace.h"
|
||||
#include "gcv/api.h"
|
||||
#include "gcv/util.h"
|
||||
|
||||
/* State shared with the region-end callback. */
|
||||
struct tess_stats {
|
||||
size_t face_count;
|
||||
};
|
||||
|
||||
/* Invoked once per region by gcv_region_end() after the region's leaf
|
||||
* meshes have been Boolean-evaluated into a single NMG region 'r'. Here
|
||||
* we simply tally the outward-facing (OT_SAME) faces. This routine must
|
||||
* be prepared to run in parallel. */
|
||||
static void
|
||||
count_region_faces(struct nmgregion *r, const struct db_full_path *UNUSED(pathp),
|
||||
struct db_tree_state *UNUSED(tsp), void *client_data)
|
||||
{
|
||||
struct tess_stats *stats = (struct tess_stats *)client_data;
|
||||
struct shell *s;
|
||||
|
||||
NMG_CK_REGION(r);
|
||||
|
||||
for (BU_LIST_FOR(s, shell, &r->s_hd)) {
|
||||
struct faceuse *fu;
|
||||
for (BU_LIST_FOR(fu, faceuse, &s->fu_hd)) {
|
||||
if (fu->orientation != OT_SAME)
|
||||
continue;
|
||||
bu_semaphore_acquire(BU_SEM_GENERAL);
|
||||
stats->face_count++;
|
||||
bu_semaphore_release(BU_SEM_GENERAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* A GCV_FILTER_FILTER receives a NULL target and operates on the geometry
|
||||
* already present in context->dbip. Return 1 on success, 0 on failure. */
|
||||
static int
|
||||
tessellation_statistics(struct gcv_context *context, const struct gcv_opts *gcv_options,
|
||||
const void *UNUSED(options_data), const char *UNUSED(target))
|
||||
{
|
||||
struct tess_stats stats = {0};
|
||||
struct gcv_region_end_data end_data;
|
||||
struct db_tree_state tree_state;
|
||||
struct model *the_model = nmg_mm();
|
||||
|
||||
/* Configure the tree-walk state: tolerances come from the conversion
|
||||
* options, and ts_m provides the NMG model used during tessellation. */
|
||||
RT_DBTS_INIT(&tree_state);
|
||||
tree_state.ts_tol = &gcv_options->calculational_tolerance;
|
||||
tree_state.ts_ttol = &gcv_options->tessellation_tolerance;
|
||||
tree_state.ts_m = &the_model;
|
||||
|
||||
/* gcv_region_end() expects its client_data to point at this struct. */
|
||||
end_data.write_region = count_region_faces;
|
||||
end_data.vlfree = &rt_vlfree;
|
||||
end_data.client_data = &stats;
|
||||
|
||||
/* Walk every top-level object. Leaves are tessellated to BoTs by
|
||||
* rt_booltree_leaf_tess(); gcv_region_end() then Boolean-evaluates
|
||||
* each region and invokes our callback with the result. */
|
||||
(void)db_walk_tree(context->dbip, (int)gcv_options->num_objects,
|
||||
(const char **)gcv_options->object_names, 1, &tree_state,
|
||||
NULL, gcv_region_end, rt_booltree_leaf_tess, &end_data);
|
||||
|
||||
bu_log("Total faces after tessellation: %zu\n", stats.face_count);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const struct gcv_filter gcv_conv_tess_stats = {
|
||||
"Tessellation Statistics", GCV_FILTER_FILTER, BU_MIME_MODEL_AUTO, NULL,
|
||||
NULL, NULL, tessellation_statistics
|
||||
};
|
||||
----
|
||||
|
||||
====
|
||||
|
||||
|
||||
=== 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]
|
||||
====
|
||||
|
||||
[source,c]
|
||||
----
|
||||
#include "common.h"
|
||||
|
||||
#include "bu/log.h"
|
||||
#include "bu/mime.h"
|
||||
#include "gcv.h"
|
||||
|
||||
/* Defined in tessellation_statistics.c, above. */
|
||||
extern const struct gcv_filter gcv_conv_tess_stats;
|
||||
|
||||
/* Load the geometry file at 'in_path' into a fresh context, then run the
|
||||
* tessellation-statistics filter over it. A GCV_FILTER_FILTER operates
|
||||
* on the geometry already in the context, so its target is NULL.
|
||||
* Returns 0 on success. */
|
||||
int
|
||||
report_tessellation_stats(const char *in_path)
|
||||
{
|
||||
struct gcv_context context;
|
||||
const struct gcv_filter *in_filter;
|
||||
bu_mime_model_t in_type;
|
||||
|
||||
gcv_context_init(&context);
|
||||
|
||||
/* Import the input model into the context's in-memory database. */
|
||||
in_type = (bu_mime_model_t)bu_file_mime(in_path, BU_MIME_MODEL);
|
||||
in_filter = find_filter(GCV_FILTER_READ, in_type, in_path, &context);
|
||||
if (!in_filter || !gcv_execute(&context, in_filter, NULL, 0, NULL, in_path)) {
|
||||
bu_log("Failed to read '%s'\n", in_path);
|
||||
gcv_context_destroy(&context);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Run the filter; it tallies the faces and reports via bu_log(). */
|
||||
if (!gcv_execute(&context, &gcv_conv_tess_stats, NULL, 0, NULL, NULL)) {
|
||||
bu_log("Tessellation-statistics filter failed\n");
|
||||
gcv_context_destroy(&context);
|
||||
return 1;
|
||||
}
|
||||
|
||||
gcv_context_destroy(&context);
|
||||
return 0;
|
||||
}
|
||||
----
|
||||
|
||||
====
|
||||
|
||||
|
||||
== 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 `0`).
|
||||
|===
|
||||
|
||||
|
||||
=== 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
|
||||
|
||||
The native VRML reader accepts both VRML 1.0 and VRML97/2.0 files. VRML 1.0
|
||||
imports preserve ordered property state, separator scoping, `DEF`/`USE`
|
||||
instances, transformations, material colors, analytic cube, cone, cylinder,
|
||||
and sphere geometry, and indexed polygon meshes. Concave polygons are
|
||||
triangulated, and per-face material bindings are emitted as separate colored
|
||||
regions.
|
||||
|
||||
VRML constructs that do not have a BRL-CAD equivalent or are not
|
||||
implemented yet, including cameras, lights, textures, text, line sets,
|
||||
and point sets, are accepted but do not produce objects. External
|
||||
content referenced by `WWWInline` is not fetched during conversion.
|
||||
|
||||
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 `0`).
|
||||
|`--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
|
||||
....
|
||||
|
||||
====
|
||||
@@ -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.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user