Add edge and segment selection in point-and-click Helix flow
Fixes #5393
4
.github/actions/github-release/package.json
vendored
@ -4,7 +4,7 @@
|
||||
"main": "main.js",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.6",
|
||||
"@actions/github": "^5.0",
|
||||
"glob": "^7.1.5"
|
||||
"@actions/github": "^6.0",
|
||||
"glob": "^11.0.1"
|
||||
}
|
||||
}
|
||||
|
38
.github/ci-cd-scripts/playwright-electron.sh
vendored
@ -4,27 +4,27 @@
|
||||
set -euo pipefail
|
||||
|
||||
if [[ ! -f "test-results/.last-run.json" ]]; then
|
||||
# if no last run artifact, than run plawright normally
|
||||
# If no last run artifact, than run Playwright normally
|
||||
echo "run playwright normally"
|
||||
if [[ "$3" == *ubuntu* ]]; then
|
||||
xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test:playwright:electron:ubuntu -- --shard=$1/$2 || true
|
||||
elif [[ "$3" == *windows* ]]; then
|
||||
yarn test:playwright:electron:windows -- --shard=$1/$2 || true
|
||||
elif [[ "$3" == *macos* ]]; then
|
||||
yarn test:playwright:electron:macos -- --shard=$1/$2 || true
|
||||
else
|
||||
echo "Do not run playwright. Unable to detect os runtime."
|
||||
exit 1
|
||||
fi
|
||||
# # send to axiom
|
||||
node playwrightProcess.mjs | tee /tmp/github-actions.log > /dev/null 2>&1
|
||||
if [[ "$3" == *ubuntu* ]]; then
|
||||
xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test:playwright:electron:ubuntu -- --shard=$1/$2 || true
|
||||
elif [[ "$3" == *windows* ]]; then
|
||||
yarn test:playwright:electron:windows -- --shard=$1/$2 || true
|
||||
elif [[ "$3" == *macos* ]]; then
|
||||
yarn test:playwright:electron:macos -- --shard=$1/$2 || true
|
||||
else
|
||||
echo "Do not run Playwright. Unable to detect os runtime."
|
||||
exit 1
|
||||
fi
|
||||
# Log failures for Axiom to pick up
|
||||
node playwrightProcess.mjs > /tmp/github-actions.log
|
||||
fi
|
||||
|
||||
retry=1
|
||||
max_retrys=1
|
||||
max_retries=1
|
||||
|
||||
# retry failed tests, doing our own retries because using inbuilt playwright retries causes connection issues
|
||||
while [[ $retry -le $max_retrys ]]; do
|
||||
# Retry failed tests, doing our own retries because using inbuilt Playwright retries causes connection issues
|
||||
while [[ $retry -le $max_retries ]]; do
|
||||
if [[ -f "test-results/.last-run.json" ]]; then
|
||||
failed_tests=$(jq '.failedTests | length' test-results/.last-run.json)
|
||||
if [[ $failed_tests -gt 0 ]]; then
|
||||
@ -40,8 +40,8 @@ while [[ $retry -le $max_retrys ]]; do
|
||||
echo "Do not run playwright. Unable to detect os runtime."
|
||||
exit 1
|
||||
fi
|
||||
# send to axiom
|
||||
node playwrightProcess.mjs | tee /tmp/github-actions.log > /dev/null 2>&1
|
||||
# Log failures for Axiom to pick up
|
||||
node playwrightProcess.mjs > /tmp/github-actions.log
|
||||
retry=$((retry + 1))
|
||||
else
|
||||
echo "retried=false" >>$GITHUB_OUTPUT
|
||||
@ -58,7 +58,7 @@ echo "retried=false" >>$GITHUB_OUTPUT
|
||||
if [[ -f "test-results/.last-run.json" ]]; then
|
||||
failed_tests=$(jq '.failedTests | length' test-results/.last-run.json)
|
||||
if [[ $failed_tests -gt 0 ]]; then
|
||||
# if it still fails after 3 retrys, then fail the job
|
||||
# If it still fails after 3 retries, then fail the job
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
33
.github/dependabot.yml
vendored
@ -230,39 +230,6 @@ updates:
|
||||
update-types:
|
||||
- minor
|
||||
- patch
|
||||
- package-ecosystem: pip
|
||||
directory: /public/kcl-samples
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: monday
|
||||
time: '03:00'
|
||||
timezone: America/Los_Angeles
|
||||
open-pull-requests-limit: 5
|
||||
reviewers:
|
||||
- adamchalmers
|
||||
- franknoirot
|
||||
- irev-dev
|
||||
- jessfraz
|
||||
groups:
|
||||
security:
|
||||
applies-to: security-updates
|
||||
update-types:
|
||||
- major
|
||||
- minor
|
||||
- patch
|
||||
patch:
|
||||
applies-to: version-updates
|
||||
update-types:
|
||||
- patch
|
||||
major:
|
||||
applies-to: version-updates
|
||||
update-types:
|
||||
- major
|
||||
minor:
|
||||
applies-to: version-updates
|
||||
update-types:
|
||||
- minor
|
||||
- patch
|
||||
- package-ecosystem: pip
|
||||
directory: /rust/kcl-python-bindings
|
||||
schedule:
|
||||
|
2
.github/workflows/build-and-store-wasm.yml
vendored
@ -24,7 +24,7 @@ jobs:
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
cache: false # Configured below.
|
||||
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- name: Rust Cache
|
||||
|
2
.github/workflows/build-apps.yml
vendored
@ -77,7 +77,7 @@ jobs:
|
||||
with:
|
||||
cache: false # Configured below.
|
||||
|
||||
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
if: ${{ steps.wasm.outputs.should-build-wasm == 'true' }}
|
||||
with:
|
||||
tool: wasm-pack
|
||||
|
9
.github/workflows/cargo-test.yml
vendored
@ -100,9 +100,14 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cd rust
|
||||
pushd rust
|
||||
just overwrite-sim-test kcl_samples
|
||||
git add kcl-lib/tests
|
||||
popd
|
||||
git add \
|
||||
rust/kcl-lib/tests \
|
||||
public/kcl-samples/manifest.json \
|
||||
public/kcl-samples/README.md \
|
||||
public/kcl-samples/screenshots
|
||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --local user.name "github-actions[bot]"
|
||||
git remote set-url origin https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git
|
||||
|
22
.github/workflows/e2e-tests.yml
vendored
@ -137,7 +137,7 @@ jobs:
|
||||
with:
|
||||
cache: false # Configured below.
|
||||
|
||||
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
if: ${{ needs.conditions.outputs.should-run == 'true' && steps.wasm.outputs.should-build-wasm == 'true' }}
|
||||
with:
|
||||
tool: wasm-pack
|
||||
@ -340,14 +340,22 @@ jobs:
|
||||
if: needs.conditions.outputs.should-run == 'true'
|
||||
run: yarn tronb:vite:dev
|
||||
|
||||
- name: Install good sed
|
||||
if: startsWith(matrix.os, 'macos')
|
||||
- name: Install vector
|
||||
if: contains(matrix.os, 'ubuntu')
|
||||
shell: bash
|
||||
run: |
|
||||
brew install gnu-sed
|
||||
echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH
|
||||
|
||||
# TODO: Add back axiom logs
|
||||
curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev > /tmp/vector.sh
|
||||
chmod +x /tmp/vector.sh
|
||||
/tmp/vector.sh -y -no-modify-path
|
||||
mkdir -p /tmp/vector
|
||||
cp .github/workflows/vector.toml /tmp/vector.toml
|
||||
sed -i "s#GITHUB_WORKFLOW#${GITHUB_WORKFLOW}#g" /tmp/vector.toml
|
||||
sed -i "s#GITHUB_REPOSITORY#${GITHUB_REPOSITORY}#g" /tmp/vector.toml
|
||||
sed -i "s#GITHUB_SHA#${GITHUB_SHA}#g" /tmp/vector.toml
|
||||
sed -i "s#GITHUB_REF_NAME#${GITHUB_REF_NAME}#g" /tmp/vector.toml
|
||||
sed -i "s#GH_ACTIONS_AXIOM_TOKEN#${{secrets.GH_ACTIONS_AXIOM_TOKEN}}#g" /tmp/vector.toml
|
||||
cat /tmp/vector.toml
|
||||
${HOME}/.vector/bin/vector --config /tmp/vector.toml &
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
if: ${{ needs.conditions.outputs.should-run == 'true' && !cancelled() && (success() || failure()) }}
|
||||
|
2
.github/workflows/kcl-language-server.yml
vendored
@ -376,7 +376,7 @@ jobs:
|
||||
with:
|
||||
credentials_json: "${{ secrets.GOOGLE_CLOUD_DL_SA }}"
|
||||
- name: Set up Cloud SDK
|
||||
uses: google-github-actions/setup-gcloud@v2.1.2
|
||||
uses: google-github-actions/setup-gcloud@v2.1.4
|
||||
with:
|
||||
project_id: kittycadapi
|
||||
- name: "upload files to gcp"
|
||||
|
8
.github/workflows/static-analysis.yml
vendored
@ -37,7 +37,7 @@ jobs:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'yarn'
|
||||
- run: yarn install
|
||||
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- run: yarn build:wasm
|
||||
@ -57,7 +57,7 @@ jobs:
|
||||
with:
|
||||
workspaces: './rust'
|
||||
|
||||
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- run: yarn build:wasm
|
||||
@ -100,7 +100,7 @@ jobs:
|
||||
cache: 'yarn'
|
||||
|
||||
- run: yarn install
|
||||
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- run: yarn build:wasm
|
||||
@ -129,7 +129,7 @@ jobs:
|
||||
cache: 'yarn'
|
||||
|
||||
- run: yarn install
|
||||
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- run: yarn build:wasm
|
||||
|
1
.gitignore
vendored
@ -50,6 +50,7 @@ e2e/playwright/**/*.png
|
||||
e2e/playwright/export-snapshots/*
|
||||
!e2e/playwright/export-snapshots/*.png
|
||||
!e2e/playwright/snapshot-tests.spec.ts-snapshots/*.png
|
||||
trace.zip
|
||||
|
||||
/public/kcl-samples.zip
|
||||
/public/kcl-samples/.github
|
||||
|
117
Makefile
@ -1,12 +1,110 @@
|
||||
.PHONY: dev
|
||||
.PHONY: all
|
||||
all: install build check
|
||||
|
||||
KCL_WASM_LIB_FILES := $(wildcard rust/**/*.rs)
|
||||
TS_SRC := $(wildcard src/**/*.tsx) $(wildcard src/**/*.ts)
|
||||
XSTATE_TYPEGENS := $(wildcard src/machines/*.typegen.ts)
|
||||
###############################################################################
|
||||
# INSTALL
|
||||
|
||||
dev: node_modules public/kcl_wasm_lib_bg.wasm $(XSTATE_TYPEGENS)
|
||||
WASM_PACK ?= ~/.cargo/bin/wasm-pack
|
||||
|
||||
.PHONY: install
|
||||
install: node_modules/.yarn-integrity $(WASM_PACK) ## Install dependencies
|
||||
|
||||
node_modules/.yarn-integrity: package.json yarn.lock
|
||||
yarn install
|
||||
@ touch $@
|
||||
|
||||
$(WASM_PACK):
|
||||
yarn install:rust
|
||||
yarn install:wasm-pack:sh
|
||||
|
||||
###############################################################################
|
||||
# BUILD
|
||||
|
||||
RUST_SOURCES := $(wildcard rust/*) $(wildcard rust/**/*)
|
||||
TYPESCRIPT_SOURCES := $(wildcard src/**/*.tsx) $(wildcard src/**/*.ts)
|
||||
|
||||
.PHONY: build
|
||||
build: build-web build-desktop
|
||||
|
||||
.PHONY: build-web
|
||||
build-web: public/kcl_wasm_lib_bg.wasm build/index.html
|
||||
|
||||
.PHONY: build-desktop
|
||||
build-desktop: public/kcl_wasm_lib_bg.wasm .vite/build/main.js
|
||||
|
||||
public/kcl_wasm_lib_bg.wasm: $(RUST_SOURCES)
|
||||
yarn build:wasm
|
||||
|
||||
build/index.html: $(TYPESCRIPT_SOURCES)
|
||||
yarn build:local
|
||||
|
||||
.vite/build/main.js: $(TYPESCRIPT_SOURCES)
|
||||
yarn tronb:vite:dev
|
||||
|
||||
###############################################################################
|
||||
# CHECK
|
||||
|
||||
.PHONY: check
|
||||
check: format lint
|
||||
|
||||
.PHONY: format
|
||||
format: install ## Format the code
|
||||
yarn fmt
|
||||
|
||||
.PHONY: lint
|
||||
lint: install ## Lint the code
|
||||
yarn lint
|
||||
|
||||
###############################################################################
|
||||
# RUN
|
||||
|
||||
.PHONY: run
|
||||
run: run-web
|
||||
|
||||
.PHONY: run-web
|
||||
run-web: install build-web ## Start the web app
|
||||
yarn start
|
||||
|
||||
.PHONY: run-desktop
|
||||
run-desktop: install build-desktop ## Start the desktop app
|
||||
yarn tron:start
|
||||
|
||||
###############################################################################
|
||||
# TEST
|
||||
|
||||
GREP ?= ""
|
||||
|
||||
.PHONY: test
|
||||
test: test-unit test-e2e
|
||||
|
||||
.PHONY: test-unit
|
||||
test-unit: install ## Run the unit tests
|
||||
@ nc -z localhost 3000 || ( echo "Error: localhost:3000 not available, 'make run-web' first" && exit 1 )
|
||||
yarn test:unit
|
||||
|
||||
.PHONY: test-e2e
|
||||
test-e2e: install build-desktop ## Run the e2e tests
|
||||
yarn test:playwright:electron --workers=1 --grep=$(GREP)
|
||||
|
||||
###############################################################################
|
||||
# CLEAN
|
||||
|
||||
.PHONY: clean
|
||||
clean: ## Delete all artifacts
|
||||
rm -rf .vite/ build/
|
||||
rm -rf trace.zip playwright-report/ test-results/
|
||||
rm -rf public/kcl_wasm_lib_bg.wasm
|
||||
rm -rf rust/*/bindings/ rust/*/pkg/ rust/target/
|
||||
rm -rf node_modules/ rust/*/node_modules/
|
||||
|
||||
.PHONY: help
|
||||
help: install
|
||||
@ grep -E '^[^[:space:]]+:.*## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
###############################################################################
|
||||
|
||||
# I'm sorry this is so specific to my setup you may as well ignore this.
|
||||
# This is so you don't have to deal with electron windows popping up constantly.
|
||||
# It should work for you other Linux users.
|
||||
@ -14,12 +112,3 @@ lee-electron-test:
|
||||
Xephyr -br -ac -noreset -screen 1200x500 :2 &
|
||||
DISPLAY=:2 NODE_ENV=development PW_TEST_CONNECT_WS_ENDPOINT=ws://127.0.0.1:4444/ yarn tron:test -g "when using the file tree"
|
||||
killall Xephyr
|
||||
|
||||
$(XSTATE_TYPEGENS): $(TS_SRC)
|
||||
yarn xstate typegen 'src/**/*.ts?(x)'
|
||||
|
||||
public/kcl_wasm_lib_bg.wasm: $(KCL_WASM_LIB_FILES)
|
||||
yarn build:wasm
|
||||
|
||||
node_modules: package.json yarn.lock
|
||||
yarn install
|
||||
|
@ -184,7 +184,6 @@ example = extrude(exampleSketch, length = 1)
|
||||
```js
|
||||
// Color the result of a sweep.
|
||||
|
||||
|
||||
// Create a path for the sweep.
|
||||
sweepPath = startSketchOn('XZ')
|
||||
|> startProfileAt([0.05, 0.05], %)
|
||||
|
@ -22,8 +22,12 @@ layout: manual
|
||||
* [`string`](kcl/types/string)
|
||||
* [`tag`](kcl/types/tag)
|
||||
* **std**
|
||||
* [`Face`](kcl/types/Face)
|
||||
* [`HALF_TURN`](kcl/consts/std-HALF_TURN)
|
||||
* [`Helix`](kcl/types/Helix)
|
||||
* [`Plane`](kcl/types/Plane)
|
||||
* [`Point2d`](kcl/types/Point2d)
|
||||
* [`Point3d`](kcl/types/Point3d)
|
||||
* [`QUARTER_TURN`](kcl/consts/std-QUARTER_TURN)
|
||||
* [`Sketch`](kcl/types/Sketch)
|
||||
* [`Solid`](kcl/types/Solid)
|
||||
|
50
docs/kcl/intersect.md
Normal file
@ -52,7 +52,6 @@ fn sum(arr):
|
||||
sumSoFar = add(sumSoFar, i)
|
||||
return sumSoFar */
|
||||
|
||||
|
||||
// We use `assertEqual` to check that our `sum` function gives the
|
||||
// expected result. It's good to check your work!
|
||||
assertEqual(sum([1, 2, 3]), 6, 0.00001, "1 + 2 + 3 summed is 6")
|
||||
@ -114,7 +113,6 @@ fn decagon(radius):
|
||||
fullDecagon = partialDecagon // it's now full
|
||||
return fullDecagon */
|
||||
|
||||
|
||||
// Use the `decagon` function declared above, to sketch a decagon with radius 5.
|
||||
decagon(5.0)
|
||||
|> close()
|
||||
|
@ -57,7 +57,6 @@ rotate(
|
||||
```js
|
||||
// Rotate a pipe with roll, pitch, and yaw.
|
||||
|
||||
|
||||
// Create a path for the sweep.
|
||||
sweepPath = startSketchOn('XZ')
|
||||
|> startProfileAt([0.05, 0.05], %)
|
||||
@ -83,7 +82,6 @@ sweepSketch = startSketchOn('XY')
|
||||
```js
|
||||
// Rotate a pipe about an axis with an angle.
|
||||
|
||||
|
||||
// Create a path for the sweep.
|
||||
sweepPath = startSketchOn('XZ')
|
||||
|> startProfileAt([0.05, 0.05], %)
|
||||
|
@ -37,7 +37,6 @@ scale(
|
||||
```js
|
||||
// Scale a pipe.
|
||||
|
||||
|
||||
// Create a path for the sweep.
|
||||
sweepPath = startSketchOn('XZ')
|
||||
|> startProfileAt([0.05, 0.05], %)
|
||||
|
11250
docs/kcl/std.json
56
docs/kcl/subtract.md
Normal file
@ -43,7 +43,6 @@ sweep(
|
||||
```js
|
||||
// Create a pipe using a sweep.
|
||||
|
||||
|
||||
// Create a path for the sweep.
|
||||
sweepPath = startSketchOn('XZ')
|
||||
|> startProfileAt([0.05, 0.05], %)
|
||||
@ -68,7 +67,6 @@ sweepSketch = startSketchOn('XY')
|
||||
```js
|
||||
// Create a spring by sweeping around a helix path.
|
||||
|
||||
|
||||
// Create a helix around the Z axis.
|
||||
helixPath = helix(
|
||||
angleStart = 0,
|
||||
|
@ -35,7 +35,6 @@ translate(
|
||||
```js
|
||||
// Move a pipe.
|
||||
|
||||
|
||||
// Create a path for the sweep.
|
||||
sweepPath = startSketchOn('XZ')
|
||||
|> startProfileAt([0.05, 0.05], %)
|
||||
|
@ -1,28 +1,12 @@
|
||||
---
|
||||
title: "Face"
|
||||
title: "std::Face"
|
||||
excerpt: "A face."
|
||||
layout: manual
|
||||
---
|
||||
|
||||
A face.
|
||||
|
||||
**Type:** `object`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Properties
|
||||
|
||||
| Property | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `id` |[`string`](/docs/kcl/types/string)| The id of the face. | No |
|
||||
| `artifactId` |[`ArtifactId`](/docs/kcl/types/ArtifactId)| The artifact ID. | No |
|
||||
| `value` |[`string`](/docs/kcl/types/string)| The tag of the face. | No |
|
||||
| `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face's X axis be? | No |
|
||||
| `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face's Y axis be? | No |
|
||||
| `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No |
|
||||
| `solid` |[`Solid`](/docs/kcl/types/Solid)| The solid the face is on. | No |
|
||||
| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No |
|
||||
|
||||
|
||||
|
@ -1,26 +1,12 @@
|
||||
---
|
||||
title: "Helix"
|
||||
title: "std::Helix"
|
||||
excerpt: "A helix."
|
||||
layout: manual
|
||||
---
|
||||
|
||||
A helix.
|
||||
|
||||
**Type:** `object`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Properties
|
||||
|
||||
| Property | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `value` |[`string`](/docs/kcl/types/string)| The id of the helix. | No |
|
||||
| `artifactId` |[`ArtifactId`](/docs/kcl/types/ArtifactId)| The artifact ID. | No |
|
||||
| `revolutions` |[`number`](/docs/kcl/types/number)| Number of revolutions. | No |
|
||||
| `angleStart` |[`number`](/docs/kcl/types/number)| Start angle (in degrees). | No |
|
||||
| `ccw` |`boolean`| Is the helix rotation counter clockwise? | No |
|
||||
| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No |
|
||||
|
||||
|
||||
|
@ -188,7 +188,7 @@ Any KCL value.
|
||||
| Property | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `type` |enum: [`Face`](/docs/kcl/types/Face)| | No |
|
||||
| `value` |[`Face`](/docs/kcl/types/Face)| A face. | No |
|
||||
| `value` |[`Face`](/docs/kcl/types/Face)| | No |
|
||||
|
||||
|
||||
----
|
||||
@ -236,7 +236,7 @@ Any KCL value.
|
||||
| Property | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `type` |enum: [`Helix`](/docs/kcl/types/Helix)| | No |
|
||||
| `value` |[`Helix`](/docs/kcl/types/Helix)| A helix. | No |
|
||||
| `value` |[`Helix`](/docs/kcl/types/Helix)| | No |
|
||||
|
||||
|
||||
----
|
||||
|
17
docs/kcl/types/Point2d.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "std::Point2d"
|
||||
excerpt: "A point in two dimensional space."
|
||||
layout: manual
|
||||
---
|
||||
|
||||
A point in two dimensional space.
|
||||
|
||||
```kcl
|
||||
type Point2d = [number; 2]
|
||||
```
|
||||
|
||||
`Point2d` is an alias for a two-element array of [number](/docs/kcl/types/number)s. To write a value
|
||||
with type `Point2d`, use an array, e.g., `[0, 0]` or `[5.0, 3.14]`.
|
||||
|
||||
|
||||
|
@ -1,22 +1,17 @@
|
||||
---
|
||||
title: "Point3d"
|
||||
excerpt: ""
|
||||
title: "std::Point3d"
|
||||
excerpt: "A point in three dimensional space."
|
||||
layout: manual
|
||||
---
|
||||
|
||||
A point in three dimensional space.
|
||||
|
||||
**Type:** `object`
|
||||
```kcl
|
||||
type Point3d = [number; 3]
|
||||
```
|
||||
|
||||
`Point3d` is an alias for a three-element array of [number](/docs/kcl/types/number)s. To write a value
|
||||
with type `Point3d`, use an array, e.g., `[0, 0, 0]` or `[5.0, 3.14, 6.8]`.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Properties
|
||||
|
||||
| Property | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `x` |[`number`](/docs/kcl/types/number)| | No |
|
||||
| `y` |[`number`](/docs/kcl/types/number)| | No |
|
||||
| `z` |[`number`](/docs/kcl/types/number)| | No |
|
||||
|
||||
|
||||
|
@ -22,7 +22,6 @@ A path to sweep along.
|
||||
|
||||
|
||||
----
|
||||
A helix.
|
||||
|
||||
[`Helix`](/docs/kcl/types/Helix)
|
||||
|
||||
|
50
docs/kcl/union.md
Normal file
@ -153,7 +153,8 @@ async function doBasicSketch(
|
||||
}
|
||||
|
||||
test.describe('Basic sketch', { tag: ['@skipWin'] }, () => {
|
||||
test.fixme('code pane open at start', async ({ page, homePage }) => {
|
||||
test('code pane open at start', async ({ page, homePage }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
await doBasicSketch(page, homePage, ['code'])
|
||||
})
|
||||
|
||||
|
@ -46,11 +46,12 @@ test.describe('Code pane and errors', { tag: ['@skipWin'] }, () => {
|
||||
await expect(codePaneButtonHolder).toContainText('notification')
|
||||
})
|
||||
|
||||
test.skip('Opening and closing the code pane will consistently show error diagnostics', async ({
|
||||
test('Opening and closing the code pane will consistently show error diagnostics', async ({
|
||||
page,
|
||||
homePage,
|
||||
editor,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
|
||||
// Load the app with the working starter code
|
||||
@ -119,45 +120,47 @@ test.describe('Code pane and errors', { tag: ['@skipWin'] }, () => {
|
||||
await expect(page.locator('.cm-tooltip').first()).toBeVisible()
|
||||
})
|
||||
|
||||
test.fixme(
|
||||
'When error is not in view you can click the badge to scroll to it',
|
||||
async ({ page, homePage, context }) => {
|
||||
// Load the app with the working starter code
|
||||
await context.addInitScript((code) => {
|
||||
localStorage.setItem('persistCode', code)
|
||||
}, TEST_CODE_LONG_WITH_ERROR_OUT_OF_VIEW)
|
||||
test('When error is not in view you can click the badge to scroll to it', async ({
|
||||
page,
|
||||
homePage,
|
||||
context,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
// Load the app with the working starter code
|
||||
await context.addInitScript((code) => {
|
||||
localStorage.setItem('persistCode', code)
|
||||
}, TEST_CODE_LONG_WITH_ERROR_OUT_OF_VIEW)
|
||||
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
await page.waitForTimeout(1000)
|
||||
await page.waitForTimeout(1000)
|
||||
|
||||
// Ensure badge is present
|
||||
const codePaneButtonHolder = page.locator('#code-button-holder')
|
||||
await expect(codePaneButtonHolder).toContainText('notification')
|
||||
// Ensure badge is present
|
||||
const codePaneButtonHolder = page.locator('#code-button-holder')
|
||||
await expect(codePaneButtonHolder).toContainText('notification')
|
||||
|
||||
// Ensure we have no errors in the gutter, since error out of view.
|
||||
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||
// Ensure we have no errors in the gutter, since error out of view.
|
||||
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||
|
||||
// Click the badge.
|
||||
const badge = page.locator('#code-badge')
|
||||
await expect(badge).toBeVisible()
|
||||
await badge.click()
|
||||
// Click the badge.
|
||||
const badge = page.locator('#code-badge')
|
||||
await expect(badge).toBeVisible()
|
||||
await badge.click()
|
||||
|
||||
// Ensure we have an error diagnostic.
|
||||
await expect(page.locator('.cm-lint-marker-error').first()).toBeVisible()
|
||||
// Ensure we have an error diagnostic.
|
||||
await expect(page.locator('.cm-lint-marker-error').first()).toBeVisible()
|
||||
|
||||
// Hover over the error to see the error message
|
||||
await page.hover('.cm-lint-marker-error')
|
||||
await expect(
|
||||
page
|
||||
.getByText(
|
||||
'Modeling command failed: [ApiError { error_code: InternalEngine, message: "Solid3D revolve failed: sketch profile must lie entirely on one side of the revolution axis" }]'
|
||||
)
|
||||
.first()
|
||||
).toBeVisible()
|
||||
}
|
||||
)
|
||||
// Hover over the error to see the error message
|
||||
await page.hover('.cm-lint-marker-error')
|
||||
await expect(
|
||||
page
|
||||
.getByText(
|
||||
'Modeling command failed: [ApiError { error_code: InternalEngine, message: "Solid3D revolve failed: sketch profile must lie entirely on one side of the revolution axis" }]'
|
||||
)
|
||||
.first()
|
||||
).toBeVisible()
|
||||
})
|
||||
|
||||
test('When error is not in view WITH LINTS you can click the badge to scroll to it', async ({
|
||||
context,
|
||||
|
@ -47,7 +47,8 @@ test.describe('Command bar tests', { tag: ['@skipWin'] }, () => {
|
||||
})
|
||||
|
||||
// TODO: fix this test after the electron migration
|
||||
test.fixme('Fillet from command bar', async ({ page, homePage }) => {
|
||||
test('Fillet from command bar', async ({ page, homePage }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
@ -488,7 +489,7 @@ test.describe('Command bar tests', { tag: ['@skipWin'] }, () => {
|
||||
})
|
||||
})
|
||||
|
||||
test(`Can add a named parameter or constant`, async ({
|
||||
test(`Can add and edit a named parameter or constant`, async ({
|
||||
page,
|
||||
homePage,
|
||||
context,
|
||||
@ -510,7 +511,7 @@ c = 3 + a`
|
||||
// but you do because all modeling commands have that requirement
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
await test.step(`Go through the command palette flow`, async () => {
|
||||
await test.step(`Create a parameter via command bar`, async () => {
|
||||
await cmdBar.cmdBarOpenBtn.click()
|
||||
await cmdBar.chooseCommand('create parameter')
|
||||
await cmdBar.expectState({
|
||||
@ -535,5 +536,57 @@ c = 3 + a`
|
||||
await editor.expectEditor.toContain(
|
||||
`a = 5b = a * amyParameter001 = b - 5c = 3 + a`
|
||||
)
|
||||
|
||||
const newValue = `2 * b + a`
|
||||
await test.step(`Edit the parameter via command bar`, async () => {
|
||||
await cmdBar.cmdBarOpenBtn.click()
|
||||
await cmdBar.chooseCommand('edit parameter')
|
||||
await cmdBar.expectState({
|
||||
stage: 'arguments',
|
||||
commandName: 'Edit parameter',
|
||||
currentArgKey: 'Name',
|
||||
currentArgValue: '',
|
||||
headerArguments: {
|
||||
Name: '',
|
||||
Value: '',
|
||||
},
|
||||
highlightedHeaderArg: 'Name',
|
||||
})
|
||||
await cmdBar
|
||||
.selectOption({
|
||||
name: 'myParameter001',
|
||||
})
|
||||
.click()
|
||||
await cmdBar.expectState({
|
||||
stage: 'arguments',
|
||||
commandName: 'Edit parameter',
|
||||
currentArgKey: 'value',
|
||||
currentArgValue: 'b - 5',
|
||||
headerArguments: {
|
||||
Name: 'myParameter001',
|
||||
Value: '',
|
||||
},
|
||||
highlightedHeaderArg: 'value',
|
||||
})
|
||||
await cmdBar.argumentInput.locator('[contenteditable]').fill(newValue)
|
||||
await cmdBar.progressCmdBar()
|
||||
await cmdBar.expectState({
|
||||
stage: 'review',
|
||||
commandName: 'Edit parameter',
|
||||
headerArguments: {
|
||||
Name: 'myParameter001',
|
||||
// KCL inputs show the *computed* value, not the input value, in the command palette header
|
||||
Value: '55',
|
||||
},
|
||||
})
|
||||
await cmdBar.progressCmdBar()
|
||||
await cmdBar.expectState({
|
||||
stage: 'commandBarClosed',
|
||||
})
|
||||
})
|
||||
|
||||
await editor.expectEditor.toContain(
|
||||
`a = 5b = a * amyParameter001 = ${newValue}c = 3 + a`
|
||||
)
|
||||
})
|
||||
})
|
||||
|
@ -635,14 +635,16 @@ test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
|
||||
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||
})
|
||||
|
||||
test.fixme(
|
||||
'error with 2 source ranges gets 2 diagnostics',
|
||||
async ({ page, homePage }) => {
|
||||
const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`length = .750
|
||||
test('error with 2 source ranges gets 2 diagnostics', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`length = .750
|
||||
width = 0.500
|
||||
height = 0.500
|
||||
dia = 4
|
||||
@ -657,53 +659,52 @@ test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
|
||||
return squareHoleSketch
|
||||
}
|
||||
`
|
||||
)
|
||||
})
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
)
|
||||
})
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
await page.waitForTimeout(1000)
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
await page.waitForTimeout(1000)
|
||||
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
// check no error to begin with
|
||||
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||
// check no error to begin with
|
||||
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||
|
||||
// Click on the bottom of the code editor to add a new line
|
||||
await u.codeLocator.click()
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('Enter')
|
||||
await page.keyboard.type(`extrusion = startSketchOn('XY')
|
||||
// Click on the bottom of the code editor to add a new line
|
||||
await u.codeLocator.click()
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.press('Enter')
|
||||
await page.keyboard.type(`extrusion = startSketchOn('XY')
|
||||
|> circle(center: [0, 0], radius: dia/2)
|
||||
|> hole(squareHole(length, width, height), %)
|
||||
|> extrude(length = height)`)
|
||||
|
||||
// error in gutter
|
||||
await expect(page.locator('.cm-lint-marker-error').first()).toBeVisible()
|
||||
await page.hover('.cm-lint-marker-error:first-child')
|
||||
await expect(
|
||||
page.getByText('Expected 2 arguments, got 3').first()
|
||||
).toBeVisible()
|
||||
// error in gutter
|
||||
await expect(page.locator('.cm-lint-marker-error').first()).toBeVisible()
|
||||
await page.hover('.cm-lint-marker-error:first-child')
|
||||
await expect(
|
||||
page.getByText('Expected 2 arguments, got 3').first()
|
||||
).toBeVisible()
|
||||
|
||||
// Make sure there are two diagnostics
|
||||
await expect(page.locator('.cm-lint-marker-error')).toHaveCount(2)
|
||||
}
|
||||
)
|
||||
// Make sure there are two diagnostics
|
||||
await expect(page.locator('.cm-lint-marker-error')).toHaveCount(2)
|
||||
})
|
||||
test('if your kcl gets an error from the engine it is inlined', async ({
|
||||
context,
|
||||
page,
|
||||
@ -1121,10 +1122,11 @@ test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
|
||||
}
|
||||
)
|
||||
|
||||
test.fixme(
|
||||
test(
|
||||
`Can use the import stdlib function on a local OBJ file`,
|
||||
{ tag: '@electron' },
|
||||
async ({ page, context }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const bracketDir = join(dir, 'cube')
|
||||
await fsp.mkdir(bracketDir, { recursive: true })
|
||||
|
@ -266,12 +266,13 @@ test.describe('when using the file tree to', () => {
|
||||
}
|
||||
)
|
||||
|
||||
test.fixme(
|
||||
test(
|
||||
'loading small file, then large, then back to small',
|
||||
{
|
||||
tag: '@electron',
|
||||
},
|
||||
async ({ page }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const {
|
||||
panesOpen,
|
||||
pasteCodeInEditor,
|
||||
|
@ -1,4 +1,4 @@
|
||||
import type { Page, Locator } from '@playwright/test'
|
||||
import { type Page, type Locator, test } from '@playwright/test'
|
||||
import { expect } from '../zoo-test'
|
||||
import {
|
||||
checkIfPaneIsOpen,
|
||||
@ -76,10 +76,6 @@ export class ToolbarFixture {
|
||||
this.gizmoDisabled = page.getByTestId('gizmo-disabled')
|
||||
}
|
||||
|
||||
get editSketchBtn() {
|
||||
return this.page.locator('[name="Edit Sketch"]')
|
||||
}
|
||||
|
||||
get logoLink() {
|
||||
return this.page.getByTestId('app-logo')
|
||||
}
|
||||
@ -115,11 +111,20 @@ export class ToolbarFixture {
|
||||
).not.toBeDisabled()
|
||||
}
|
||||
|
||||
editSketch = async () => {
|
||||
await this.editSketchBtn.first().click()
|
||||
// One of the rare times we want to allow a arbitrary wait
|
||||
// this is for the engine animation, as it takes 500ms to complete
|
||||
await this.page.waitForTimeout(600)
|
||||
editSketch = async (operationIndex = 0) => {
|
||||
await test.step(`Editing sketch`, async () => {
|
||||
await this.openFeatureTreePane()
|
||||
const operation = await this.getFeatureTreeOperation(
|
||||
'Sketch',
|
||||
operationIndex
|
||||
)
|
||||
await operation.dblclick()
|
||||
// One of the rare times we want to allow a arbitrary wait
|
||||
// this is for the engine animation, as it takes 500ms to complete
|
||||
await this.page.waitForTimeout(600)
|
||||
await expect(this.exitSketchBtn).toBeEnabled()
|
||||
await this.closeFeatureTreePane()
|
||||
})
|
||||
}
|
||||
private _getMode = () =>
|
||||
this.page.locator('[data-current-mode]').getAttribute('data-current-mode')
|
||||
|
@ -319,237 +319,240 @@ test.describe('Onboarding tests', () => {
|
||||
// (lee) The two avatar tests are weird because even on main, we don't have
|
||||
// anything to do with the avatar inside the onboarding test. Due to the
|
||||
// low impact of an avatar not showing I'm changing this to fixme.
|
||||
test.fixme(
|
||||
'Avatar text updates depending on image load success',
|
||||
async ({ context, page, homePage, tronApp }) => {
|
||||
if (!tronApp) {
|
||||
fail()
|
||||
}
|
||||
|
||||
await tronApp.cleanProjectDir({
|
||||
app: {
|
||||
onboarding_status: '',
|
||||
},
|
||||
})
|
||||
|
||||
// Override beforeEach test setup
|
||||
await context.addInitScript(
|
||||
async ({ settingsKey, settings }) => {
|
||||
localStorage.setItem(settingsKey, settings)
|
||||
},
|
||||
{
|
||||
settingsKey: TEST_SETTINGS_KEY,
|
||||
settings: settingsToToml({
|
||||
settings: TEST_SETTINGS_ONBOARDING_USER_MENU,
|
||||
}),
|
||||
}
|
||||
)
|
||||
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// Test that the text in this step is correct
|
||||
const avatarLocator = page
|
||||
.getByTestId('user-sidebar-toggle')
|
||||
.locator('img')
|
||||
const onboardingOverlayLocator = page
|
||||
.getByTestId('onboarding-content')
|
||||
.locator('div')
|
||||
.nth(1)
|
||||
|
||||
// Expect the avatar to be visible and for the text to reference it
|
||||
await expect(avatarLocator).toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toContainText('your avatar')
|
||||
|
||||
// This is to force the avatar to 404.
|
||||
// For our test image (only triggers locally. on CI, it's Kurt's /
|
||||
// gravatar image )
|
||||
await page.route('/cat.jpg', async (route) => {
|
||||
await route.fulfill({
|
||||
status: 404,
|
||||
contentType: 'text/plain',
|
||||
body: 'Not Found!',
|
||||
})
|
||||
})
|
||||
|
||||
// 404 the CI avatar image
|
||||
await page.route(
|
||||
'https://lh3.googleusercontent.com/**',
|
||||
async (route) => {
|
||||
await route.fulfill({
|
||||
status: 404,
|
||||
contentType: 'text/plain',
|
||||
body: 'Not Found!',
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
await page.reload({ waitUntil: 'domcontentloaded' })
|
||||
|
||||
// Now expect the text to be different
|
||||
await expect(avatarLocator).not.toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toContainText('the menu button')
|
||||
}
|
||||
)
|
||||
|
||||
test.fixme(
|
||||
"Avatar text doesn't mention avatar when no avatar",
|
||||
async ({ context, page, homePage, tronApp }) => {
|
||||
if (!tronApp) {
|
||||
fail()
|
||||
}
|
||||
|
||||
await tronApp.cleanProjectDir({
|
||||
app: {
|
||||
onboarding_status: '',
|
||||
},
|
||||
})
|
||||
// Override beforeEach test setup
|
||||
await context.addInitScript(
|
||||
async ({ settingsKey, settings }) => {
|
||||
localStorage.setItem(settingsKey, settings)
|
||||
localStorage.setItem('FORCE_NO_IMAGE', 'FORCE_NO_IMAGE')
|
||||
},
|
||||
{
|
||||
settingsKey: TEST_SETTINGS_KEY,
|
||||
settings: settingsToToml({
|
||||
settings: TEST_SETTINGS_ONBOARDING_USER_MENU,
|
||||
}),
|
||||
}
|
||||
)
|
||||
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// Test that the text in this step is correct
|
||||
const sidebar = page.getByTestId('user-sidebar-toggle')
|
||||
const avatar = sidebar.locator('img')
|
||||
const onboardingOverlayLocator = page
|
||||
.getByTestId('onboarding-content')
|
||||
.locator('div')
|
||||
.nth(1)
|
||||
|
||||
// Expect the avatar to be visible and for the text to reference it
|
||||
await expect(avatar).not.toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toContainText('the menu button')
|
||||
|
||||
// Test we mention what else is in this menu for https://github.com/KittyCAD/modeling-app/issues/2939
|
||||
// which doesn't deserver its own full test spun up
|
||||
const userMenuFeatures = [
|
||||
'manage your account',
|
||||
'report a bug',
|
||||
'request a feature',
|
||||
'sign out',
|
||||
]
|
||||
for (const feature of userMenuFeatures) {
|
||||
await expect(onboardingOverlayLocator).toContainText(feature)
|
||||
}
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
test.fixme(
|
||||
'Restarting onboarding on desktop takes one attempt',
|
||||
async ({ context, page, tronApp }) => {
|
||||
test('Avatar text updates depending on image load success', async ({
|
||||
context,
|
||||
page,
|
||||
homePage,
|
||||
tronApp,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
if (!tronApp) {
|
||||
fail()
|
||||
}
|
||||
|
||||
await tronApp.cleanProjectDir({
|
||||
app: {
|
||||
onboarding_status: 'dismissed',
|
||||
onboarding_status: '',
|
||||
},
|
||||
})
|
||||
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const routerTemplateDir = join(dir, 'router-template-slate')
|
||||
await fsp.mkdir(routerTemplateDir, { recursive: true })
|
||||
await fsp.copyFile(
|
||||
executorInputPath('router-template-slate.kcl'),
|
||||
join(routerTemplateDir, 'main.kcl')
|
||||
)
|
||||
})
|
||||
// Override beforeEach test setup
|
||||
await context.addInitScript(
|
||||
async ({ settingsKey, settings }) => {
|
||||
localStorage.setItem(settingsKey, settings)
|
||||
},
|
||||
{
|
||||
settingsKey: TEST_SETTINGS_KEY,
|
||||
settings: settingsToToml({
|
||||
settings: TEST_SETTINGS_ONBOARDING_USER_MENU,
|
||||
}),
|
||||
}
|
||||
)
|
||||
|
||||
// Our constants
|
||||
const u = await getUtils(page)
|
||||
const projectCard = page.getByText('router-template-slate')
|
||||
const helpMenuButton = page.getByRole('button', {
|
||||
name: 'Help and resources',
|
||||
})
|
||||
const restartOnboardingButton = page.getByRole('button', {
|
||||
name: 'Reset onboarding',
|
||||
})
|
||||
const nextButton = page.getByTestId('onboarding-next')
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
const tutorialProjectIndicator = page
|
||||
.getByTestId('project-sidebar-toggle')
|
||||
.filter({ hasText: 'Tutorial Project 00' })
|
||||
const tutorialModalText = page.getByText('Welcome to Modeling App!')
|
||||
const tutorialDismissButton = page.getByRole('button', { name: 'Dismiss' })
|
||||
const userMenuButton = page.getByTestId('user-sidebar-toggle')
|
||||
const userMenuSettingsButton = page.getByRole('button', {
|
||||
name: 'User settings',
|
||||
})
|
||||
const settingsHeading = page.getByRole('heading', {
|
||||
name: 'Settings',
|
||||
exact: true,
|
||||
})
|
||||
const restartOnboardingSettingsButton = page.getByRole('button', {
|
||||
name: 'Replay onboarding',
|
||||
})
|
||||
// Test that the text in this step is correct
|
||||
const avatarLocator = page.getByTestId('user-sidebar-toggle').locator('img')
|
||||
const onboardingOverlayLocator = page
|
||||
.getByTestId('onboarding-content')
|
||||
.locator('div')
|
||||
.nth(1)
|
||||
|
||||
await test.step('Navigate into project', async () => {
|
||||
await expect(
|
||||
page.getByRole('heading', { name: 'Your Projects' })
|
||||
).toBeVisible()
|
||||
await expect(projectCard).toBeVisible()
|
||||
await projectCard.click()
|
||||
await u.waitForPageLoad()
|
||||
})
|
||||
// Expect the avatar to be visible and for the text to reference it
|
||||
await expect(avatarLocator).toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toContainText('your avatar')
|
||||
|
||||
await test.step('Restart the onboarding from help menu', async () => {
|
||||
await helpMenuButton.click()
|
||||
await restartOnboardingButton.click()
|
||||
|
||||
await nextButton.hover()
|
||||
await nextButton.click()
|
||||
})
|
||||
|
||||
await test.step('Confirm that the onboarding has restarted', async () => {
|
||||
await expect(tutorialProjectIndicator).toBeVisible()
|
||||
await expect(tutorialModalText).toBeVisible()
|
||||
// Make sure the model loaded
|
||||
const XYPlanePoint = { x: 988, y: 523 } as const
|
||||
const modelColor: [number, number, number] = [76, 76, 76]
|
||||
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await expectPixelColor(page, modelColor, XYPlanePoint, 8)
|
||||
await tutorialDismissButton.click()
|
||||
// Make sure model still there.
|
||||
await expectPixelColor(page, modelColor, XYPlanePoint, 8)
|
||||
})
|
||||
|
||||
await test.step('Clear code and restart onboarding from settings', async () => {
|
||||
await u.openKclCodePanel()
|
||||
await expect(u.codeLocator).toContainText('// Shelf Bracket')
|
||||
await u.codeLocator.selectText()
|
||||
await u.codeLocator.fill('')
|
||||
|
||||
await test.step('Navigate to settings', async () => {
|
||||
await userMenuButton.click()
|
||||
await userMenuSettingsButton.click()
|
||||
await expect(settingsHeading).toBeVisible()
|
||||
await expect(restartOnboardingSettingsButton).toBeVisible()
|
||||
// This is to force the avatar to 404.
|
||||
// For our test image (only triggers locally. on CI, it's Kurt's /
|
||||
// gravatar image )
|
||||
await page.route('/cat.jpg', async (route) => {
|
||||
await route.fulfill({
|
||||
status: 404,
|
||||
contentType: 'text/plain',
|
||||
body: 'Not Found!',
|
||||
})
|
||||
|
||||
await restartOnboardingSettingsButton.click()
|
||||
// Since the code is empty, we should not see the confirmation dialog
|
||||
await expect(nextButton).not.toBeVisible()
|
||||
await expect(tutorialProjectIndicator).toBeVisible()
|
||||
await expect(tutorialModalText).toBeVisible()
|
||||
})
|
||||
|
||||
// 404 the CI avatar image
|
||||
await page.route('https://lh3.googleusercontent.com/**', async (route) => {
|
||||
await route.fulfill({
|
||||
status: 404,
|
||||
contentType: 'text/plain',
|
||||
body: 'Not Found!',
|
||||
})
|
||||
})
|
||||
|
||||
await page.reload({ waitUntil: 'domcontentloaded' })
|
||||
|
||||
// Now expect the text to be different
|
||||
await expect(avatarLocator).not.toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toContainText('the menu button')
|
||||
})
|
||||
|
||||
test("Avatar text doesn't mention avatar when no avatar", async ({
|
||||
context,
|
||||
page,
|
||||
homePage,
|
||||
tronApp,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
if (!tronApp) {
|
||||
fail()
|
||||
}
|
||||
|
||||
await tronApp.cleanProjectDir({
|
||||
app: {
|
||||
onboarding_status: '',
|
||||
},
|
||||
})
|
||||
// Override beforeEach test setup
|
||||
await context.addInitScript(
|
||||
async ({ settingsKey, settings }) => {
|
||||
localStorage.setItem(settingsKey, settings)
|
||||
localStorage.setItem('FORCE_NO_IMAGE', 'FORCE_NO_IMAGE')
|
||||
},
|
||||
{
|
||||
settingsKey: TEST_SETTINGS_KEY,
|
||||
settings: settingsToToml({
|
||||
settings: TEST_SETTINGS_ONBOARDING_USER_MENU,
|
||||
}),
|
||||
}
|
||||
)
|
||||
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// Test that the text in this step is correct
|
||||
const sidebar = page.getByTestId('user-sidebar-toggle')
|
||||
const avatar = sidebar.locator('img')
|
||||
const onboardingOverlayLocator = page
|
||||
.getByTestId('onboarding-content')
|
||||
.locator('div')
|
||||
.nth(1)
|
||||
|
||||
// Expect the avatar to be visible and for the text to reference it
|
||||
await expect(avatar).not.toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toBeVisible()
|
||||
await expect(onboardingOverlayLocator).toContainText('the menu button')
|
||||
|
||||
// Test we mention what else is in this menu for https://github.com/KittyCAD/modeling-app/issues/2939
|
||||
// which doesn't deserver its own full test spun up
|
||||
const userMenuFeatures = [
|
||||
'manage your account',
|
||||
'report a bug',
|
||||
'request a feature',
|
||||
'sign out',
|
||||
]
|
||||
for (const feature of userMenuFeatures) {
|
||||
await expect(onboardingOverlayLocator).toContainText(feature)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
test('Restarting onboarding on desktop takes one attempt', async ({
|
||||
context,
|
||||
page,
|
||||
tronApp,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
if (!tronApp) {
|
||||
fail()
|
||||
}
|
||||
)
|
||||
|
||||
await tronApp.cleanProjectDir({
|
||||
app: {
|
||||
onboarding_status: 'dismissed',
|
||||
},
|
||||
})
|
||||
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const routerTemplateDir = join(dir, 'router-template-slate')
|
||||
await fsp.mkdir(routerTemplateDir, { recursive: true })
|
||||
await fsp.copyFile(
|
||||
executorInputPath('router-template-slate.kcl'),
|
||||
join(routerTemplateDir, 'main.kcl')
|
||||
)
|
||||
})
|
||||
|
||||
// Our constants
|
||||
const u = await getUtils(page)
|
||||
const projectCard = page.getByText('router-template-slate')
|
||||
const helpMenuButton = page.getByRole('button', {
|
||||
name: 'Help and resources',
|
||||
})
|
||||
const restartOnboardingButton = page.getByRole('button', {
|
||||
name: 'Reset onboarding',
|
||||
})
|
||||
const nextButton = page.getByTestId('onboarding-next')
|
||||
|
||||
const tutorialProjectIndicator = page
|
||||
.getByTestId('project-sidebar-toggle')
|
||||
.filter({ hasText: 'Tutorial Project 00' })
|
||||
const tutorialModalText = page.getByText('Welcome to Modeling App!')
|
||||
const tutorialDismissButton = page.getByRole('button', { name: 'Dismiss' })
|
||||
const userMenuButton = page.getByTestId('user-sidebar-toggle')
|
||||
const userMenuSettingsButton = page.getByRole('button', {
|
||||
name: 'User settings',
|
||||
})
|
||||
const settingsHeading = page.getByRole('heading', {
|
||||
name: 'Settings',
|
||||
exact: true,
|
||||
})
|
||||
const restartOnboardingSettingsButton = page.getByRole('button', {
|
||||
name: 'Replay onboarding',
|
||||
})
|
||||
|
||||
await test.step('Navigate into project', async () => {
|
||||
await expect(
|
||||
page.getByRole('heading', { name: 'Your Projects' })
|
||||
).toBeVisible()
|
||||
await expect(projectCard).toBeVisible()
|
||||
await projectCard.click()
|
||||
await u.waitForPageLoad()
|
||||
})
|
||||
|
||||
await test.step('Restart the onboarding from help menu', async () => {
|
||||
await helpMenuButton.click()
|
||||
await restartOnboardingButton.click()
|
||||
|
||||
await nextButton.hover()
|
||||
await nextButton.click()
|
||||
})
|
||||
|
||||
await test.step('Confirm that the onboarding has restarted', async () => {
|
||||
await expect(tutorialProjectIndicator).toBeVisible()
|
||||
await expect(tutorialModalText).toBeVisible()
|
||||
// Make sure the model loaded
|
||||
const XYPlanePoint = { x: 988, y: 523 } as const
|
||||
const modelColor: [number, number, number] = [76, 76, 76]
|
||||
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await expectPixelColor(page, modelColor, XYPlanePoint, 8)
|
||||
await tutorialDismissButton.click()
|
||||
// Make sure model still there.
|
||||
await expectPixelColor(page, modelColor, XYPlanePoint, 8)
|
||||
})
|
||||
|
||||
await test.step('Clear code and restart onboarding from settings', async () => {
|
||||
await u.openKclCodePanel()
|
||||
await expect(u.codeLocator).toContainText('// Shelf Bracket')
|
||||
await u.codeLocator.selectText()
|
||||
await u.codeLocator.fill('')
|
||||
|
||||
await test.step('Navigate to settings', async () => {
|
||||
await userMenuButton.click()
|
||||
await userMenuSettingsButton.click()
|
||||
await expect(settingsHeading).toBeVisible()
|
||||
await expect(restartOnboardingSettingsButton).toBeVisible()
|
||||
})
|
||||
|
||||
await restartOnboardingSettingsButton.click()
|
||||
// Since the code is empty, we should not see the confirmation dialog
|
||||
await expect(nextButton).not.toBeVisible()
|
||||
await expect(tutorialProjectIndicator).toBeVisible()
|
||||
await expect(tutorialModalText).toBeVisible()
|
||||
})
|
||||
})
|
||||
|
@ -850,157 +850,160 @@ openSketch = startSketchOn('XY')
|
||||
})
|
||||
})
|
||||
|
||||
test.fixme(
|
||||
`Shift-click to select and deselect sketch segments`,
|
||||
async ({ page, homePage, scene, editor }) => {
|
||||
// Locators
|
||||
const firstPointLocation = { x: 200, y: 100 }
|
||||
const secondPointLocation = { x: 800, y: 100 }
|
||||
const thirdPointLocation = { x: 800, y: 400 }
|
||||
const fristSegmentLocation = { x: 750, y: 100 }
|
||||
const secondSegmentLocation = { x: 800, y: 150 }
|
||||
const planeLocation = { x: 700, y: 200 }
|
||||
test(`Shift-click to select and deselect sketch segments`, async ({
|
||||
page,
|
||||
homePage,
|
||||
scene,
|
||||
editor,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
// Locators
|
||||
const firstPointLocation = { x: 200, y: 100 }
|
||||
const secondPointLocation = { x: 800, y: 100 }
|
||||
const thirdPointLocation = { x: 800, y: 400 }
|
||||
const fristSegmentLocation = { x: 750, y: 100 }
|
||||
const secondSegmentLocation = { x: 800, y: 150 }
|
||||
const planeLocation = { x: 700, y: 200 }
|
||||
|
||||
// Click helpers
|
||||
const [clickFirstPoint] = scene.makeMouseHelpers(
|
||||
firstPointLocation.x,
|
||||
firstPointLocation.y
|
||||
)
|
||||
const [clickSecondPoint] = scene.makeMouseHelpers(
|
||||
secondPointLocation.x,
|
||||
secondPointLocation.y
|
||||
)
|
||||
const [clickThirdPoint] = scene.makeMouseHelpers(
|
||||
thirdPointLocation.x,
|
||||
thirdPointLocation.y
|
||||
)
|
||||
const [clickFirstSegment] = scene.makeMouseHelpers(
|
||||
fristSegmentLocation.x,
|
||||
fristSegmentLocation.y
|
||||
)
|
||||
const [clickSecondSegment] = scene.makeMouseHelpers(
|
||||
secondSegmentLocation.x,
|
||||
secondSegmentLocation.y
|
||||
)
|
||||
const [clickPlane] = scene.makeMouseHelpers(
|
||||
planeLocation.x,
|
||||
planeLocation.y
|
||||
)
|
||||
// Click helpers
|
||||
const [clickFirstPoint] = scene.makeMouseHelpers(
|
||||
firstPointLocation.x,
|
||||
firstPointLocation.y
|
||||
)
|
||||
const [clickSecondPoint] = scene.makeMouseHelpers(
|
||||
secondPointLocation.x,
|
||||
secondPointLocation.y
|
||||
)
|
||||
const [clickThirdPoint] = scene.makeMouseHelpers(
|
||||
thirdPointLocation.x,
|
||||
thirdPointLocation.y
|
||||
)
|
||||
const [clickFirstSegment] = scene.makeMouseHelpers(
|
||||
fristSegmentLocation.x,
|
||||
fristSegmentLocation.y
|
||||
)
|
||||
const [clickSecondSegment] = scene.makeMouseHelpers(
|
||||
secondSegmentLocation.x,
|
||||
secondSegmentLocation.y
|
||||
)
|
||||
const [clickPlane] = scene.makeMouseHelpers(
|
||||
planeLocation.x,
|
||||
planeLocation.y
|
||||
)
|
||||
|
||||
// Colors
|
||||
const edgeColorWhite: [number, number, number] = [220, 220, 220]
|
||||
const edgeColorBlue: [number, number, number] = [20, 20, 200]
|
||||
const backgroundColor: [number, number, number] = [30, 30, 30]
|
||||
const tolerance = 40
|
||||
const timeout = 150
|
||||
// Colors
|
||||
const edgeColorWhite: [number, number, number] = [220, 220, 220]
|
||||
const edgeColorBlue: [number, number, number] = [20, 20, 200]
|
||||
const backgroundColor: [number, number, number] = [30, 30, 30]
|
||||
const tolerance = 40
|
||||
const timeout = 150
|
||||
|
||||
// Setup
|
||||
await test.step(`Initial test setup`, async () => {
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
// Setup
|
||||
await test.step(`Initial test setup`, async () => {
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// Wait for the scene and stream to load
|
||||
// Wait for the scene and stream to load
|
||||
await scene.expectPixelColor(
|
||||
backgroundColor,
|
||||
secondPointLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
|
||||
await test.step('Select and deselect a single sketch segment', async () => {
|
||||
await test.step('Get into sketch mode', async () => {
|
||||
await editor.closePane()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickPlane()
|
||||
await page.waitForTimeout(1000)
|
||||
})
|
||||
await test.step('Draw sketch', async () => {
|
||||
await clickFirstPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickThirdPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
})
|
||||
await test.step('Deselect line tool', async () => {
|
||||
const btnLine = page.getByTestId('line')
|
||||
const btnLineAriaPressed = await btnLine.getAttribute('aria-pressed')
|
||||
if (btnLineAriaPressed === 'true') {
|
||||
await btnLine.click()
|
||||
}
|
||||
await page.waitForTimeout(timeout)
|
||||
})
|
||||
await test.step('Select the first segment', async () => {
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickFirstSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await scene.expectPixelColor(
|
||||
backgroundColor,
|
||||
secondPointLocation,
|
||||
edgeColorBlue,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
|
||||
await test.step('Select and deselect a single sketch segment', async () => {
|
||||
await test.step('Get into sketch mode', async () => {
|
||||
await editor.closePane()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickPlane()
|
||||
await page.waitForTimeout(1000)
|
||||
})
|
||||
await test.step('Draw sketch', async () => {
|
||||
await clickFirstPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickThirdPoint()
|
||||
await page.waitForTimeout(timeout)
|
||||
})
|
||||
await test.step('Deselect line tool', async () => {
|
||||
const btnLine = page.getByTestId('line')
|
||||
const btnLineAriaPressed = await btnLine.getAttribute('aria-pressed')
|
||||
if (btnLineAriaPressed === 'true') {
|
||||
await btnLine.click()
|
||||
}
|
||||
await page.waitForTimeout(timeout)
|
||||
})
|
||||
await test.step('Select the first segment', async () => {
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickFirstSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Select the second segment (Shift-click)', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Deselect the first segment', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickFirstSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Deselect the second segment', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Select the second segment (Shift-click)', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
}
|
||||
)
|
||||
await test.step('Deselect the first segment', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickFirstSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorBlue,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
await test.step('Deselect the second segment', async () => {
|
||||
await page.keyboard.down('Shift')
|
||||
await page.waitForTimeout(timeout)
|
||||
await clickSecondSegment()
|
||||
await page.waitForTimeout(timeout)
|
||||
await page.keyboard.up('Shift')
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
fristSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
await scene.expectPixelColor(
|
||||
edgeColorWhite,
|
||||
secondSegmentLocation,
|
||||
tolerance
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test(`Offset plane point-and-click`, async ({
|
||||
context,
|
||||
|
@ -1244,10 +1244,11 @@ test(
|
||||
}
|
||||
)
|
||||
|
||||
test.fixme(
|
||||
test(
|
||||
'Deleting projects, can delete individual project, can still create projects after deleting all',
|
||||
{ tag: '@electron' },
|
||||
async ({ context, page }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const projectData = [
|
||||
['router-template-slate', 'cylinder.kcl'],
|
||||
['bracket', 'focusrite_scarlett_mounting_braket.kcl'],
|
||||
@ -1466,10 +1467,11 @@ test(
|
||||
}
|
||||
)
|
||||
|
||||
test.fixme(
|
||||
test(
|
||||
'When the project folder is empty, user can create new project and open it.',
|
||||
{ tag: '@electron' },
|
||||
async ({ page }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
@ -2050,10 +2052,11 @@ test(
|
||||
)
|
||||
|
||||
// Flaky
|
||||
test.fixme(
|
||||
test(
|
||||
'Original project name persist after onboarding',
|
||||
{ tag: '@electron' },
|
||||
async ({ page }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
const getAllProjects = () => page.getByTestId('project-link').all()
|
||||
|
@ -196,60 +196,65 @@ test.describe('Prompt-to-edit tests', { tag: '@skipWin' }, () => {
|
||||
})
|
||||
})
|
||||
|
||||
test.fixme(
|
||||
`manual code selection rename`,
|
||||
async ({ context, homePage, cmdBar, editor, page, scene }) => {
|
||||
const body1CapCoords = { x: 571, y: 311 }
|
||||
test(`manual code selection rename`, async ({
|
||||
context,
|
||||
homePage,
|
||||
cmdBar,
|
||||
editor,
|
||||
page,
|
||||
scene,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const body1CapCoords = { x: 571, y: 311 }
|
||||
|
||||
await context.addInitScript((file) => {
|
||||
localStorage.setItem('persistCode', file)
|
||||
}, file)
|
||||
await homePage.goToModelingScene()
|
||||
await scene.waitForExecutionDone()
|
||||
await context.addInitScript((file) => {
|
||||
localStorage.setItem('persistCode', file)
|
||||
}, file)
|
||||
await homePage.goToModelingScene()
|
||||
await scene.waitForExecutionDone()
|
||||
|
||||
const submittingToast = page.getByText('Submitting to Text-to-CAD API...')
|
||||
const successToast = page.getByText('Prompt to edit successful')
|
||||
const acceptBtn = page.getByRole('button', { name: 'checkmark Accept' })
|
||||
const submittingToast = page.getByText('Submitting to Text-to-CAD API...')
|
||||
const successToast = page.getByText('Prompt to edit successful')
|
||||
const acceptBtn = page.getByRole('button', { name: 'checkmark Accept' })
|
||||
|
||||
await test.step('wait for scene to load and select code in editor', async () => {
|
||||
// Find and select the text "sketch002" in the editor
|
||||
await editor.selectText('sketch002')
|
||||
await test.step('wait for scene to load and select code in editor', async () => {
|
||||
// Find and select the text "sketch002" in the editor
|
||||
await editor.selectText('sketch002')
|
||||
|
||||
// Verify the selection was made
|
||||
await editor.expectState({
|
||||
highlightedCode: '',
|
||||
activeLines: ["sketch002 = startSketchOn('XZ')"],
|
||||
diagnostics: [],
|
||||
})
|
||||
// Verify the selection was made
|
||||
await editor.expectState({
|
||||
highlightedCode: '',
|
||||
activeLines: ["sketch002 = startSketchOn('XZ')"],
|
||||
diagnostics: [],
|
||||
})
|
||||
})
|
||||
|
||||
await test.step('fire off edit prompt', async () => {
|
||||
await scene.expectPixelColor([134, 134, 134], body1CapCoords, 15)
|
||||
await cmdBar.openCmdBar('promptToEdit')
|
||||
await page
|
||||
.getByTestId('cmd-bar-arg-value')
|
||||
.fill('Please rename to mySketch001')
|
||||
await page.waitForTimeout(100)
|
||||
await cmdBar.progressCmdBar()
|
||||
await expect(submittingToast).toBeVisible()
|
||||
await expect(submittingToast).not.toBeVisible({
|
||||
timeout: 2 * 60_000,
|
||||
})
|
||||
await expect(successToast).toBeVisible()
|
||||
await test.step('fire off edit prompt', async () => {
|
||||
await scene.expectPixelColor([134, 134, 134], body1CapCoords, 15)
|
||||
await cmdBar.openCmdBar('promptToEdit')
|
||||
await page
|
||||
.getByTestId('cmd-bar-arg-value')
|
||||
.fill('Please rename to mySketch001')
|
||||
await page.waitForTimeout(100)
|
||||
await cmdBar.progressCmdBar()
|
||||
await expect(submittingToast).toBeVisible()
|
||||
await expect(submittingToast).not.toBeVisible({
|
||||
timeout: 2 * 60_000,
|
||||
})
|
||||
await expect(successToast).toBeVisible()
|
||||
})
|
||||
|
||||
await test.step('verify rename change and accept it', async () => {
|
||||
await editor.expectEditor.toContain('mySketch001 = startSketchOn')
|
||||
await editor.expectEditor.not.toContain('sketch002 = startSketchOn')
|
||||
await editor.expectEditor.toContain(
|
||||
'extrude002 = extrude(mySketch001, length = 50)'
|
||||
)
|
||||
await test.step('verify rename change and accept it', async () => {
|
||||
await editor.expectEditor.toContain('mySketch001 = startSketchOn')
|
||||
await editor.expectEditor.not.toContain('sketch002 = startSketchOn')
|
||||
await editor.expectEditor.toContain(
|
||||
'extrude002 = extrude(mySketch001, length = 50)'
|
||||
)
|
||||
|
||||
await acceptBtn.click()
|
||||
await expect(successToast).not.toBeVisible()
|
||||
})
|
||||
}
|
||||
)
|
||||
await acceptBtn.click()
|
||||
await expect(successToast).not.toBeVisible()
|
||||
})
|
||||
})
|
||||
|
||||
test('multiple body selections', async ({
|
||||
context,
|
||||
|
@ -483,10 +483,11 @@ extrude001 = extrude(sketch001, length = 50)
|
||||
}
|
||||
)
|
||||
|
||||
test.fixme(
|
||||
test(
|
||||
`Network health indicator only appears in modeling view`,
|
||||
{ tag: '@electron' },
|
||||
async ({ context, page }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const bracketDir = path.join(dir, 'bracket')
|
||||
await fsp.mkdir(bracketDir, { recursive: true })
|
||||
|
@ -12,6 +12,7 @@ import {
|
||||
} from './test-utils'
|
||||
import { uuidv4, roundOff } from 'lib/utils'
|
||||
import { SceneFixture } from './fixtures/sceneFixture'
|
||||
import { ToolbarFixture } from './fixtures/toolbarFixture'
|
||||
import { CmdBarFixture } from './fixtures/cmdBarFixture'
|
||||
|
||||
test.describe('Sketch tests', { tag: ['@skipWin'] }, () => {
|
||||
@ -187,12 +188,14 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).toBeVisible()
|
||||
})
|
||||
test.fixme('Can edit segments by dragging their handles', () => {
|
||||
test('Can edit segments by dragging their handles', () => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const doEditSegmentsByDraggingHandle = async (
|
||||
page: Page,
|
||||
homePage: HomePageFixture,
|
||||
openPanes: string[],
|
||||
scene: SceneFixture,
|
||||
toolbar: ToolbarFixture,
|
||||
cmdBar: CmdBarFixture
|
||||
) => {
|
||||
// Load the app with the code panes
|
||||
@ -282,11 +285,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
// Select the sketch
|
||||
await page.mouse.click(700, 370)
|
||||
}
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Edit Sketch' })
|
||||
).toBeVisible()
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
await page.waitForTimeout(400)
|
||||
await toolbar.editSketch()
|
||||
if (openPanes.includes('code')) {
|
||||
prevContent = await page.locator('.cm-content').innerText()
|
||||
}
|
||||
@ -417,7 +416,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
test(
|
||||
'code pane open at start-handles',
|
||||
{ tag: ['@skipWin'] },
|
||||
async ({ page, homePage, scene, cmdBar }) => {
|
||||
async ({ page, homePage, scene, toolbar, cmdBar }) => {
|
||||
// Load the app with the code panes
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
@ -435,6 +434,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
homePage,
|
||||
['code'],
|
||||
scene,
|
||||
toolbar,
|
||||
cmdBar
|
||||
)
|
||||
}
|
||||
@ -443,7 +443,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
test(
|
||||
'code pane closed at start-handles',
|
||||
{ tag: ['@skipWin'] },
|
||||
async ({ page, homePage, scene, cmdBar }) => {
|
||||
async ({ page, homePage, scene, toolbar, cmdBar }) => {
|
||||
// Load the app with the code panes
|
||||
await page.addInitScript(async (persistModelingContext) => {
|
||||
localStorage.setItem(
|
||||
@ -451,7 +451,14 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
|
||||
JSON.stringify({ openPanes: [] })
|
||||
)
|
||||
}, PERSIST_MODELING_CONTEXT)
|
||||
await doEditSegmentsByDraggingHandle(page, homePage, [], scene, cmdBar)
|
||||
await doEditSegmentsByDraggingHandle(
|
||||
page,
|
||||
homePage,
|
||||
[],
|
||||
scene,
|
||||
toolbar,
|
||||
cmdBar
|
||||
)
|
||||
}
|
||||
)
|
||||
})
|
||||
@ -1080,107 +1087,108 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff(
|
||||
)
|
||||
})
|
||||
// TODO: fix after electron migration is merged
|
||||
test.fixme(
|
||||
'empty-scene default-planes act as expected',
|
||||
async ({ page, homePage }) => {
|
||||
/**
|
||||
* Tests the following things
|
||||
* 1) The the planes are there on load because the scene is empty
|
||||
* 2) The planes don't changes color when hovered initially
|
||||
* 3) Putting something in the scene makes the planes hidden
|
||||
* 4) Removing everything from the scene shows the plans again
|
||||
* 3) Once "start sketch" is click, the planes do respond to hovers
|
||||
* 4) Selecting a plan works as expected, i.e. sketch mode
|
||||
* 5) Reloading the scene with something already in the scene means the planes are hidden
|
||||
*/
|
||||
test('empty-scene default-planes act as expected', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
/**
|
||||
* Tests the following things
|
||||
* 1) The the planes are there on load because the scene is empty
|
||||
* 2) The planes don't changes color when hovered initially
|
||||
* 3) Putting something in the scene makes the planes hidden
|
||||
* 4) Removing everything from the scene shows the plans again
|
||||
* 3) Once "start sketch" is click, the planes do respond to hovers
|
||||
* 4) Selecting a plan works as expected, i.e. sketch mode
|
||||
* 5) Reloading the scene with something already in the scene means the planes are hidden
|
||||
*/
|
||||
|
||||
const u = await getUtils(page)
|
||||
await homePage.goToModelingScene()
|
||||
const u = await getUtils(page)
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
const XYPlanePoint = { x: 774, y: 116 } as const
|
||||
const unHoveredColor: [number, number, number] = [47, 47, 93]
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
const XYPlanePoint = { x: 774, y: 116 } as const
|
||||
const unHoveredColor: [number, number, number] = [47, 47, 93]
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(200)
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
// color should not change for having been hovered
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
// color should not change for having been hovered
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, unHoveredColor)
|
||||
).toBeLessThan(8)
|
||||
|
||||
await u.openAndClearDebugPanel()
|
||||
await u.openAndClearDebugPanel()
|
||||
|
||||
await u.codeLocator.fill(`sketch001 = startSketchOn('XY')
|
||||
await u.codeLocator.fill(`sketch001 = startSketchOn('XY')
|
||||
|> startProfileAt([-10, -10], %)
|
||||
|> line(end = [20, 0])
|
||||
|> line(end = [0, 20])
|
||||
|> xLine(length = -20)
|
||||
`)
|
||||
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
|
||||
const noPlanesColor: [number, number, number] = [30, 30, 30]
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, noPlanesColor)
|
||||
).toBeLessThan(3)
|
||||
const noPlanesColor: [number, number, number] = [30, 30, 30]
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, noPlanesColor)
|
||||
).toBeLessThan(3)
|
||||
|
||||
await u.clearCommandLogs()
|
||||
await u.removeCurrentCode()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.clearCommandLogs()
|
||||
await u.removeCurrentCode()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
|
||||
await expect
|
||||
.poll(() => u.getGreatestPixDiff(XYPlanePoint, unHoveredColor), {
|
||||
timeout: 5_000,
|
||||
})
|
||||
.toBeLessThan(8)
|
||||
await expect
|
||||
.poll(() => u.getGreatestPixDiff(XYPlanePoint, unHoveredColor), {
|
||||
timeout: 5_000,
|
||||
})
|
||||
.toBeLessThan(8)
|
||||
|
||||
// click start Sketch
|
||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y, { steps: 50 })
|
||||
const hoveredColor: [number, number, number] = [93, 93, 127]
|
||||
// now that we're expecting the user to select a plan, it does respond to hover
|
||||
await expect
|
||||
.poll(() => u.getGreatestPixDiff(XYPlanePoint, hoveredColor))
|
||||
.toBeLessThan(8)
|
||||
// click start Sketch
|
||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||
await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y, { steps: 50 })
|
||||
const hoveredColor: [number, number, number] = [93, 93, 127]
|
||||
// now that we're expecting the user to select a plan, it does respond to hover
|
||||
await expect
|
||||
.poll(() => u.getGreatestPixDiff(XYPlanePoint, hoveredColor))
|
||||
.toBeLessThan(8)
|
||||
|
||||
await page.mouse.click(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(600)
|
||||
await page.mouse.click(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(600)
|
||||
|
||||
await page.mouse.click(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(200)
|
||||
await page.mouse.click(XYPlanePoint.x + 50, XYPlanePoint.y + 50)
|
||||
await expect(u.codeLocator).toHaveText(`sketch001 = startSketchOn('XZ')
|
||||
await page.mouse.click(XYPlanePoint.x, XYPlanePoint.y)
|
||||
await page.waitForTimeout(200)
|
||||
await page.mouse.click(XYPlanePoint.x + 50, XYPlanePoint.y + 50)
|
||||
await expect(u.codeLocator).toHaveText(`sketch001 = startSketchOn('XZ')
|
||||
|> startProfileAt([11.8, 9.09], %)
|
||||
|> line(end = [3.39, -3.39])
|
||||
`)
|
||||
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`sketch001 = startSketchOn('XZ')
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`sketch001 = startSketchOn('XZ')
|
||||
|> startProfileAt([11.8, 9.09], %)
|
||||
|> line(end = [3.39, -3.39])
|
||||
`
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
// expect there to be no planes on load since there's something in the scene
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, noPlanesColor)
|
||||
).toBeLessThan(3)
|
||||
}
|
||||
)
|
||||
// expect there to be no planes on load since there's something in the scene
|
||||
expect(
|
||||
await u.getGreatestPixDiff(XYPlanePoint, noPlanesColor)
|
||||
).toBeLessThan(3)
|
||||
})
|
||||
|
||||
test('Can attempt to sketch on revolved face', async ({ page, homePage }) => {
|
||||
const u = await getUtils(page)
|
||||
@ -1454,10 +1462,11 @@ test.describe(`Sketching with offset planes`, () => {
|
||||
})
|
||||
|
||||
test.describe('multi-profile sketching', () => {
|
||||
test.fixme(
|
||||
test(
|
||||
`test it removes half-finished expressions when changing tools in sketch mode`,
|
||||
{ tag: ['@skipWin'] },
|
||||
async ({ context, page, scene, toolbar, editor, homePage, cmdBar }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
// We seed the scene with a single offset plane
|
||||
await context.addInitScript(() => {
|
||||
localStorage.setItem(
|
||||
@ -2545,7 +2554,7 @@ profile002 = startProfileAt([85.81, 52.55], sketch002)
|
||||
const [startProfileAt] = scene.makeMouseHelpers(606, 184)
|
||||
const [nextPoint] = scene.makeMouseHelpers(763, 130)
|
||||
await page.getByText('startProfileAt([85.81, 52.55], sketch002)').click()
|
||||
await toolbar.editSketch()
|
||||
await toolbar.editSketch(1)
|
||||
// timeout wait for engine animation is unavoidable
|
||||
await page.waitForTimeout(600)
|
||||
|
||||
@ -2765,7 +2774,7 @@ extrude003 = extrude(profile011, length = 2.5)
|
||||
await test.step(title, async () => {
|
||||
await camPositionForSelectingSketchOnWallProfiles()
|
||||
await selectClick()
|
||||
await toolbar.editSketch()
|
||||
await toolbar.editSketch(1)
|
||||
await page.waitForTimeout(600)
|
||||
await verifyWallProfilesAreDrawn()
|
||||
await toolbar.exitSketchBtn.click()
|
||||
@ -2846,13 +2855,18 @@ loft([profile001, profile002])
|
||||
)
|
||||
}
|
||||
)
|
||||
test.fixme(
|
||||
'Can enter sketch loft edges offsetPlane and continue sketch',
|
||||
async ({ scene, toolbar, editor, page, homePage }) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`sketch001 = startSketchOn('XZ')
|
||||
test('Can enter sketch loft edges offsetPlane and continue sketch', async ({
|
||||
scene,
|
||||
toolbar,
|
||||
editor,
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`sketch001 = startSketchOn('XZ')
|
||||
profile001 = startProfileAt([34, 42.66], sketch001)
|
||||
|> line(end = [102.65, 151.99])
|
||||
|> line(end = [76, -138.66])
|
||||
@ -2868,51 +2882,50 @@ profile002 = startProfileAt([39.43, 172.21], sketch002)
|
||||
|
||||
loft([profile001, profile002])
|
||||
`
|
||||
)
|
||||
})
|
||||
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).not.toBeDisabled()
|
||||
|
||||
const topProfileEdgeClickCoords = { x: 602, y: 185 } as const
|
||||
const [topProfileEdgeClick] = scene.makeMouseHelpers(
|
||||
topProfileEdgeClickCoords.x,
|
||||
topProfileEdgeClickCoords.y
|
||||
)
|
||||
const [sideProfileEdgeClick] = scene.makeMouseHelpers(788, 188)
|
||||
})
|
||||
|
||||
const [rect1Crn1] = scene.makeMouseHelpers(592, 283)
|
||||
const [rect1Crn2] = scene.makeMouseHelpers(797, 268)
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).not.toBeDisabled()
|
||||
|
||||
await scene.moveCameraTo(
|
||||
{ x: 8171, y: -7740, z: 1624 },
|
||||
{ x: 3302, y: -627, z: 2892 }
|
||||
)
|
||||
const topProfileEdgeClickCoords = { x: 602, y: 185 } as const
|
||||
const [topProfileEdgeClick] = scene.makeMouseHelpers(
|
||||
topProfileEdgeClickCoords.x,
|
||||
topProfileEdgeClickCoords.y
|
||||
)
|
||||
const [sideProfileEdgeClick] = scene.makeMouseHelpers(788, 188)
|
||||
|
||||
await topProfileEdgeClick()
|
||||
await page.waitForTimeout(300)
|
||||
await toolbar.editSketch()
|
||||
await page.waitForTimeout(600)
|
||||
await sideProfileEdgeClick()
|
||||
await page.waitForTimeout(300)
|
||||
await scene.expectPixelColor(TEST_COLORS.BLUE, { x: 788, y: 188 }, 15)
|
||||
const [rect1Crn1] = scene.makeMouseHelpers(592, 283)
|
||||
const [rect1Crn2] = scene.makeMouseHelpers(797, 268)
|
||||
|
||||
await toolbar.rectangleBtn.click()
|
||||
await page.waitForTimeout(100)
|
||||
await rect1Crn1()
|
||||
await editor.expectEditor.toContain(
|
||||
`profile003 = startProfileAt([47.76, -17.13], plane001)`
|
||||
)
|
||||
await rect1Crn2()
|
||||
await editor.expectEditor.toContain(
|
||||
`angledLine([0, 106.42], %, $rectangleSegmentA001)`
|
||||
)
|
||||
await page.waitForTimeout(100)
|
||||
}
|
||||
)
|
||||
await scene.moveCameraTo(
|
||||
{ x: 8171, y: -7740, z: 1624 },
|
||||
{ x: 3302, y: -627, z: 2892 }
|
||||
)
|
||||
|
||||
await topProfileEdgeClick()
|
||||
await page.waitForTimeout(300)
|
||||
await toolbar.editSketch()
|
||||
await page.waitForTimeout(600)
|
||||
await sideProfileEdgeClick()
|
||||
await page.waitForTimeout(300)
|
||||
await scene.expectPixelColor(TEST_COLORS.BLUE, { x: 788, y: 188 }, 15)
|
||||
|
||||
await toolbar.rectangleBtn.click()
|
||||
await page.waitForTimeout(100)
|
||||
await rect1Crn1()
|
||||
await editor.expectEditor.toContain(
|
||||
`profile003 = startProfileAt([47.76, -17.13], plane001)`
|
||||
)
|
||||
await rect1Crn2()
|
||||
await editor.expectEditor.toContain(
|
||||
`angledLine([0, 106.42], %, $rectangleSegmentA001)`
|
||||
)
|
||||
await page.waitForTimeout(100)
|
||||
})
|
||||
})
|
||||
|
||||
// Regression test for https://github.com/KittyCAD/modeling-app/issues/4891
|
||||
|
@ -36,10 +36,11 @@ test.setTimeout(60_000)
|
||||
// a snapshot of it feels weird. I'd rather our regular tests fail.
|
||||
// The primary failure is doExport now relies on the filesystem. We can follow
|
||||
// up with another PR if we want this back.
|
||||
test.skip(
|
||||
test(
|
||||
'exports of each format should work',
|
||||
{ tag: ['@snapshot', '@skipWin', '@skipMacos'] },
|
||||
async ({ page, context, scene, cmdBar, tronApp }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
if (!tronApp) {
|
||||
fail()
|
||||
}
|
||||
@ -406,9 +407,6 @@ test(
|
||||
'Draft segments should look right',
|
||||
{ tag: '@snapshot' },
|
||||
async ({ page, scene, toolbar }) => {
|
||||
// FIXME: Skip on macos its being weird.
|
||||
// test.skip(process.platform === 'darwin', 'Skip on macos')
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
const PUR = 400 / 37.5 //pixeltoUnitRatio
|
||||
@ -585,9 +583,6 @@ test(
|
||||
'Draft circle should look right',
|
||||
{ tag: '@snapshot' },
|
||||
async ({ page, context, cmdBar, scene }) => {
|
||||
// FIXME: Skip on macos its being weird.
|
||||
// test.skip(process.platform === 'darwin', 'Skip on macos')
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setViewportSize({ width: 1200, height: 500 })
|
||||
const PUR = 400 / 37.5 //pixeltoUnitRatio
|
||||
@ -952,9 +947,6 @@ test(
|
||||
)
|
||||
|
||||
test.describe('Grid visibility', { tag: '@snapshot' }, () => {
|
||||
// FIXME: Skip on macos its being weird.
|
||||
// test.skip(process.platform === 'darwin', 'Skip on macos')
|
||||
|
||||
test('Grid turned off to on via command bar', async ({
|
||||
page,
|
||||
cmdBar,
|
||||
@ -1097,7 +1089,8 @@ test.describe('Grid visibility', { tag: '@snapshot' }, () => {
|
||||
})
|
||||
})
|
||||
|
||||
test.fixme('theme persists', async ({ page, context }) => {
|
||||
test('theme persists', async ({ page, context }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
await context.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
|
@ -29,5 +29,5 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"kcl_version": "0.2.51"
|
||||
"kcl_version": "0.2.52"
|
||||
}
|
@ -3,11 +3,12 @@ import { commonPoints, getUtils } from './test-utils'
|
||||
import { EngineCommand } from 'lang/std/artifactGraph'
|
||||
import { uuidv4 } from 'lib/utils'
|
||||
|
||||
test.fixme('Test network and connection issues', () => {
|
||||
test.describe('Test network and connection issues', () => {
|
||||
test(
|
||||
'simulate network down and network little widget',
|
||||
{ tag: '@skipLocalEngine' },
|
||||
async ({ page, homePage }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
@ -83,7 +84,8 @@ test.fixme('Test network and connection issues', () => {
|
||||
test(
|
||||
'Engine disconnect & reconnect in sketch mode',
|
||||
{ tag: '@skipLocalEngine' },
|
||||
async ({ page, homePage }) => {
|
||||
async ({ page, homePage, toolbar }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const networkToggle = page.getByTestId('network-toggle')
|
||||
|
||||
const u = await getUtils(page)
|
||||
@ -173,11 +175,7 @@ test.fixme('Test network and connection issues', () => {
|
||||
.click()
|
||||
|
||||
// enter sketch again
|
||||
await u.doAndWaitForCmd(
|
||||
() => page.getByRole('button', { name: 'Edit Sketch' }).click(),
|
||||
'default_camera_get_settings'
|
||||
)
|
||||
await page.waitForTimeout(150)
|
||||
await toolbar.editSketch()
|
||||
|
||||
// Click the line tool
|
||||
await page.getByRole('button', { name: 'line Line', exact: true }).click()
|
||||
@ -201,6 +199,7 @@ test.fixme('Test network and connection issues', () => {
|
||||
type: 'default_camera_get_settings',
|
||||
},
|
||||
}
|
||||
await toolbar.openPane('debug')
|
||||
await u.sendCustomCmd(camCommand)
|
||||
await page.waitForTimeout(100)
|
||||
await u.sendCustomCmd(updateCamCommand)
|
||||
|
@ -179,169 +179,170 @@ test.describe('Testing Camera Movement', { tag: ['@skipWin'] }, () => {
|
||||
})
|
||||
|
||||
// TODO: fix after electron migration is merged
|
||||
test.fixme(
|
||||
'Zoom should be consistent when exiting or entering sketches',
|
||||
async ({ page, homePage }) => {
|
||||
// start new sketch pan and zoom before exiting, when exiting the sketch should stay in the same place
|
||||
// than zoom and pan outside of sketch mode and enter again and it should not change from where it is
|
||||
// than again for sketching
|
||||
test('Zoom should be consistent when exiting or entering sketches', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
// start new sketch pan and zoom before exiting, when exiting the sketch should stay in the same place
|
||||
// than zoom and pan outside of sketch mode and enter again and it should not change from where it is
|
||||
// than again for sketching
|
||||
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
await u.openDebugPanel()
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
await u.openDebugPanel()
|
||||
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).not.toBeDisabled()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).toBeVisible()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).not.toBeDisabled()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Start Sketch' })
|
||||
).toBeVisible()
|
||||
|
||||
// click on "Start Sketch" button
|
||||
await u.clearCommandLogs()
|
||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||
// click on "Start Sketch" button
|
||||
await u.clearCommandLogs()
|
||||
await page.getByRole('button', { name: 'Start Sketch' }).click()
|
||||
await page.waitForTimeout(100)
|
||||
|
||||
// select a plane
|
||||
await page.mouse.click(700, 325)
|
||||
|
||||
let code = `sketch001 = startSketchOn('XY')`
|
||||
await expect(u.codeLocator).toHaveText(code)
|
||||
await u.closeDebugPanel()
|
||||
|
||||
await page.waitForTimeout(500) // TODO detect animation ending, or disable animation
|
||||
|
||||
// move the camera slightly
|
||||
await page.keyboard.down('Shift')
|
||||
await page.mouse.move(700, 300)
|
||||
await page.mouse.down({ button: 'right' })
|
||||
await page.mouse.move(800, 200)
|
||||
await page.mouse.up({ button: 'right' })
|
||||
await page.keyboard.up('Shift')
|
||||
|
||||
let y = 350,
|
||||
x = 948
|
||||
|
||||
await u.canvasLocator.click({ position: { x: 783, y } })
|
||||
code += `\n |> startProfileAt([8.12, -12.98], %)`
|
||||
// await expect(u.codeLocator).toHaveText(code)
|
||||
await u.canvasLocator.click({ position: { x, y } })
|
||||
code += `\n |> line(end = [11.18, 0])`
|
||||
// await expect(u.codeLocator).toHaveText(code)
|
||||
await u.canvasLocator.click({ position: { x, y: 275 } })
|
||||
code += `\n |> line(end = [0, 6.99])`
|
||||
// await expect(u.codeLocator).toHaveText(code)
|
||||
|
||||
// click the line button
|
||||
await page.getByRole('button', { name: 'line Line', exact: true }).click()
|
||||
|
||||
const hoverOverNothing = async () => {
|
||||
// await u.canvasLocator.hover({position: {x: 700, y: 325}})
|
||||
await page.mouse.move(700, 325)
|
||||
await page.waitForTimeout(100)
|
||||
|
||||
// select a plane
|
||||
await page.mouse.click(700, 325)
|
||||
|
||||
let code = `sketch001 = startSketchOn('XY')`
|
||||
await expect(u.codeLocator).toHaveText(code)
|
||||
await u.closeDebugPanel()
|
||||
|
||||
await page.waitForTimeout(500) // TODO detect animation ending, or disable animation
|
||||
|
||||
// move the camera slightly
|
||||
await page.keyboard.down('Shift')
|
||||
await page.mouse.move(700, 300)
|
||||
await page.mouse.down({ button: 'right' })
|
||||
await page.mouse.move(800, 200)
|
||||
await page.mouse.up({ button: 'right' })
|
||||
await page.keyboard.up('Shift')
|
||||
|
||||
let y = 350,
|
||||
x = 948
|
||||
|
||||
await u.canvasLocator.click({ position: { x: 783, y } })
|
||||
code += `\n |> startProfileAt([8.12, -12.98], %)`
|
||||
// await expect(u.codeLocator).toHaveText(code)
|
||||
await u.canvasLocator.click({ position: { x, y } })
|
||||
code += `\n |> line(end = [11.18, 0])`
|
||||
// await expect(u.codeLocator).toHaveText(code)
|
||||
await u.canvasLocator.click({ position: { x, y: 275 } })
|
||||
code += `\n |> line(end = [0, 6.99])`
|
||||
// await expect(u.codeLocator).toHaveText(code)
|
||||
|
||||
// click the line button
|
||||
await page.getByRole('button', { name: 'line Line', exact: true }).click()
|
||||
|
||||
const hoverOverNothing = async () => {
|
||||
// await u.canvasLocator.hover({position: {x: 700, y: 325}})
|
||||
await page.mouse.move(700, 325)
|
||||
await page.waitForTimeout(100)
|
||||
await expect(page.getByTestId('hover-highlight')).not.toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
}
|
||||
|
||||
await expect(page.getByTestId('hover-highlight')).not.toBeVisible()
|
||||
|
||||
await page.waitForTimeout(200)
|
||||
// hover over horizontal line
|
||||
await u.canvasLocator.hover({ position: { x: 800, y } })
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await hoverOverNothing()
|
||||
await page.waitForTimeout(200)
|
||||
// hover over vertical line
|
||||
await u.canvasLocator.hover({ position: { x, y: 325 } })
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
// click exit sketch
|
||||
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
||||
await page.waitForTimeout(400)
|
||||
|
||||
await hoverOverNothing()
|
||||
await page.waitForTimeout(200)
|
||||
// hover over horizontal line
|
||||
await page.mouse.move(858, y, { steps: 5 })
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
// hover over vertical line
|
||||
await page.mouse.move(x, 325)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
// hover over vertical line
|
||||
await page.mouse.move(857, y)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
// now click it
|
||||
await page.mouse.click(857, y)
|
||||
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Edit Sketch' })
|
||||
).toBeVisible()
|
||||
await hoverOverNothing()
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
|
||||
await page.waitForTimeout(400)
|
||||
|
||||
x = 975
|
||||
y = 468
|
||||
|
||||
await page.waitForTimeout(100)
|
||||
await page.mouse.move(x, 419, { steps: 5 })
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
await page.mouse.move(855, y)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await hoverOverNothing()
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await page.mouse.move(x, 419)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
await page.mouse.move(855, y)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
await expect(page.getByTestId('hover-highlight')).not.toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
await expect(page.getByTestId('hover-highlight')).not.toBeVisible()
|
||||
|
||||
await page.waitForTimeout(200)
|
||||
// hover over horizontal line
|
||||
await u.canvasLocator.hover({ position: { x: 800, y } })
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await hoverOverNothing()
|
||||
await page.waitForTimeout(200)
|
||||
// hover over vertical line
|
||||
await u.canvasLocator.hover({ position: { x, y: 325 } })
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
// click exit sketch
|
||||
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
||||
await page.waitForTimeout(400)
|
||||
|
||||
await hoverOverNothing()
|
||||
await page.waitForTimeout(200)
|
||||
// hover over horizontal line
|
||||
await page.mouse.move(858, y, { steps: 5 })
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
// hover over vertical line
|
||||
await page.mouse.move(x, 325)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
// hover over vertical line
|
||||
await page.mouse.move(857, y)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
// now click it
|
||||
await page.mouse.click(857, y)
|
||||
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Edit Sketch' })
|
||||
).toBeVisible()
|
||||
await hoverOverNothing()
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
|
||||
await page.waitForTimeout(400)
|
||||
|
||||
x = 975
|
||||
y = 468
|
||||
|
||||
await page.waitForTimeout(100)
|
||||
await page.mouse.move(x, 419, { steps: 5 })
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
await page.mouse.move(855, y)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
await page.getByRole('button', { name: 'Exit Sketch' }).click()
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await hoverOverNothing()
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await page.mouse.move(x, 419)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
|
||||
await hoverOverNothing()
|
||||
|
||||
await page.mouse.move(855, y)
|
||||
await expect(page.getByTestId('hover-highlight').first()).toBeVisible({
|
||||
timeout: 10_000,
|
||||
})
|
||||
})
|
||||
|
||||
test(`Zoom by scroll should not fire while orbiting`, async ({
|
||||
homePage,
|
||||
|
@ -1005,114 +1005,108 @@ part002 = startSketchOn('XZ')
|
||||
}
|
||||
})
|
||||
|
||||
test.fixme(
|
||||
'Horizontally constrained line remains selected after applying constraint',
|
||||
async ({ page, homePage }) => {
|
||||
test.setTimeout(70_000)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`sketch001 = startSketchOn('XY')
|
||||
test('Horizontally constrained line remains selected after applying constraint', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
test.setTimeout(70_000)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`sketch001 = startSketchOn('XY')
|
||||
|> startProfileAt([-1.05, -1.07], %)
|
||||
|> line(end = [3.79, 2.68], tag = $seg01)
|
||||
|> line(end = [3.13, -2.4])`
|
||||
)
|
||||
)
|
||||
})
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
|
||||
await page.getByText('line(end = [3.79, 2.68], tag = $seg01)').click()
|
||||
await expect(page.getByRole('button', { name: 'Edit Sketch' })).toBeEnabled(
|
||||
{ timeout: 10_000 }
|
||||
)
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
|
||||
// Wait for overlays to populate
|
||||
await page.waitForTimeout(1000)
|
||||
|
||||
await page.waitForTimeout(100)
|
||||
const lineBefore = await u.getSegmentBodyCoords(
|
||||
`[data-overlay-index="1"]`,
|
||||
0
|
||||
)
|
||||
expect(
|
||||
await u.getGreatestPixDiff(lineBefore, TEST_COLORS.WHITE)
|
||||
).toBeLessThan(3)
|
||||
await page.mouse.move(lineBefore.x, lineBefore.y)
|
||||
await page.waitForTimeout(50)
|
||||
await page.mouse.click(lineBefore.x, lineBefore.y)
|
||||
expect(
|
||||
await u.getGreatestPixDiff(lineBefore, TEST_COLORS.BLUE)
|
||||
).toBeLessThan(3)
|
||||
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'Length: open menu',
|
||||
})
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
.click()
|
||||
await page.waitForTimeout(500)
|
||||
await page.getByRole('button', { name: 'Horizontal', exact: true }).click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
await pollEditorLinesSelectedLength(page, 1)
|
||||
let activeLinesContent = await page.locator('.cm-activeLine').all()
|
||||
await expect(activeLinesContent[0]).toHaveText(`|> xLine(length = 3.13)`)
|
||||
|
||||
await page.getByText('line(end = [3.79, 2.68], tag = $seg01)').click()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Edit Sketch' })
|
||||
).toBeEnabled({ timeout: 10_000 })
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
// Wait for code editor to settle.
|
||||
await page.waitForTimeout(2000)
|
||||
|
||||
// Wait for overlays to populate
|
||||
await page.waitForTimeout(1000)
|
||||
// If the overlay-angle is updated the THREE.js scene is in a good state
|
||||
await expect(
|
||||
await page.locator('[data-overlay-index="1"]')
|
||||
).toHaveAttribute('data-overlay-angle', '0')
|
||||
|
||||
await page.waitForTimeout(100)
|
||||
const lineBefore = await u.getSegmentBodyCoords(
|
||||
`[data-overlay-index="1"]`,
|
||||
0
|
||||
)
|
||||
expect(
|
||||
await u.getGreatestPixDiff(lineBefore, TEST_COLORS.WHITE)
|
||||
).toBeLessThan(3)
|
||||
await page.mouse.move(lineBefore.x, lineBefore.y)
|
||||
await page.waitForTimeout(50)
|
||||
await page.mouse.click(lineBefore.x, lineBefore.y)
|
||||
expect(
|
||||
await u.getGreatestPixDiff(lineBefore, TEST_COLORS.BLUE)
|
||||
).toBeLessThan(3)
|
||||
const lineAfter = await u.getSegmentBodyCoords(
|
||||
`[data-overlay-index="1"]`,
|
||||
0
|
||||
)
|
||||
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'Length: open menu',
|
||||
})
|
||||
.click()
|
||||
await page.waitForTimeout(500)
|
||||
await page
|
||||
.getByRole('button', { name: 'Horizontal', exact: true })
|
||||
.click()
|
||||
await page.waitForTimeout(500)
|
||||
const linebb = await u.getBoundingBox('[data-overlay-index="1"]')
|
||||
await page.mouse.move(linebb.x, linebb.y, { steps: 25 })
|
||||
await page.mouse.click(linebb.x, linebb.y)
|
||||
|
||||
await pollEditorLinesSelectedLength(page, 1)
|
||||
let activeLinesContent = await page.locator('.cm-activeLine').all()
|
||||
await expect(activeLinesContent[0]).toHaveText(`|> xLine(length = 3.13)`)
|
||||
await expect
|
||||
.poll(async () => await u.getGreatestPixDiff(lineAfter, TEST_COLORS.BLUE))
|
||||
.toBeLessThan(3)
|
||||
|
||||
// Wait for code editor to settle.
|
||||
await page.waitForTimeout(2000)
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
// If the overlay-angle is updated the THREE.js scene is in a good state
|
||||
await expect(
|
||||
await page.locator('[data-overlay-index="1"]')
|
||||
).toHaveAttribute('data-overlay-angle', '0')
|
||||
// await expect(page.getByRole('button', { name: 'length', exact: true })).toBeVisible()
|
||||
await page.waitForTimeout(200)
|
||||
// await page.getByRole('button', { name: 'length', exact: true }).click()
|
||||
await page.getByTestId('constraint-length').click()
|
||||
|
||||
const lineAfter = await u.getSegmentBodyCoords(
|
||||
`[data-overlay-index="1"]`,
|
||||
0
|
||||
)
|
||||
await page.getByTestId('cmd-bar-arg-value').getByRole('textbox').fill('10')
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'arrow right Continue',
|
||||
})
|
||||
.click()
|
||||
|
||||
const linebb = await u.getBoundingBox('[data-overlay-index="1"]')
|
||||
await page.mouse.move(linebb.x, linebb.y, { steps: 25 })
|
||||
await page.mouse.click(linebb.x, linebb.y)
|
||||
await pollEditorLinesSelectedLength(page, 1)
|
||||
activeLinesContent = await page.locator('.cm-activeLine').all()
|
||||
await expect(activeLinesContent[0]).toHaveText(
|
||||
`|> xLine(length = length001)`
|
||||
)
|
||||
|
||||
await expect
|
||||
.poll(
|
||||
async () => await u.getGreatestPixDiff(lineAfter, TEST_COLORS.BLUE)
|
||||
)
|
||||
.toBeLessThan(3)
|
||||
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
// await expect(page.getByRole('button', { name: 'length', exact: true })).toBeVisible()
|
||||
await page.waitForTimeout(200)
|
||||
// await page.getByRole('button', { name: 'length', exact: true }).click()
|
||||
await page.getByTestId('constraint-length').click()
|
||||
|
||||
await page
|
||||
.getByTestId('cmd-bar-arg-value')
|
||||
.getByRole('textbox')
|
||||
.fill('10')
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'arrow right Continue',
|
||||
})
|
||||
.click()
|
||||
|
||||
await pollEditorLinesSelectedLength(page, 1)
|
||||
activeLinesContent = await page.locator('.cm-activeLine').all()
|
||||
await expect(activeLinesContent[0]).toHaveText(
|
||||
`|> xLine(length = length001)`
|
||||
)
|
||||
|
||||
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(2)
|
||||
}
|
||||
)
|
||||
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(2)
|
||||
})
|
||||
})
|
||||
test.describe('Electron constraint tests', () => {
|
||||
test(
|
||||
|
@ -316,14 +316,11 @@ test.describe(`Testing gizmo, fixture-based`, () => {
|
||||
})
|
||||
|
||||
await test.step(`Gizmo should be disabled when in sketch mode`, async () => {
|
||||
const sketchModeButton = page.getByRole('button', {
|
||||
name: 'Edit sketch',
|
||||
})
|
||||
const exitSketchButton = page.getByRole('button', {
|
||||
name: 'Exit sketch',
|
||||
})
|
||||
|
||||
await sketchModeButton.click()
|
||||
await toolbar.editSketch()
|
||||
await expect(exitSketchButton).toBeVisible()
|
||||
const gizmoPopoverButton = page.getByRole('button', {
|
||||
name: 'view settings',
|
||||
|
@ -2,7 +2,8 @@ import { test, expect } from './zoo-test'
|
||||
import { getUtils } from './test-utils'
|
||||
|
||||
test.describe('Test toggling perspective', () => {
|
||||
test.fixme('via command palette and toggle', async ({ page, homePage }) => {
|
||||
test('via command palette and toggle', async ({ page, homePage }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
|
||||
// Locators and constants
|
||||
|
@ -10,6 +10,7 @@ test.describe('Testing selections', { tag: ['@skipWin'] }, () => {
|
||||
test('Selections work on fresh and edited sketch', async ({
|
||||
page,
|
||||
homePage,
|
||||
toolbar,
|
||||
}) => {
|
||||
// tests mapping works on fresh sketch and edited sketch
|
||||
// tests using hovers which is the same as selections, because if
|
||||
@ -216,12 +217,7 @@ test.describe('Testing selections', { tag: ['@skipWin'] }, () => {
|
||||
await emptySpaceHover()
|
||||
|
||||
// enter sketch again
|
||||
await u.doAndWaitForCmd(
|
||||
() => page.getByRole('button', { name: 'Edit Sketch' }).click(),
|
||||
'default_camera_get_settings'
|
||||
)
|
||||
|
||||
await page.waitForTimeout(450) // wait for animation
|
||||
await toolbar.editSketch()
|
||||
|
||||
await u.openAndClearDebugPanel()
|
||||
await u.sendCustomCmd({
|
||||
@ -452,15 +448,20 @@ profile003 = startProfileAt([40.16, -120.48], sketch006)
|
||||
await page.waitForTimeout(200)
|
||||
await expect(u.codeLocator).not.toContainText(codeToBeDeletedSnippet)
|
||||
})
|
||||
test.fixme(
|
||||
'parent Solid should be select and deletable and uses custom planes to position children',
|
||||
async ({ page, homePage, scene, cmdBar, editor }) => {
|
||||
test.setTimeout(90_000)
|
||||
const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XY')
|
||||
test('parent Solid should be select and deletable and uses custom planes to position children', async ({
|
||||
page,
|
||||
homePage,
|
||||
scene,
|
||||
cmdBar,
|
||||
editor,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
test.setTimeout(90_000)
|
||||
const u = await getUtils(page)
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`part001 = startSketchOn('XY')
|
||||
yo = startProfileAt([4.83, 12.56], part001)
|
||||
|> line(end = [15.1, 2.48])
|
||||
|> line(end = [3.15, -9.85], tag = $seg01)
|
||||
@ -491,35 +492,34 @@ profile001 = startProfileAt([7.49, 9.96], sketch001)
|
||||
|> close()
|
||||
|
||||
`
|
||||
)
|
||||
}, KCL_DEFAULT_LENGTH)
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
const extrudeWall = { x: 575, y: 238 }
|
||||
|
||||
// DELETE with selection on face of parent
|
||||
await page.mouse.click(extrudeWall.x, extrudeWall.y)
|
||||
await page.waitForTimeout(100)
|
||||
await expect(page.locator('.cm-activeLine')).toHaveText(
|
||||
'|> line(end = [-15.17, -4.1])'
|
||||
)
|
||||
await u.openAndClearDebugPanel()
|
||||
await page.keyboard.press('Delete')
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]', 10_000)
|
||||
await page.waitForTimeout(200)
|
||||
}, KCL_DEFAULT_LENGTH)
|
||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||
|
||||
await editor.expectEditor.not.toContain(`yoo = extrude(yo, length = 4)`, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
await editor.expectEditor.toContain(`startSketchOn({plane={origin`, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
await editor.snapshot()
|
||||
}
|
||||
)
|
||||
await homePage.goToModelingScene()
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
const extrudeWall = { x: 575, y: 238 }
|
||||
|
||||
// DELETE with selection on face of parent
|
||||
await page.mouse.click(extrudeWall.x, extrudeWall.y)
|
||||
await page.waitForTimeout(100)
|
||||
await expect(page.locator('.cm-activeLine')).toHaveText(
|
||||
'|> line(end = [-15.17, -4.1])'
|
||||
)
|
||||
await u.openAndClearDebugPanel()
|
||||
await page.keyboard.press('Delete')
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]', 10_000)
|
||||
await page.waitForTimeout(200)
|
||||
|
||||
await editor.expectEditor.not.toContain(`yoo = extrude(yo, length = 4)`, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
await editor.expectEditor.toContain(`startSketchOn({plane={origin`, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
await editor.snapshot()
|
||||
})
|
||||
test('Hovering over 3d features highlights code, clicking puts the cursor in the right place and sends selection id to engine', async ({
|
||||
page,
|
||||
homePage,
|
||||
|
@ -55,91 +55,87 @@ test.describe('Testing settings', () => {
|
||||
})
|
||||
|
||||
// The behavior is actually broken. Parent always takes precedence
|
||||
test.fixme(
|
||||
'Project settings can be set and override user settings',
|
||||
async ({ page, homePage }) => {
|
||||
const u = await getUtils(page)
|
||||
await test.step(`Setup`, async () => {
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await page
|
||||
.getByRole('button', { name: 'Start Sketch' })
|
||||
.waitFor({ state: 'visible' })
|
||||
})
|
||||
|
||||
// Selectors and constants
|
||||
const paneButtonLocator = page.getByTestId('debug-pane-button')
|
||||
const headingLocator = page.getByRole('heading', {
|
||||
name: 'Settings',
|
||||
exact: true,
|
||||
})
|
||||
const inputLocator = page.locator('input[name="app-showDebugPanel"]')
|
||||
|
||||
await test.step('Open settings dialog and set "Show debug panel" to on', async () => {
|
||||
await page.keyboard.press('ControlOrMeta+,')
|
||||
await expect(headingLocator).toBeVisible()
|
||||
|
||||
/** Test to close https://github.com/KittyCAD/modeling-app/issues/2713 */
|
||||
await test.step(`Confirm that this dialog has a solid background`, async () => {
|
||||
await expect
|
||||
.poll(
|
||||
() => u.getGreatestPixDiff({ x: 600, y: 250 }, [28, 28, 28]),
|
||||
{
|
||||
timeout: 1000,
|
||||
message:
|
||||
'Checking for solid background, should not see default plane colors',
|
||||
}
|
||||
)
|
||||
.toBeLessThan(15)
|
||||
})
|
||||
|
||||
await page.locator('#showDebugPanel').getByText('OffOn').click()
|
||||
})
|
||||
|
||||
// Close it and open again with keyboard shortcut, while KCL editor is focused
|
||||
// Put the cursor in the editor
|
||||
await test.step('Open settings with keyboard shortcut', async () => {
|
||||
await page.getByTestId('settings-close-button').click()
|
||||
await page.locator('.cm-content').click()
|
||||
await page.keyboard.press('ControlOrMeta+,')
|
||||
await expect(headingLocator).toBeVisible()
|
||||
})
|
||||
|
||||
// Verify the toast appeared
|
||||
await expect(
|
||||
page.getByText(`Set show debug panel to "false" for this project`)
|
||||
).toBeVisible()
|
||||
await expect(
|
||||
page.getByText(`Set show debug panel to "false" for this project`)
|
||||
).not.toBeVisible()
|
||||
|
||||
// Check that the debug panel button is gone
|
||||
await expect(paneButtonLocator).not.toBeVisible()
|
||||
|
||||
// Check that the user setting was not changed
|
||||
await page.getByRole('radio', { name: 'User' }).click()
|
||||
await expect(inputLocator).toBeChecked()
|
||||
|
||||
// Roll back to default of "off"
|
||||
await await page
|
||||
.getByText(
|
||||
'show debug panelRoll back show debug panelRoll back to match'
|
||||
)
|
||||
.hover()
|
||||
test('Project settings can be set and override user settings', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
await test.step(`Setup`, async () => {
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'Roll back show debug panel',
|
||||
})
|
||||
.click()
|
||||
await expect(inputLocator).not.toBeChecked()
|
||||
.getByRole('button', { name: 'Start Sketch' })
|
||||
.waitFor({ state: 'visible' })
|
||||
})
|
||||
|
||||
// Check that the project setting did not change
|
||||
await page.getByRole('radio', { name: 'Project' }).click()
|
||||
await expect(
|
||||
page.locator('input[name="app-showDebugPanel"]')
|
||||
).not.toBeChecked()
|
||||
}
|
||||
)
|
||||
// Selectors and constants
|
||||
const paneButtonLocator = page.getByTestId('debug-pane-button')
|
||||
const headingLocator = page.getByRole('heading', {
|
||||
name: 'Settings',
|
||||
exact: true,
|
||||
})
|
||||
const inputLocator = page.locator('input[name="app-showDebugPanel"]')
|
||||
|
||||
await test.step('Open settings dialog and set "Show debug panel" to on', async () => {
|
||||
await page.keyboard.press('ControlOrMeta+,')
|
||||
await expect(headingLocator).toBeVisible()
|
||||
|
||||
/** Test to close https://github.com/KittyCAD/modeling-app/issues/2713 */
|
||||
await test.step(`Confirm that this dialog has a solid background`, async () => {
|
||||
await expect
|
||||
.poll(() => u.getGreatestPixDiff({ x: 600, y: 250 }, [28, 28, 28]), {
|
||||
timeout: 1000,
|
||||
message:
|
||||
'Checking for solid background, should not see default plane colors',
|
||||
})
|
||||
.toBeLessThan(15)
|
||||
})
|
||||
|
||||
await page.locator('#showDebugPanel').getByText('OffOn').click()
|
||||
})
|
||||
|
||||
// Close it and open again with keyboard shortcut, while KCL editor is focused
|
||||
// Put the cursor in the editor
|
||||
await test.step('Open settings with keyboard shortcut', async () => {
|
||||
await page.getByTestId('settings-close-button').click()
|
||||
await page.locator('.cm-content').click()
|
||||
await page.keyboard.press('ControlOrMeta+,')
|
||||
await expect(headingLocator).toBeVisible()
|
||||
})
|
||||
|
||||
// Verify the toast appeared
|
||||
await expect(
|
||||
page.getByText(`Set show debug panel to "false" for this project`)
|
||||
).toBeVisible()
|
||||
await expect(
|
||||
page.getByText(`Set show debug panel to "false" for this project`)
|
||||
).not.toBeVisible()
|
||||
|
||||
// Check that the debug panel button is gone
|
||||
await expect(paneButtonLocator).not.toBeVisible()
|
||||
|
||||
// Check that the user setting was not changed
|
||||
await page.getByRole('radio', { name: 'User' }).click()
|
||||
await expect(inputLocator).toBeChecked()
|
||||
|
||||
// Roll back to default of "off"
|
||||
await await page
|
||||
.getByText('show debug panelRoll back show debug panelRoll back to match')
|
||||
.hover()
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'Roll back show debug panel',
|
||||
})
|
||||
.click()
|
||||
await expect(inputLocator).not.toBeChecked()
|
||||
|
||||
// Check that the project setting did not change
|
||||
await page.getByRole('radio', { name: 'Project' }).click()
|
||||
await expect(
|
||||
page.locator('input[name="app-showDebugPanel"]')
|
||||
).not.toBeChecked()
|
||||
})
|
||||
|
||||
test('Keybindings display the correct hotkey for Command Palette', async ({
|
||||
page,
|
||||
@ -175,103 +171,98 @@ test.describe('Testing settings', () => {
|
||||
await expect(hotkey).toHaveText(text)
|
||||
})
|
||||
|
||||
test.fixme(
|
||||
'Project and user settings can be reset',
|
||||
async ({ page, homePage }) => {
|
||||
const u = await getUtils(page)
|
||||
await test.step(`Setup`, async () => {
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
await page.waitForTimeout(1000)
|
||||
})
|
||||
|
||||
// Selectors and constants
|
||||
const projectSettingsTab = page.getByRole('radio', { name: 'Project' })
|
||||
const userSettingsTab = page.getByRole('radio', { name: 'User' })
|
||||
const resetButton = (level: SettingsLevel) =>
|
||||
page.getByRole('button', {
|
||||
name: `Reset ${level}-level settings`,
|
||||
})
|
||||
const themeColorSetting = page.locator('#themeColor').getByRole('slider')
|
||||
const settingValues = {
|
||||
default: '259',
|
||||
user: '120',
|
||||
project: '50',
|
||||
}
|
||||
const resetToast = (level: SettingsLevel) =>
|
||||
page.getByText(`${level}-level settings were reset`)
|
||||
|
||||
await test.step(`Open the settings modal`, async () => {
|
||||
await page.getByRole('link', { name: 'Settings' }).last().click()
|
||||
await expect(
|
||||
page.getByRole('heading', { name: 'Settings', exact: true })
|
||||
).toBeVisible()
|
||||
})
|
||||
|
||||
await test.step('Set up theme color', async () => {
|
||||
// Verify we're looking at the project-level settings,
|
||||
// and it's set to default value
|
||||
await expect(projectSettingsTab).toBeChecked()
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.default)
|
||||
|
||||
// Set project-level value to 50
|
||||
await themeColorSetting.fill(settingValues.project)
|
||||
|
||||
// Set user-level value to 120
|
||||
await userSettingsTab.click()
|
||||
await themeColorSetting.fill(settingValues.user)
|
||||
await projectSettingsTab.click()
|
||||
})
|
||||
|
||||
await test.step('Reset project settings', async () => {
|
||||
// Click the reset settings button.
|
||||
await resetButton('project').click()
|
||||
|
||||
await expect(resetToast('project')).toBeVisible()
|
||||
await expect(resetToast('project')).not.toBeVisible()
|
||||
|
||||
// Verify it is now set to the inherited user value
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.user)
|
||||
|
||||
await test.step(`Check that the user settings did not change`, async () => {
|
||||
await userSettingsTab.click()
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.user)
|
||||
})
|
||||
|
||||
await test.step(`Set project-level again to test the user-level reset`, async () => {
|
||||
await projectSettingsTab.click()
|
||||
await themeColorSetting.fill(settingValues.project)
|
||||
await userSettingsTab.click()
|
||||
})
|
||||
})
|
||||
|
||||
await test.step('Reset user settings', async () => {
|
||||
// Click the reset settings button.
|
||||
await resetButton('user').click()
|
||||
|
||||
await expect(resetToast('user')).toBeVisible()
|
||||
await expect(resetToast('user')).not.toBeVisible()
|
||||
|
||||
// Verify it is now set to the default value
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.default)
|
||||
|
||||
await test.step(`Check that the project settings did not change`, async () => {
|
||||
await projectSettingsTab.click()
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.project)
|
||||
})
|
||||
test('Project and user settings can be reset', async ({ page, homePage }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
await test.step(`Setup`, async () => {
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
await page.waitForTimeout(1000)
|
||||
})
|
||||
|
||||
// Selectors and constants
|
||||
const projectSettingsTab = page.getByRole('radio', { name: 'Project' })
|
||||
const userSettingsTab = page.getByRole('radio', { name: 'User' })
|
||||
const resetButton = (level: SettingsLevel) =>
|
||||
page.getByRole('button', {
|
||||
name: `Reset ${level}-level settings`,
|
||||
})
|
||||
const themeColorSetting = page.locator('#themeColor').getByRole('slider')
|
||||
const settingValues = {
|
||||
default: '259',
|
||||
user: '120',
|
||||
project: '50',
|
||||
}
|
||||
)
|
||||
const resetToast = (level: SettingsLevel) =>
|
||||
page.getByText(`${level}-level settings were reset`)
|
||||
|
||||
test.fixme(
|
||||
await test.step(`Open the settings modal`, async () => {
|
||||
await page.getByRole('link', { name: 'Settings' }).last().click()
|
||||
await expect(
|
||||
page.getByRole('heading', { name: 'Settings', exact: true })
|
||||
).toBeVisible()
|
||||
})
|
||||
|
||||
await test.step('Set up theme color', async () => {
|
||||
// Verify we're looking at the project-level settings,
|
||||
// and it's set to default value
|
||||
await expect(projectSettingsTab).toBeChecked()
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.default)
|
||||
|
||||
// Set project-level value to 50
|
||||
await themeColorSetting.fill(settingValues.project)
|
||||
|
||||
// Set user-level value to 120
|
||||
await userSettingsTab.click()
|
||||
await themeColorSetting.fill(settingValues.user)
|
||||
await projectSettingsTab.click()
|
||||
})
|
||||
|
||||
await test.step('Reset project settings', async () => {
|
||||
// Click the reset settings button.
|
||||
await resetButton('project').click()
|
||||
|
||||
await expect(resetToast('project')).toBeVisible()
|
||||
await expect(resetToast('project')).not.toBeVisible()
|
||||
|
||||
// Verify it is now set to the inherited user value
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.user)
|
||||
|
||||
await test.step(`Check that the user settings did not change`, async () => {
|
||||
await userSettingsTab.click()
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.user)
|
||||
})
|
||||
|
||||
await test.step(`Set project-level again to test the user-level reset`, async () => {
|
||||
await projectSettingsTab.click()
|
||||
await themeColorSetting.fill(settingValues.project)
|
||||
await userSettingsTab.click()
|
||||
})
|
||||
})
|
||||
|
||||
await test.step('Reset user settings', async () => {
|
||||
// Click the reset settings button.
|
||||
await resetButton('user').click()
|
||||
|
||||
await expect(resetToast('user')).toBeVisible()
|
||||
await expect(resetToast('user')).not.toBeVisible()
|
||||
|
||||
// Verify it is now set to the default value
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.default)
|
||||
|
||||
await test.step(`Check that the project settings did not change`, async () => {
|
||||
await projectSettingsTab.click()
|
||||
await expect(themeColorSetting).toHaveValue(settingValues.project)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test(
|
||||
`Project settings override user settings on desktop`,
|
||||
{ tag: ['@electron', '@skipWin'] },
|
||||
async ({ context, page }, testInfo) => {
|
||||
test.skip(
|
||||
process.platform === 'win32',
|
||||
'TODO: remove this skip https://github.com/KittyCAD/modeling-app/issues/3557'
|
||||
)
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const projectName = 'bracket'
|
||||
const { dir: projectDirName } = await context.folderSetupFn(
|
||||
async (dir) => {
|
||||
@ -407,12 +398,13 @@ test.describe('Testing settings', () => {
|
||||
)
|
||||
|
||||
// It was much easier to test the logo color than the background stream color.
|
||||
test.fixme(
|
||||
test(
|
||||
'user settings reload on external change, on project and modeling view',
|
||||
{
|
||||
tag: '@electron',
|
||||
},
|
||||
async ({ context, page, tronApp }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
if (!tronApp) {
|
||||
fail()
|
||||
}
|
||||
@ -466,10 +458,11 @@ test.describe('Testing settings', () => {
|
||||
}
|
||||
)
|
||||
|
||||
test.fixme(
|
||||
test(
|
||||
'project settings reload on external change',
|
||||
{ tag: '@electron' },
|
||||
async ({ context, page }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const { dir: projectDirName } = await context.folderSetupFn(
|
||||
async () => {}
|
||||
)
|
||||
@ -724,7 +717,14 @@ test.describe('Testing settings', () => {
|
||||
})
|
||||
})
|
||||
|
||||
test('Changing theme in sketch mode', async ({ context, page, homePage }) => {
|
||||
test('Changing theme in sketch mode', async ({
|
||||
context,
|
||||
page,
|
||||
homePage,
|
||||
toolbar,
|
||||
scene,
|
||||
cmdBar,
|
||||
}) => {
|
||||
// TODO: fix this test on windows after the electron migration
|
||||
test.skip(process.platform === 'win32', 'Skip on windows')
|
||||
const u = await getUtils(page)
|
||||
@ -744,11 +744,10 @@ test.describe('Testing settings', () => {
|
||||
})
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await u.waitForPageLoad()
|
||||
await scene.settled(cmdBar)
|
||||
await page.waitForTimeout(1000)
|
||||
|
||||
// Selectors and constants
|
||||
const editSketchButton = page.getByRole('button', { name: 'Edit Sketch' })
|
||||
const lineToolButton = page.getByTestId('line')
|
||||
const segmentOverlays = page.getByTestId('segment-overlay')
|
||||
const sketchOriginLocation = { x: 600, y: 250 }
|
||||
@ -757,8 +756,7 @@ test.describe('Testing settings', () => {
|
||||
|
||||
await test.step(`Get into sketch mode`, async () => {
|
||||
await page.mouse.click(700, 200)
|
||||
await expect(editSketchButton).toBeVisible()
|
||||
await editSketchButton.click()
|
||||
await toolbar.editSketch()
|
||||
|
||||
// We use the line tool as a proxy for sketch mode
|
||||
await expect(lineToolButton).toBeVisible()
|
||||
@ -977,63 +975,68 @@ fn cube`
|
||||
/**
|
||||
* This test assumes that the default value of the "highlight edges" setting is "on".
|
||||
*/
|
||||
test.fixme(
|
||||
`Toggle stream settings multiple times`,
|
||||
async ({ page, scene, homePage, context, toolbar, cmdBar }, testInfo) => {
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const projectDir = join(dir, 'project-000')
|
||||
await fsp.mkdir(projectDir, { recursive: true })
|
||||
await fsp.copyFile(
|
||||
executorInputPath('cube.kcl'),
|
||||
join(projectDir, 'main.kcl')
|
||||
)
|
||||
})
|
||||
test(`Toggle stream settings multiple times`, async ({
|
||||
page,
|
||||
scene,
|
||||
homePage,
|
||||
context,
|
||||
toolbar,
|
||||
cmdBar,
|
||||
}, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
await context.folderSetupFn(async (dir) => {
|
||||
const projectDir = join(dir, 'project-000')
|
||||
await fsp.mkdir(projectDir, { recursive: true })
|
||||
await fsp.copyFile(
|
||||
executorInputPath('cube.kcl'),
|
||||
join(projectDir, 'main.kcl')
|
||||
)
|
||||
})
|
||||
|
||||
await test.step(`First snapshot`, async () => {
|
||||
await homePage.openProject('project-000')
|
||||
await toolbar.closePane('code')
|
||||
await expect(toolbar.startSketchBtn).toBeEnabled({ timeout: 20_000 })
|
||||
await scene.clickNoWhere()
|
||||
})
|
||||
await test.step(`First snapshot`, async () => {
|
||||
await homePage.openProject('project-000')
|
||||
await toolbar.closePane('code')
|
||||
await expect(toolbar.startSketchBtn).toBeEnabled({ timeout: 20_000 })
|
||||
await scene.clickNoWhere()
|
||||
})
|
||||
|
||||
const toast = (value: boolean) =>
|
||||
page.getByText(
|
||||
`Set highlight edges to "${String(value)}" as a user default`
|
||||
)
|
||||
|
||||
await test.step(`Toggle highlightEdges off`, async () => {
|
||||
await cmdBar.openCmdBar()
|
||||
await cmdBar.chooseCommand('Settings · modeling · highlight edges')
|
||||
await cmdBar.selectOption({ name: 'off' }).click()
|
||||
const falseToast = toast(false)
|
||||
await expect(falseToast).toBeVisible()
|
||||
await falseToast.waitFor({ state: 'detached' })
|
||||
})
|
||||
|
||||
await expect(scene.streamWrapper).not.toHaveScreenshot(
|
||||
'toggle-settings-initial.png',
|
||||
{
|
||||
maxDiffPixels: 15,
|
||||
mask: [page.getByTestId('model-state-indicator')],
|
||||
}
|
||||
const toast = (value: boolean) =>
|
||||
page.getByText(
|
||||
`Set highlight edges to "${String(value)}" as a user default`
|
||||
)
|
||||
|
||||
await test.step(`Toggle highlightEdges on`, async () => {
|
||||
await cmdBar.openCmdBar()
|
||||
await cmdBar.chooseCommand('Settings · modeling · highlight edges')
|
||||
await cmdBar.selectOption({ name: 'on' }).click()
|
||||
const trueToast = toast(true)
|
||||
await expect(trueToast).toBeVisible()
|
||||
await trueToast.waitFor({ state: 'detached' })
|
||||
})
|
||||
await test.step(`Toggle highlightEdges off`, async () => {
|
||||
await cmdBar.openCmdBar()
|
||||
await cmdBar.chooseCommand('Settings · modeling · highlight edges')
|
||||
await cmdBar.selectOption({ name: 'off' }).click()
|
||||
const falseToast = toast(false)
|
||||
await expect(falseToast).toBeVisible()
|
||||
await falseToast.waitFor({ state: 'detached' })
|
||||
})
|
||||
|
||||
await expect(scene.streamWrapper).toHaveScreenshot(
|
||||
'toggle-settings-initial.png',
|
||||
{
|
||||
maxDiffPixels: 15,
|
||||
mask: [page.getByTestId('model-state-indicator')],
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
await expect(scene.streamWrapper).not.toHaveScreenshot(
|
||||
'toggle-settings-initial.png',
|
||||
{
|
||||
maxDiffPixels: 15,
|
||||
mask: [page.getByTestId('model-state-indicator')],
|
||||
}
|
||||
)
|
||||
|
||||
await test.step(`Toggle highlightEdges on`, async () => {
|
||||
await cmdBar.openCmdBar()
|
||||
await cmdBar.chooseCommand('Settings · modeling · highlight edges')
|
||||
await cmdBar.selectOption({ name: 'on' }).click()
|
||||
const trueToast = toast(true)
|
||||
await expect(trueToast).toBeVisible()
|
||||
await trueToast.waitFor({ state: 'detached' })
|
||||
})
|
||||
|
||||
await expect(scene.streamWrapper).toHaveScreenshot(
|
||||
'toggle-settings-initial.png',
|
||||
{
|
||||
maxDiffPixels: 15,
|
||||
mask: [page.getByTestId('model-state-indicator')],
|
||||
}
|
||||
)
|
||||
})
|
||||
})
|
||||
|
@ -431,10 +431,11 @@ test.describe('Text-to-CAD tests', { tag: ['@skipWin'] }, () => {
|
||||
})
|
||||
|
||||
// This will be fine once greg makes prompt at top of file deterministic
|
||||
test.fixme(
|
||||
test(
|
||||
'can do many at once and get many prompts back, and interact with many',
|
||||
{ tag: ['@skipWin'] },
|
||||
async ({ page, homePage }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
// Let this test run longer since we've seen it timeout.
|
||||
test.setTimeout(180_000)
|
||||
|
||||
@ -619,10 +620,11 @@ async function sendPromptFromCommandBar(page: Page, promptStr: string) {
|
||||
})
|
||||
}
|
||||
|
||||
test.fixme(
|
||||
test(
|
||||
'Text-to-CAD functionality',
|
||||
{ tag: '@electron' },
|
||||
async ({ context, page }, testInfo) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const projectName = 'project-000'
|
||||
const prompt = 'lego 2x4'
|
||||
const textToCadFileName = 'lego-2x4.kcl'
|
||||
|
@ -2,7 +2,8 @@ import { test, expect } from './zoo-test'
|
||||
|
||||
import { doExport, getUtils, makeTemplate } from './test-utils'
|
||||
|
||||
test.fixme('Units menu', async ({ page, homePage }) => {
|
||||
test('Units menu', async ({ page, homePage }) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
@ -263,186 +264,187 @@ test('First escape in tool pops you out of tool, second exits sketch mode', asyn
|
||||
).not.toBeVisible()
|
||||
})
|
||||
|
||||
test.fixme(
|
||||
'Basic default modeling and sketch hotkeys work',
|
||||
async ({ page, homePage }) => {
|
||||
const u = await getUtils(page)
|
||||
test('Basic default modeling and sketch hotkeys work', async ({
|
||||
page,
|
||||
homePage,
|
||||
}) => {
|
||||
test.fixme(process.env.GITHUB_HEAD_REF !== 'all-e2e')
|
||||
const u = await getUtils(page)
|
||||
|
||||
// This test can run long if it takes a little too long to load
|
||||
// the engine.
|
||||
test.setTimeout(90000)
|
||||
// This test has a weird bug on ubuntu
|
||||
// Funny, it's flaking on Windows too :). I think there is just something
|
||||
// actually wrong.
|
||||
test.skip(
|
||||
process.platform === 'linux',
|
||||
'weird playwright bug on ubuntu https://github.com/KittyCAD/modeling-app/issues/2444'
|
||||
)
|
||||
// Load the app with the code pane open
|
||||
// This test can run long if it takes a little too long to load
|
||||
// the engine.
|
||||
test.setTimeout(90000)
|
||||
// This test has a weird bug on ubuntu
|
||||
// Funny, it's flaking on Windows too :). I think there is just something
|
||||
// actually wrong.
|
||||
test.skip(
|
||||
process.platform === 'linux',
|
||||
'weird playwright bug on ubuntu https://github.com/KittyCAD/modeling-app/issues/2444'
|
||||
)
|
||||
// Load the app with the code pane open
|
||||
|
||||
await test.step(`Set up test`, async () => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'store',
|
||||
JSON.stringify({
|
||||
state: {
|
||||
openPanes: ['code'],
|
||||
},
|
||||
version: 0,
|
||||
})
|
||||
)
|
||||
})
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
})
|
||||
|
||||
const codePane = page.locator('.cm-content')
|
||||
const lineButton = page.getByRole('button', {
|
||||
name: 'line Line',
|
||||
exact: true,
|
||||
})
|
||||
const arcButton = page.getByRole('button', {
|
||||
name: 'arc Tangential Arc',
|
||||
exact: true,
|
||||
})
|
||||
const extrudeButton = page.getByRole('button', { name: 'Extrude' })
|
||||
const commandBarComboBox = page.getByPlaceholder('Search commands')
|
||||
const exitSketchButton = page.getByRole('button', { name: 'Exit Sketch' })
|
||||
|
||||
await test.step(`Type code with modeling hotkeys, shouldn't fire`, async () => {
|
||||
await codePane.click()
|
||||
await page.keyboard.type('//')
|
||||
await page.keyboard.press('s')
|
||||
await expect(commandBarComboBox).not.toBeVisible()
|
||||
await page.keyboard.press('e')
|
||||
await expect(commandBarComboBox).not.toBeVisible()
|
||||
await expect(codePane).toHaveText('//se')
|
||||
})
|
||||
|
||||
// Blur focus from the code editor, use the s command to sketch
|
||||
await test.step(`Blur editor focus, enter sketch`, async () => {
|
||||
/**
|
||||
* TODO: There is a bug somewhere that causes this test to fail
|
||||
* if you toggle the codePane closed before your trigger the
|
||||
* start of the sketch.
|
||||
* and a separate Safari-only bug that causes the test to fail
|
||||
* if the pane is open the entire test. The maintainer of CodeMirror
|
||||
* has pinpointed this to the unusual browser behavior:
|
||||
* https://discuss.codemirror.net/t/how-to-force-unfocus-of-the-codemirror-element-in-safari/8095/3
|
||||
*/
|
||||
await blurCodeEditor()
|
||||
await page.waitForTimeout(1000)
|
||||
await page.keyboard.press('s')
|
||||
await page.waitForTimeout(1000)
|
||||
await page.mouse.move(800, 300, { steps: 5 })
|
||||
await page.mouse.click(800, 300)
|
||||
await page.waitForTimeout(1000)
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'true', {
|
||||
timeout: 15_000,
|
||||
})
|
||||
})
|
||||
|
||||
// Use some sketch hotkeys to create a sketch (l and a for now)
|
||||
await test.step(`Incomplete sketch with hotkeys`, async () => {
|
||||
await test.step(`Draw a line`, async () => {
|
||||
await page.mouse.move(700, 200, { steps: 5 })
|
||||
await page.mouse.click(700, 200)
|
||||
await page.mouse.move(800, 250, { steps: 5 })
|
||||
await page.mouse.click(800, 250)
|
||||
})
|
||||
|
||||
await test.step(`Unequip line tool`, async () => {
|
||||
await page.keyboard.press('l')
|
||||
await expect(lineButton).not.toHaveAttribute('aria-pressed', 'true')
|
||||
})
|
||||
|
||||
await test.step(`Draw a tangential arc`, async () => {
|
||||
await page.keyboard.press('a')
|
||||
await expect(arcButton).toHaveAttribute('aria-pressed', 'true', {
|
||||
timeout: 10_000,
|
||||
await test.step(`Set up test`, async () => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'store',
|
||||
JSON.stringify({
|
||||
state: {
|
||||
openPanes: ['code'],
|
||||
},
|
||||
version: 0,
|
||||
})
|
||||
await page.mouse.move(1000, 100, { steps: 5 })
|
||||
await page.mouse.click(1000, 100)
|
||||
})
|
||||
|
||||
await test.step(`Unequip with escape, equip line tool`, async () => {
|
||||
await page.keyboard.press('Escape')
|
||||
await page.keyboard.press('l')
|
||||
await page.waitForTimeout(50)
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'true')
|
||||
})
|
||||
)
|
||||
})
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
await homePage.goToModelingScene()
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
})
|
||||
|
||||
await test.step(`Type code with sketch hotkeys, shouldn't fire`, async () => {
|
||||
// Since there's code now, we have to get to the end of the line
|
||||
await page.locator('.cm-line').last().click()
|
||||
await page.keyboard.down('ControlOrMeta')
|
||||
await page.keyboard.press('ArrowRight')
|
||||
await page.keyboard.up('ControlOrMeta')
|
||||
const codePane = page.locator('.cm-content')
|
||||
const lineButton = page.getByRole('button', {
|
||||
name: 'line Line',
|
||||
exact: true,
|
||||
})
|
||||
const arcButton = page.getByRole('button', {
|
||||
name: 'arc Tangential Arc',
|
||||
exact: true,
|
||||
})
|
||||
const extrudeButton = page.getByRole('button', { name: 'Extrude' })
|
||||
const commandBarComboBox = page.getByPlaceholder('Search commands')
|
||||
const exitSketchButton = page.getByRole('button', { name: 'Exit Sketch' })
|
||||
|
||||
await page.keyboard.press('Enter')
|
||||
await page.keyboard.type('//')
|
||||
await page.keyboard.press('l')
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'true')
|
||||
await page.keyboard.press('a')
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'true')
|
||||
await expect(codePane).toContainText('//la')
|
||||
await page.keyboard.press('Backspace')
|
||||
await page.keyboard.press('Backspace')
|
||||
await page.keyboard.press('Backspace')
|
||||
await page.keyboard.press('Backspace')
|
||||
await test.step(`Type code with modeling hotkeys, shouldn't fire`, async () => {
|
||||
await codePane.click()
|
||||
await page.keyboard.type('//')
|
||||
await page.keyboard.press('s')
|
||||
await expect(commandBarComboBox).not.toBeVisible()
|
||||
await page.keyboard.press('e')
|
||||
await expect(commandBarComboBox).not.toBeVisible()
|
||||
await expect(codePane).toHaveText('//se')
|
||||
})
|
||||
|
||||
// Blur focus from the code editor, use the s command to sketch
|
||||
await test.step(`Blur editor focus, enter sketch`, async () => {
|
||||
/**
|
||||
* TODO: There is a bug somewhere that causes this test to fail
|
||||
* if you toggle the codePane closed before your trigger the
|
||||
* start of the sketch.
|
||||
* and a separate Safari-only bug that causes the test to fail
|
||||
* if the pane is open the entire test. The maintainer of CodeMirror
|
||||
* has pinpointed this to the unusual browser behavior:
|
||||
* https://discuss.codemirror.net/t/how-to-force-unfocus-of-the-codemirror-element-in-safari/8095/3
|
||||
*/
|
||||
await blurCodeEditor()
|
||||
await page.waitForTimeout(1000)
|
||||
await page.keyboard.press('s')
|
||||
await page.waitForTimeout(1000)
|
||||
await page.mouse.move(800, 300, { steps: 5 })
|
||||
await page.mouse.click(800, 300)
|
||||
await page.waitForTimeout(1000)
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'true', {
|
||||
timeout: 15_000,
|
||||
})
|
||||
})
|
||||
|
||||
await test.step(`Close profile and exit sketch`, async () => {
|
||||
await blurCodeEditor()
|
||||
// Use some sketch hotkeys to create a sketch (l and a for now)
|
||||
await test.step(`Incomplete sketch with hotkeys`, async () => {
|
||||
await test.step(`Draw a line`, async () => {
|
||||
await page.mouse.move(700, 200, { steps: 5 })
|
||||
await page.mouse.click(700, 200)
|
||||
// On close it will unequip the line tool.
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'false')
|
||||
await expect(exitSketchButton).toBeEnabled()
|
||||
await page.keyboard.press('Escape')
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Exit Sketch' })
|
||||
).not.toBeVisible()
|
||||
await page.mouse.move(800, 250, { steps: 5 })
|
||||
await page.mouse.click(800, 250)
|
||||
})
|
||||
|
||||
// Extrude with e
|
||||
await test.step(`Extrude the sketch`, async () => {
|
||||
await page.mouse.click(750, 150)
|
||||
await blurCodeEditor()
|
||||
await expect(extrudeButton).toBeEnabled()
|
||||
await page.keyboard.press('e')
|
||||
await page.waitForTimeout(500)
|
||||
await page.mouse.move(800, 200, { steps: 5 })
|
||||
await page.mouse.click(800, 200)
|
||||
await expect(page.getByRole('button', { name: 'Continue' })).toBeVisible({
|
||||
timeout: 20_000,
|
||||
await test.step(`Unequip line tool`, async () => {
|
||||
await page.keyboard.press('l')
|
||||
await expect(lineButton).not.toHaveAttribute('aria-pressed', 'true')
|
||||
})
|
||||
|
||||
await test.step(`Draw a tangential arc`, async () => {
|
||||
await page.keyboard.press('a')
|
||||
await expect(arcButton).toHaveAttribute('aria-pressed', 'true', {
|
||||
timeout: 10_000,
|
||||
})
|
||||
await page.getByRole('button', { name: 'Continue' }).click()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Submit command' })
|
||||
).toBeVisible()
|
||||
await page.getByRole('button', { name: 'Submit command' }).click()
|
||||
await expect(page.locator('.cm-content')).toContainText('extrude(')
|
||||
await page.mouse.move(1000, 100, { steps: 5 })
|
||||
await page.mouse.click(1000, 100)
|
||||
})
|
||||
|
||||
// await codePaneButton.click()
|
||||
// await expect(u.codeLocator).not.toBeVisible()
|
||||
|
||||
/**
|
||||
* work-around: to stop `keyboard.press()` from typing in the editor even when it should be blurred
|
||||
*/
|
||||
async function blurCodeEditor() {
|
||||
await page.getByRole('button', { name: 'Commands' }).click()
|
||||
await page.waitForTimeout(100)
|
||||
await test.step(`Unequip with escape, equip line tool`, async () => {
|
||||
await page.keyboard.press('Escape')
|
||||
await page.waitForTimeout(100)
|
||||
}
|
||||
await page.keyboard.press('l')
|
||||
await page.waitForTimeout(50)
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'true')
|
||||
})
|
||||
})
|
||||
|
||||
await test.step(`Type code with sketch hotkeys, shouldn't fire`, async () => {
|
||||
// Since there's code now, we have to get to the end of the line
|
||||
await page.locator('.cm-line').last().click()
|
||||
await page.keyboard.down('ControlOrMeta')
|
||||
await page.keyboard.press('ArrowRight')
|
||||
await page.keyboard.up('ControlOrMeta')
|
||||
|
||||
await page.keyboard.press('Enter')
|
||||
await page.keyboard.type('//')
|
||||
await page.keyboard.press('l')
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'true')
|
||||
await page.keyboard.press('a')
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'true')
|
||||
await expect(codePane).toContainText('//la')
|
||||
await page.keyboard.press('Backspace')
|
||||
await page.keyboard.press('Backspace')
|
||||
await page.keyboard.press('Backspace')
|
||||
await page.keyboard.press('Backspace')
|
||||
})
|
||||
|
||||
await test.step(`Close profile and exit sketch`, async () => {
|
||||
await blurCodeEditor()
|
||||
await page.mouse.move(700, 200, { steps: 5 })
|
||||
await page.mouse.click(700, 200)
|
||||
// On close it will unequip the line tool.
|
||||
await expect(lineButton).toHaveAttribute('aria-pressed', 'false')
|
||||
await expect(exitSketchButton).toBeEnabled()
|
||||
await page.keyboard.press('Escape')
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Exit Sketch' })
|
||||
).not.toBeVisible()
|
||||
})
|
||||
|
||||
// Extrude with e
|
||||
await test.step(`Extrude the sketch`, async () => {
|
||||
await page.mouse.click(750, 150)
|
||||
await blurCodeEditor()
|
||||
await expect(extrudeButton).toBeEnabled()
|
||||
await page.keyboard.press('e')
|
||||
await page.waitForTimeout(500)
|
||||
await page.mouse.move(800, 200, { steps: 5 })
|
||||
await page.mouse.click(800, 200)
|
||||
await expect(page.getByRole('button', { name: 'Continue' })).toBeVisible({
|
||||
timeout: 20_000,
|
||||
})
|
||||
await page.getByRole('button', { name: 'Continue' }).click()
|
||||
await expect(
|
||||
page.getByRole('button', { name: 'Submit command' })
|
||||
).toBeVisible()
|
||||
await page.getByRole('button', { name: 'Submit command' }).click()
|
||||
await expect(page.locator('.cm-content')).toContainText('extrude(')
|
||||
})
|
||||
|
||||
// await codePaneButton.click()
|
||||
// await expect(u.codeLocator).not.toBeVisible()
|
||||
|
||||
/**
|
||||
* work-around: to stop `keyboard.press()` from typing in the editor even when it should be blurred
|
||||
*/
|
||||
async function blurCodeEditor() {
|
||||
await page.getByRole('button', { name: 'Commands' }).click()
|
||||
await page.waitForTimeout(100)
|
||||
await page.keyboard.press('Escape')
|
||||
await page.waitForTimeout(100)
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
test('Delete key does not navigate back', async ({ page, homePage }) => {
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
@ -20,7 +20,7 @@ statement[@isGroup=Statement] {
|
||||
ImportStatement { kw<"import"> ImportItems ImportFrom String } |
|
||||
FunctionDeclaration { kw<"export">? kw<"fn"> VariableDefinition Equals? ParamList Arrow? Body } |
|
||||
VariableDeclaration { kw<"export">? (kw<"var"> | kw<"let"> | kw<"const">)? VariableDefinition Equals expression } |
|
||||
TypeDeclaration { kw<"export">? kw<"type"> identifier } |
|
||||
TypeDeclaration { kw<"export">? kw<"type"> identifier ("=" type)? } |
|
||||
ReturnStatement { kw<"return"> expression } |
|
||||
ExpressionStatement { expression } |
|
||||
Annotation { AnnotationName AnnotationList? }
|
||||
@ -79,7 +79,7 @@ type[@isGroup=Type] {
|
||||
identifier,
|
||||
"bool" | "number" | "string" | "tag" | "Sketch" | "SketchSurface" | "Solid" | "Plane"
|
||||
> |
|
||||
ArrayType { type !member "[" "]" } |
|
||||
ArrayType { "[" type !member (";" Number "+"?)? "]" } |
|
||||
ObjectType { "{" commaSep<ObjectProperty { PropertyName ":" type }> "}" }
|
||||
}
|
||||
|
||||
@ -137,7 +137,7 @@ commaSep1NoTrailingComma<term> { term ("," term)* }
|
||||
"(" ")"
|
||||
"{" "}"
|
||||
"[" "]"
|
||||
"," "?" ":" "." ".."
|
||||
"," "?" ":" "." ".." ";"
|
||||
}
|
||||
|
||||
@external propSource kclHighlight from "./highlight"
|
||||
|
@ -21,7 +21,7 @@
|
||||
"@codemirror/autocomplete": "6.18.6",
|
||||
"@codemirror/language": "^6.11.0",
|
||||
"@codemirror/state": "^6.5.2",
|
||||
"@lezer/highlight": "^1.2.0",
|
||||
"@lezer/highlight": "^1.2.1",
|
||||
"@ts-stack/markdown": "^1.5.0",
|
||||
"json-rpc-2.0": "^1.7.0",
|
||||
"typescript": "^5.8.2",
|
||||
@ -29,7 +29,7 @@
|
||||
"vscode-uri": "^3.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.13.9",
|
||||
"@types/node": "^22.13.10",
|
||||
"ts-node": "^10.9.2"
|
||||
}
|
||||
}
|
||||
|
@ -70,10 +70,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049"
|
||||
integrity sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==
|
||||
|
||||
"@lezer/highlight@^1.0.0", "@lezer/highlight@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.0.tgz#e5898c3644208b4b589084089dceeea2966f7780"
|
||||
integrity sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==
|
||||
"@lezer/highlight@^1.0.0", "@lezer/highlight@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.1.tgz#596fa8f9aeb58a608be0a563e960c373cbf23f8b"
|
||||
integrity sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==
|
||||
dependencies:
|
||||
"@lezer/common" "^1.0.0"
|
||||
|
||||
@ -116,10 +116,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
|
||||
integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
|
||||
|
||||
"@types/node@^22.13.9":
|
||||
version "22.13.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.9.tgz#5d9a8f7a975a5bd3ef267352deb96fb13ec02eca"
|
||||
integrity sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==
|
||||
"@types/node@^22.13.10":
|
||||
version "22.13.10"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4"
|
||||
integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==
|
||||
dependencies:
|
||||
undici-types "~6.20.0"
|
||||
|
||||
|
@ -69,6 +69,8 @@ When you submit a PR to add or modify KCL samples, images and STEP files will be
|
||||
[](hex-nut/main.kcl)
|
||||
#### [i-beam](i-beam/main.kcl) ([screenshot](screenshots/i-beam.png))
|
||||
[](i-beam/main.kcl)
|
||||
#### [keyboard](keyboard/main.kcl) ([screenshot](screenshots/keyboard.png))
|
||||
[](keyboard/main.kcl)
|
||||
#### [kitt](kitt/main.kcl) ([screenshot](screenshots/kitt.png))
|
||||
[](kitt/main.kcl)
|
||||
#### [lego](lego/main.kcl) ([screenshot](screenshots/lego.png))
|
||||
|
233
public/kcl-samples/keyboard/main.kcl
Normal file
@ -0,0 +1,233 @@
|
||||
// Zoo Keyboard
|
||||
// A custom keyboard with Zoo brand lettering
|
||||
|
||||
// Set Units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// Define constants
|
||||
baseColor = "#0f0f0f"
|
||||
highlightColor1 = "#b0b0b0"
|
||||
highlightColor2 = "#23af93"
|
||||
keyHeight = 0.8
|
||||
keyDepth = 0.1
|
||||
spacing = 0.1
|
||||
row1 = spacing * 3
|
||||
row2 = row1 + keyHeight + spacing
|
||||
row3 = row2 + keyHeight + spacing
|
||||
row4 = row3 + keyHeight + spacing
|
||||
row5 = row4 + keyHeight + spacing
|
||||
row6 = row5 + keyHeight + spacing
|
||||
|
||||
// Sketch the side profile of the keyboard base and extrude to total width
|
||||
sketch001 = startSketchOn('YZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [-0.14, 0.68], tag = $seg01)
|
||||
|> angledLine([7, row6 + 3 * spacing + keyHeight], %, $seg02)
|
||||
|> line(endAbsolute = [5.13, 0], tag = $seg03)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg04)
|
||||
|> close()
|
||||
|> extrude(length = 13.6)
|
||||
|> appearance(color = baseColor)
|
||||
|> fillet(
|
||||
radius = .6,
|
||||
tags = [
|
||||
getOppositeEdge(seg01),
|
||||
getOppositeEdge(seg03),
|
||||
seg01,
|
||||
seg03
|
||||
],
|
||||
)
|
||||
|
||||
// Create a short cylindrical foot at each corner of the keyboard
|
||||
sketch003 = startSketchOn(sketch001, seg04)
|
||||
profile001 = circle(sketch003, center = [0.75, 0.75], radius = 0.4)
|
||||
profile003 = circle(sketch003, center = [4.4, 0.75], radius = 0.4)
|
||||
profile004 = circle(sketch003, center = [0.73, 13.6 - .75], radius = 0.4)
|
||||
profile005 = circle(sketch003, center = [4.4, 13.6 - .75], radius = 0.4)
|
||||
extrude(
|
||||
[
|
||||
profile001,
|
||||
profile003,
|
||||
profile004,
|
||||
profile005
|
||||
],
|
||||
length = .15,
|
||||
)
|
||||
|
||||
// Define the plane to sketch keyboard keys on
|
||||
plane001 = {
|
||||
plane = {
|
||||
origin = [0.0, 0.0, 0.7],
|
||||
xAxis = [1.0, 0.0, 0.0],
|
||||
yAxis = [0.0, 1.0, sin(toRadians(7))],
|
||||
zAxis = [0.0, 0.0, 1.0]
|
||||
}
|
||||
}
|
||||
|
||||
// Create a function to build a key. Parameterize for position, width, height, number of instances, and appearance color.
|
||||
fn keyFn(originStart, keyWidth, keyHeight, repeats, color) {
|
||||
sketch002 = startSketchOn(plane001)
|
||||
profile002 = startProfileAt([originStart[0], originStart[1]], sketch002)
|
||||
|> arc({
|
||||
angleStart = 180,
|
||||
angleEnd = 270,
|
||||
radius = 0.1
|
||||
}, %)
|
||||
|> angledLine([0, keyWidth - .2], %, $rectangleSegmentA001)
|
||||
|> tangentialArc({ radius = 0.1, offset = 90 }, %)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA001) + 90,
|
||||
keyHeight - .2
|
||||
], %, $rectangleSegmentB001)
|
||||
|> tangentialArc({ radius = 0.1, offset = 90 }, %)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA001),
|
||||
-segLen(rectangleSegmentA001)
|
||||
], %, $rectangleSegmentC001)
|
||||
|> tangentialArc({ radius = 0.1, offset = 90 }, %)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001)
|
||||
|> close()
|
||||
|> extrude(length = keyDepth)
|
||||
|> appearance(color = color)
|
||||
// Repeat key when desired. This will default to zero
|
||||
|> patternLinear3d(
|
||||
%,
|
||||
instances = repeats + 1,
|
||||
distance = keyWidth + spacing,
|
||||
axis = [1, 0, 0],
|
||||
)
|
||||
return sketch001
|
||||
}
|
||||
|
||||
// Build the first row of keys
|
||||
keyFn([0.3, row1], 1.1, keyHeight, 0, highlightColor2)
|
||||
keyFn([1.5, row1], 0.8, keyHeight, 2, highlightColor1)
|
||||
keyFn([spacing * 7 + 3.5, row1], 5.2, keyHeight, 0, highlightColor2)
|
||||
keyFn([spacing * 8 + 8.7, row1], 0.8, keyHeight, 0, highlightColor1)
|
||||
keyFn([spacing * 8 + 9.6, row1], 0.8, keyHeight, 0, highlightColor1)
|
||||
keyFn([spacing * 10 + 10.3, row1], 1.1, keyHeight, 0, highlightColor1)
|
||||
keyFn([spacing * 12 + 10.3 + 1, row1], 0.8, keyHeight, 0, highlightColor2)
|
||||
|
||||
// Build the second row of keys
|
||||
keyFn([spacing * 3, row2], 1.7, keyHeight, 0, highlightColor2)
|
||||
keyFn([spacing * 4 + 1.7, row2], 0.8, keyHeight, 9, highlightColor1)
|
||||
keyFn([spacing * 14 + 1.7 + 0.8 * 10, row2], 2.2, keyHeight, 0, highlightColor2)
|
||||
|
||||
// Build the third row of keys
|
||||
keyFn([spacing * 3, row3], 1.1 + .1, keyHeight, 0, highlightColor1)
|
||||
keyFn([spacing * 4 + 1.1 + .1, row3], 0.8, keyHeight, 10, highlightColor1)
|
||||
keyFn([spacing * 3 + 11.1 + .1, row3], 1.4 + .4, keyHeight, 0, highlightColor2)
|
||||
|
||||
// Build the fourth row of keys
|
||||
keyFn([spacing * 3, row4], 0.9, keyHeight, 0, highlightColor1)
|
||||
keyFn([spacing * 4 + 0.9, row4], 0.8, keyHeight, 11, highlightColor1)
|
||||
keyFn([spacing * 3 + 11.8, row4], 1.2, keyHeight, 0, highlightColor1)
|
||||
|
||||
// Build the fifth row of keys
|
||||
keyFn([spacing * 3, row5], 0.8, keyHeight, 12, highlightColor1)
|
||||
keyFn([spacing * 3 + 11.7, row5], 1.3, keyHeight, 0, highlightColor2)
|
||||
|
||||
// Build the sixth row of keys
|
||||
keyFn([spacing * 3, row6], 1.1, keyHeight * .6, 0, highlightColor2)
|
||||
keyFn([spacing * 4 + 1.1, row6], 0.8, keyHeight * .6, 11, highlightColor1)
|
||||
keyFn([spacing * 3 + 12, row6], 1, keyHeight * .6, 0, highlightColor2)
|
||||
|
||||
// Create a plane to sketch ZOO brand letters on
|
||||
plane002 = {
|
||||
plane = {
|
||||
origin = [0.0, 0.0, .81],
|
||||
xAxis = [1.0, 0.0, 0.0],
|
||||
yAxis = [0.0, 1.0, sin(toRadians(7))],
|
||||
zAxis = [0.0, 0.0, 1.0]
|
||||
}
|
||||
}
|
||||
|
||||
// Define a function to draw the ZOO 'Z'
|
||||
fn z(origin, scale, depth) {
|
||||
z = startSketchOn(plane002)
|
||||
|> startProfileAt([
|
||||
0 + origin[0],
|
||||
0.15 * scale + origin[1]
|
||||
], %)
|
||||
|> yLine(length = -0.15 * scale)
|
||||
|> xLine(length = 0.15 * scale)
|
||||
|> angledLineToX({
|
||||
angle = 47.15,
|
||||
to = 0.3 * scale + origin[0]
|
||||
}, %, $seg1)
|
||||
|> yLine(endAbsolute = 0 + origin[1], tag = $seg3)
|
||||
|> xLine(length = 0.63 * scale)
|
||||
|> yLine(length = 0.225 * scale)
|
||||
|> xLine(length = -0.57 * scale)
|
||||
|> angledLineToX({
|
||||
angle = 47.15,
|
||||
to = 0.93 * scale + origin[0]
|
||||
}, %)
|
||||
|> yLine(length = 0.15 * scale)
|
||||
|> xLine(length = -0.15 * scale)
|
||||
|> angledLine({
|
||||
angle = 47.15,
|
||||
length = -segLen(seg1)
|
||||
}, %, $seg2)
|
||||
|> yLine(length = segLen(seg3))
|
||||
|> xLine(endAbsolute = 0 + origin[0])
|
||||
|> yLine(length = -0.225 * scale)
|
||||
|> angledLineThatIntersects({
|
||||
angle = 0,
|
||||
intersectTag = seg2,
|
||||
offset = 0
|
||||
}, %)
|
||||
|> close()
|
||||
|> extrude(length = -depth)
|
||||
|> appearance(color = baseColor)
|
||||
return z
|
||||
}
|
||||
|
||||
// Define a function to draw the ZOO 'O'
|
||||
fn o(origin, scale, depth) {
|
||||
oSketch001 = startSketchOn(plane002)
|
||||
|> startProfileAt([
|
||||
.788 * scale + origin[0],
|
||||
.921 * scale + origin[1]
|
||||
], %)
|
||||
|> arc({
|
||||
angleStart = 47.15 + 6,
|
||||
angleEnd = 47.15 - 6 + 180,
|
||||
radius = .525 * scale
|
||||
}, %)
|
||||
|> angledLine({ angle = 47.15, length = .24 * scale }, %)
|
||||
|> arc({
|
||||
angleStart = 47.15 - 11 + 180,
|
||||
angleEnd = 47.15 + 11,
|
||||
radius = .288 * scale
|
||||
}, %)
|
||||
|> close()
|
||||
|> extrude(length = -depth)
|
||||
|> appearance(color = baseColor)
|
||||
|
||||
o = startSketchOn(plane002)
|
||||
|> startProfileAt([
|
||||
.16 * scale + origin[0],
|
||||
.079 * scale + origin[1]
|
||||
], %)
|
||||
|> arc({
|
||||
angleStart = 47.15 + 6 - 180,
|
||||
angleEnd = 47.15 - 6,
|
||||
radius = .525 * scale
|
||||
}, %)
|
||||
|> angledLine({ angle = 47.15, length = -.24 * scale }, %)
|
||||
|> arc({
|
||||
angleStart = 47.15 - 11,
|
||||
angleEnd = 47.15 + 11 - 180,
|
||||
radius = .288 * scale
|
||||
}, %)
|
||||
|> close()
|
||||
|> extrude(length = -depth)
|
||||
|> appearance(color = baseColor)
|
||||
return o
|
||||
}
|
||||
|
||||
// Place the Z logo on the Z key. Place the O logo on the O and P keys
|
||||
z([2.3, 1.3], .4, 0.03)
|
||||
o([8.71, row4 + .08], 0.4, 0.03)
|
||||
o([8.71 + 0.9, row4 + .08], 0.4, 0.03)
|
@ -5,8 +5,8 @@
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// Define constants
|
||||
lbumps = 10 // number of bumps long
|
||||
wbumps = 5 // number of bumps wide
|
||||
lbumps = 4 // number of bumps long
|
||||
wbumps = 2 // number of bumps wide
|
||||
pitch = 8.0
|
||||
clearance = 0.1
|
||||
bumpDiam = 4.8
|
||||
|
@ -160,6 +160,13 @@
|
||||
"title": "I-beam",
|
||||
"description": "A structural metal beam with an I shaped cross section. Often used in construction"
|
||||
},
|
||||
{
|
||||
"file": "main.kcl",
|
||||
"pathFromProjectDirectoryToFirstFile": "keyboard/main.kcl",
|
||||
"multipleFiles": false,
|
||||
"title": "Zoo Keyboard",
|
||||
"description": "A custom keyboard with Zoo brand lettering"
|
||||
},
|
||||
{
|
||||
"file": "main.kcl",
|
||||
"pathFromProjectDirectoryToFirstFile": "kitt/main.kcl",
|
||||
@ -198,7 +205,7 @@
|
||||
{
|
||||
"file": "main.kcl",
|
||||
"pathFromProjectDirectoryToFirstFile": "pipe-flange-assembly/main.kcl",
|
||||
"multipleFiles": false,
|
||||
"multipleFiles": true,
|
||||
"title": "Pipe and Flange Assembly",
|
||||
"description": "A crucial component in various piping systems, designed to facilitate the connection, disconnection, and access to piping for inspection, cleaning, and modifications. This assembly combines pipes (long cylindrical conduits) with flanges (plate-like fittings) to create a secure yet detachable joint."
|
||||
},
|
||||
|
25
public/kcl-samples/pipe-flange-assembly/1120t74-pipe.kcl
Normal file
@ -0,0 +1,25 @@
|
||||
// 1120t74 Pipe
|
||||
|
||||
// import constants
|
||||
import pipeInnerDiameter, pipeOuterDiameter, pipeLength from "globals.kcl"
|
||||
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// create a function to make the pipe
|
||||
export fn pipe() {
|
||||
|
||||
// create the pipe base
|
||||
pipeBase = startSketchOn('XZ')
|
||||
|> circle(%, center = [0, 0], radius = pipeOuterDiameter / 2)
|
||||
|> extrude(%, length = pipeLength)
|
||||
|
||||
// extrude a hole through the length of the pipe
|
||||
pipe = startSketchOn(pipeBase, 'end')
|
||||
|> circle(center = [0, 0], radius = pipeInnerDiameter / 2)
|
||||
|> extrude(%, length = -pipeLength)
|
||||
|> appearance(color = "#a24ed0")
|
||||
return pipe
|
||||
}
|
||||
|
||||
// https://www.mcmaster.com/1120T74/
|
46
public/kcl-samples/pipe-flange-assembly/68095k348-flange.kcl
Normal file
@ -0,0 +1,46 @@
|
||||
// 68095k348 flange
|
||||
|
||||
// import constants
|
||||
import pipeDiameter, mountingHoleDiameter, mountingHolePlacementDiameter, flangeDiameter, flangeTotalThickness, flangeBackHeight, flangeFrontHeight, flangeBaseThickness, flangeBackDiameter, flangeFrontDiameter from "globals.kcl"
|
||||
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// create a function to create the flange
|
||||
export fn flange() {
|
||||
|
||||
// sketch the mounting hole pattern
|
||||
mountingHoles = startSketchOn("XY")
|
||||
|> circle(%, center = [0, mountingHolePlacementDiameter / 2], radius = mountingHoleDiameter / 2)
|
||||
|> patternCircular2d(
|
||||
%,
|
||||
instances = 4,
|
||||
center = [0, 0],
|
||||
arcDegrees = 360,
|
||||
rotateDuplicates = false,
|
||||
)
|
||||
|
||||
// create the flange base
|
||||
flangeBase = startSketchOn("XY")
|
||||
|> circle(%, center = [0, 0], radius = flangeDiameter / 2)
|
||||
|> hole(mountingHoles, %)
|
||||
|> extrude(%, length = flangeBaseThickness)
|
||||
|
||||
// create both the raised portions on the front and back of the flange base
|
||||
flangeBack = startSketchOn(flangeBase, 'start')
|
||||
|> circle(%, center = [0, 0], radius = flangeBackDiameter / 2)
|
||||
|> extrude(%, length = flangeBackHeight)
|
||||
flangeFront = startSketchOn(flangeBase, 'end')
|
||||
|> circle(%, center = [0, 0], radius = flangeFrontDiameter / 2)
|
||||
|> extrude(%, length = flangeFrontHeight)
|
||||
|
||||
// create the circular cut in the center for the pipe
|
||||
pipeCut = startSketchOn(flangeFront, 'end')
|
||||
|> circle(%, center = [0, 0], radius = pipeDiameter / 2)
|
||||
|> extrude(%, length = -flangeTotalThickness)
|
||||
|> appearance(%, color = "#bab0b0")
|
||||
|
||||
return pipeCut
|
||||
}
|
||||
|
||||
// https://www.mcmaster.com/68095K348/
|
56
public/kcl-samples/pipe-flange-assembly/91251a404-bolt.kcl
Normal file
@ -0,0 +1,56 @@
|
||||
// 91251A404 Socket Head Cap Screw
|
||||
|
||||
// import constants
|
||||
import boltDiameter, boltLength, boltHeadLength, boltHeadDiameter, boltHexDrive, boltHexFlatLength, boltThreadLength from "globals.kcl"
|
||||
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// create a function to make a the bolt
|
||||
export fn bolt() {
|
||||
|
||||
// Create the head of the cap screw
|
||||
boltHead = startSketchOn('XZ')
|
||||
|> circle(center = [0, 0], radius = boltHeadDiameter / 2, tag = $topEdge)
|
||||
|> extrude(length = -boltHeadLength)
|
||||
|> fillet(radius = 0.020, tags = [topEdge, getOppositeEdge(topEdge)])
|
||||
|
||||
// Define the sketch of the hex pattern on the screw head and extrude into the head
|
||||
hexPatternSketch = startSketchOn(boltHead, 'start')
|
||||
|> startProfileAt([
|
||||
boltHexDrive / 2,
|
||||
boltHexFlatLength / 2
|
||||
], %)
|
||||
|> angledLine({
|
||||
angle = 270,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 210,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 150,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 90,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 30,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> close()
|
||||
|> extrude(length = -boltHeadLength * 0.75)
|
||||
|
||||
// create the body of the bolt
|
||||
boltBody = startSketchOn(boltHead, 'end')
|
||||
|> circle(center = [0, 0], radius = boltDiameter / 2, tag = $filletEdge)
|
||||
|> extrude(length = boltLength)
|
||||
|> appearance(color = "#4dd043", metalness = 90, roughness = 90)
|
||||
|
||||
return boltBody
|
||||
}
|
||||
|
||||
// https://www.mcmaster.com/91251a404/
|
26
public/kcl-samples/pipe-flange-assembly/9472k188-gasket.kcl
Normal file
@ -0,0 +1,26 @@
|
||||
// 9472K188 Gasket
|
||||
|
||||
// import constants
|
||||
import gasketOutsideDiameter, gasketInnerDiameter, gasketThickness from "globals.kcl"
|
||||
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// create a function to make the gasket
|
||||
export fn gasket() {
|
||||
|
||||
// create the base of the gasket
|
||||
gasketBase = startSketchOn("XY")
|
||||
|> circle(%, center = [0, 0], radius = gasketOutsideDiameter / 2)
|
||||
|> extrude(%, length = gasketThickness)
|
||||
|
||||
// extrude a circular hole through the gasket base
|
||||
gasket = startSketchOn(gasketBase, 'end')
|
||||
|> circle(%, center = [0, 0], radius = gasketInnerDiameter / 2)
|
||||
|> extrude(%, length = -gasketThickness)
|
||||
|> appearance(%, color = "#d0cb3e")
|
||||
|
||||
return gasket
|
||||
}
|
||||
|
||||
// https://www.mcmaster.com/9472K616/
|
@ -0,0 +1,49 @@
|
||||
// 95479A127 Hex Nut
|
||||
|
||||
// import constants
|
||||
import hexNutDiameter, hexNutFlatToFlat, hexNutThickness, hexNutFlatLength from "globals.kcl"
|
||||
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// create a function to make the hex nut
|
||||
export fn hexNut() {
|
||||
|
||||
// create the base of the hex nut
|
||||
hexNutBase = startSketchOn('XY')
|
||||
|> startProfileAt([
|
||||
hexNutFlatToFlat / 2,
|
||||
hexNutFlatLength / 2
|
||||
], %)
|
||||
|> angledLine({
|
||||
angle = 270,
|
||||
length = hexNutFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 210,
|
||||
length = hexNutFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 150,
|
||||
length = hexNutFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 90,
|
||||
length = hexNutFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 30,
|
||||
length = hexNutFlatLength
|
||||
}, %)
|
||||
|> close()
|
||||
|> extrude(length = hexNutThickness)
|
||||
|
||||
// create the hole in the center of the hex nut
|
||||
hexNut = startSketchOn(hexNutBase, 'end')
|
||||
|> circle(center = [0, 0], radius = hexNutDiameter / 2)
|
||||
|> extrude(%, length = -hexNutThickness)
|
||||
|> appearance(%, color = "#4edfd5")
|
||||
|
||||
return hexNut
|
||||
}
|
||||
// https://www.mcmaster.com/95479A127/
|
26
public/kcl-samples/pipe-flange-assembly/98017a257-washer.kcl
Normal file
@ -0,0 +1,26 @@
|
||||
// 98017A257 Washer
|
||||
|
||||
// import constants
|
||||
import washerInnerDia, washerOuterDia, washerThickness from "globals.kcl"
|
||||
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// create a function to make the washer
|
||||
export fn washer() {
|
||||
|
||||
// create the base of the washer
|
||||
washerBase = startSketchOn('XY')
|
||||
|> circle(center = [0, 0], radius = washerOuterDia / 2)
|
||||
|> extrude(length = washerThickness)
|
||||
|
||||
// extrude a hole through the washer
|
||||
washer = startSketchOn(washerBase, 'end')
|
||||
|> circle(center = [0, 0], radius = washerInnerDia / 2)
|
||||
|> extrude(%, length = -washerThickness)
|
||||
|> appearance(%, color = "#ee4f4f")
|
||||
|
||||
return washer
|
||||
}
|
||||
|
||||
// https://www.mcmaster.com/98017A257/
|
48
public/kcl-samples/pipe-flange-assembly/globals.kcl
Normal file
@ -0,0 +1,48 @@
|
||||
// Globals
|
||||
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// flange (68095K348)
|
||||
export pipeDiameter = 2.440
|
||||
export mountingHoleDiameter = 0.750
|
||||
export mountingHolePlacementDiameter = 4.750
|
||||
|
||||
export flangeDiameter = 6.0
|
||||
export flangeTotalThickness = 1.0
|
||||
export flangeBackHeight = 0.060
|
||||
export flangeFrontHeight = 0.250
|
||||
export flangeBaseThickness = flangeTotalThickness - flangeBackHeight - flangeFrontHeight
|
||||
|
||||
export flangeBackDiameter = 3.620
|
||||
export flangeFrontDiameter = 3.060
|
||||
|
||||
// washer (98017A257)
|
||||
export washerInnerDia = 0.640
|
||||
export washerOuterDia = 1.188
|
||||
export washerThickness = 0.032
|
||||
|
||||
// bolt (91251A404)
|
||||
export boltDiameter = 0.625
|
||||
export boltLength = 2.500
|
||||
export boltHeadLength = boltDiameter
|
||||
export boltHeadDiameter = 0.938
|
||||
export boltHexDrive = 1 / 2
|
||||
export boltHexFlatLength = boltHexDrive / (2 * cos(toRadians(30)))
|
||||
export boltThreadLength = 1.750
|
||||
|
||||
// hex nut (95479A127)
|
||||
export hexNutDiameter = 5 / 8
|
||||
export hexNutFlatToFlat = 15 / 16
|
||||
export hexNutThickness = 35 / 64
|
||||
export hexNutFlatLength = hexNutFlatToFlat / (2 * cos(toRadians(30)))
|
||||
|
||||
// gasket (9472K188)
|
||||
export gasketOutsideDiameter = 4.125
|
||||
export gasketInnerDiameter = 2.375
|
||||
export gasketThickness = 0.031
|
||||
|
||||
// pipe (1120T74)
|
||||
export pipeInnerDiameter = 2.0
|
||||
export pipeOuterDiameter = 2.375
|
||||
export pipeLength = 6
|
@ -1,304 +1,58 @@
|
||||
// Pipe and Flange Assembly
|
||||
// A crucial component in various piping systems, designed to facilitate the connection, disconnection, and access to piping for inspection, cleaning, and modifications. This assembly combines pipes (long cylindrical conduits) with flanges (plate-like fittings) to create a secure yet detachable joint.
|
||||
|
||||
|
||||
// Set units
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// import constants
|
||||
import * from 'globals.kcl'
|
||||
|
||||
// Define constants
|
||||
flangeThickness = .125
|
||||
flangeBaseDia = 2
|
||||
boreHeight = 1
|
||||
flangePipeDia = 1
|
||||
mountingHoleDia = 0.425
|
||||
screwDia = 0.375
|
||||
tol = 0.010
|
||||
hexNutScale = 0.90
|
||||
wallThickness = 0.5
|
||||
screwLength = 1.125
|
||||
washerThickness = 0.0625
|
||||
screwStart = [
|
||||
0,
|
||||
flangeThickness + washerThickness,
|
||||
1.375
|
||||
]
|
||||
capRatio = .190 / .313 // Ratio grabbed from another screw
|
||||
hexRatio = 5 / 32 / .190 // Ratio grabbed from another screw
|
||||
hexStartingAngle = 210 // first angle of hex pattern (degrees)
|
||||
hexInteriorAngle = 120 // degrees
|
||||
hexChangeAngle = 180 - hexInteriorAngle // degrees
|
||||
// import parts
|
||||
import flange from '68095k348-flange.kcl'
|
||||
import gasket from '9472k188-gasket.kcl'
|
||||
import washer from '98017a257-washer.kcl'
|
||||
import bolt from '91251a404-bolt.kcl'
|
||||
import hexNut from '95479a127-hex-nut.kcl'
|
||||
import pipe from '1120t74-pipe.kcl'
|
||||
|
||||
// place flanges
|
||||
flange()
|
||||
flange()
|
||||
|> rotate(axis = [0, 1, 0], angle = 180)
|
||||
|> translate(translate = [0, 0, flangeBackHeight*2 + gasketThickness])
|
||||
|
||||
screwPlane = {
|
||||
plane = {
|
||||
origin = {
|
||||
x = screwStart[0],
|
||||
y = screwStart[1],
|
||||
z = screwStart[2]
|
||||
},
|
||||
xAxis = { x = 1, y = 0, z = 0 },
|
||||
yAxis = { x = 0, y = 0, z = 1 },
|
||||
zAxis = { x = 0, y = 1, z = 0 }
|
||||
}
|
||||
}
|
||||
// place gasket between the flanges
|
||||
gasket()
|
||||
|> translate(translate = [0, 0, -flangeBackHeight - gasketThickness])
|
||||
|
||||
fn capScrew(start, length, dia) {
|
||||
headLength = dia // inch
|
||||
wallToWallLength = hexRatio * dia
|
||||
headDia = dia / capRatio
|
||||
hexWallLength = wallToWallLength / 2 * 1 / cos(toRadians(30)) // inch
|
||||
// place eight washers (four front, four back)
|
||||
washer()
|
||||
|> translate(translate = [
|
||||
mountingHolePlacementDiameter/2,
|
||||
0,
|
||||
flangeBaseThickness
|
||||
])
|
||||
|> patternCircular3d(%, instances = 4, axis = [0, 0, 1], center = [0, 0, 0], arcDegrees = 360, rotateDuplicates = false)
|
||||
|> patternLinear3d(%, instances = 2, distance = -(flangeBaseThickness*2 + flangeBackHeight * 2 + gasketThickness + washerThickness), axis = [0, 0, 1])
|
||||
|
||||
// place four bolts
|
||||
bolt()
|
||||
|> translate(translate = [
|
||||
mountingHolePlacementDiameter/2, 0, flangeBaseThickness + washerThickness
|
||||
])
|
||||
|> rotate(roll = 90, pitch = 0, yaw = 0)
|
||||
|> patternCircular3d(%, instances = 4, axis = [0, 0, 1], center = [0, 0, 0], arcDegrees = 360, rotateDuplicates = false)
|
||||
|
||||
// Length of Cap Head is always equal to diameter
|
||||
capHeadLength = dia
|
||||
// place four hex nuts
|
||||
hexNut()
|
||||
|> translate(translate = [mountingHolePlacementDiameter/2, 0, -(flangeBackHeight * 2 + gasketThickness + flangeBaseThickness + washerThickness + hexNutThickness)])
|
||||
|> patternCircular3d(%, instances = 4, axis = [0, 0, 1], center = [0, 0, 0], arcDegrees = 360, rotateDuplicates = false)
|
||||
|
||||
// Create the head of the cap screw
|
||||
screwHeadSketch = startSketchOn(screwPlane)
|
||||
|> circle(
|
||||
center = [0, 0],
|
||||
radius = headDia / 2
|
||||
)
|
||||
// place both pieces of pipe
|
||||
pipe()
|
||||
|> rotate(%, roll = -90, pitch = 0, yaw = 0)
|
||||
|> translate(%, translate = [0, 0, flangeBaseThickness + flangeFrontHeight - 0.5], global = true)
|
||||
|
||||
// Extrude the screw head sketch
|
||||
screwHead = extrude(screwHeadSketch, length = dia)
|
||||
|
||||
// Define the sketch of the hex pattern on the screw head
|
||||
hexPatternSketch = startSketchOn(screwHead, 'end')
|
||||
|> startProfileAt([
|
||||
-start[0] + wallToWallLength / 2,
|
||||
start[2]
|
||||
], %)
|
||||
|> yLine(length = -hexWallLength / 2)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle,
|
||||
length = hexWallLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle - hexChangeAngle,
|
||||
length = hexWallLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle - (2 * hexChangeAngle),
|
||||
length = hexWallLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle - (3 * hexChangeAngle),
|
||||
length = hexWallLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle - (4 * hexChangeAngle),
|
||||
length = hexWallLength
|
||||
}, %)
|
||||
|> close()
|
||||
hexPattern = extrude(hexPatternSketch, length = -headLength * 0.75)
|
||||
|
||||
return hexPattern
|
||||
}
|
||||
|
||||
workingPlane = {
|
||||
plane = {
|
||||
origin = { x = 0, y = flangeThickness, z = 0 },
|
||||
xAxis = { x = 0, y = 0, z = 1 },
|
||||
yAxis = { x = 1, y = 0, z = 0 },
|
||||
zAxis = { x = 0, y = 1, z = 0 }
|
||||
}
|
||||
}
|
||||
|
||||
// Washer function
|
||||
fn washer(plane, start, thk, innerDia, outerDia) {
|
||||
washerSketch = startSketchOn(plane)
|
||||
|> circle(
|
||||
center = [start[0], start[1]],
|
||||
radius = outerDia / 2
|
||||
)
|
||||
|> hole(circle(
|
||||
center = [start[0], start[1]],
|
||||
radius = innerDia / 2
|
||||
), %)
|
||||
|> extrude(length = thk)
|
||||
return washerSketch
|
||||
}
|
||||
|
||||
// Hex nut function
|
||||
fn hexNut(start, thk, innerDia) {
|
||||
hexNutSketch = startSketchOn({
|
||||
plane = {
|
||||
origin = {
|
||||
x = start[0],
|
||||
y = -wallThickness - washerThickness,
|
||||
z = start[2]
|
||||
},
|
||||
xAxis = { x = 1, y = 0, z = 0 },
|
||||
yAxis = { x = 0, y = 0, z = 1 },
|
||||
zAxis = { x = 0, y = 1, z = 0 }
|
||||
}
|
||||
})
|
||||
|> startProfileAt([0 + innerDia * hexNutScale, 0], %)
|
||||
|> angledLine({
|
||||
angle = 240,
|
||||
length = innerDia * hexNutScale
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 180,
|
||||
length = innerDia * hexNutScale
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 120,
|
||||
length = innerDia * hexNutScale
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = 60,
|
||||
length = innerDia * hexNutScale
|
||||
}, %)
|
||||
|> angledLine({ angle = 0, length = innerDia * .90 }, %)
|
||||
|> close()
|
||||
|> hole(circle(
|
||||
center = [0, 0],
|
||||
radius = innerDia / 2
|
||||
), %)
|
||||
|> extrude(length = -thk)
|
||||
return hexNutSketch
|
||||
}
|
||||
|
||||
// Mounting holes pattern
|
||||
mountingHolePattern = startSketchOn('XZ')
|
||||
|> circle(
|
||||
center = [screwStart[0], screwStart[2]],
|
||||
radius = screwDia / 2 + tol
|
||||
)
|
||||
|> patternCircular2d(
|
||||
arcDegrees = 360,
|
||||
center = [0, 0],
|
||||
instances = 7,
|
||||
rotateDuplicates = true
|
||||
)
|
||||
|
||||
// Sketch and revolve the pipe
|
||||
pipe = startSketchOn('XY')
|
||||
|> startProfileAt([flangePipeDia / 2 - tol, 0], %)
|
||||
|> line(end = [0, -2])
|
||||
|> angledLine({ angle = -60, length = .5 }, %)
|
||||
|> line(end = [0, -1])
|
||||
|> line(end = [-flangeThickness, 0])
|
||||
|> line(end = [0, 1])
|
||||
|> angledLine({ angle = -240, length = .5 }, %)
|
||||
|> line(end = [0, 5])
|
||||
|> angledLine({ angle = 60, length = .5 }, %)
|
||||
|> line(end = [0, 1])
|
||||
|> line(end = [flangeThickness, 0])
|
||||
|> line(end = [0, -1])
|
||||
|> angledLine({ angle = 240, length = .5 }, %)
|
||||
|> close()
|
||||
|> revolve(axis = 'y')
|
||||
|> appearance(color = "#7b79d7")
|
||||
|
||||
// Sketch and extrude the wall
|
||||
wall = startSketchOn('XZ')
|
||||
|> startProfileAt([-4, -4], %)
|
||||
|> line(end = [0, 8])
|
||||
|> line(end = [8, 0])
|
||||
|> line(end = [0, -8])
|
||||
|> close()
|
||||
|> hole(mountingHolePattern, %)
|
||||
|> hole(circle(
|
||||
center = [0, 0],
|
||||
radius = flangePipeDia / 2
|
||||
), %)
|
||||
|> extrude(length = wallThickness)
|
||||
|> appearance(color = "#c7aa8f")
|
||||
|
||||
// Sketch and revolve the flange
|
||||
flangeBase = startSketchOn('XZ')
|
||||
|> circle(
|
||||
center = [0, 0],
|
||||
radius = flangeBaseDia
|
||||
)
|
||||
|> hole(mountingHolePattern, %)
|
||||
|> hole(circle(
|
||||
center = [0, 0],
|
||||
radius = flangePipeDia / 2
|
||||
), %)
|
||||
|> extrude(length = -flangeThickness)
|
||||
|> appearance(color = "#9b9797")
|
||||
|
||||
// Create the washer and pattern around the flange
|
||||
washer(workingPlane, [screwStart[2], screwStart[0]], 0.0625, screwDia + tol, 0.625)
|
||||
|> patternCircular3d(
|
||||
axis = [0, 1, 0],
|
||||
center = [0, 0, 0],
|
||||
instances = 7,
|
||||
arcDegrees = 360,
|
||||
rotateDuplicates = true
|
||||
)
|
||||
|> appearance(color = "#d8da5d")
|
||||
|
||||
// Create the cap screw and pattern around the flange
|
||||
capScrew([
|
||||
0,
|
||||
flangeThickness + washerThickness,
|
||||
1.375
|
||||
], screwLength, screwDia)
|
||||
|> patternCircular3d(
|
||||
axis = [0, 1, 0],
|
||||
center = [0, 0, 0],
|
||||
instances = 7,
|
||||
arcDegrees = 360,
|
||||
rotateDuplicates = true
|
||||
)
|
||||
|> appearance(color = "#4cd411")
|
||||
|
||||
screwBodySketch = startSketchOn(screwPlane)
|
||||
|> circle(
|
||||
center = [0, 0],
|
||||
radius = screwDia / 2
|
||||
)
|
||||
screwBody = extrude(screwBodySketch, length = -screwLength)
|
||||
|> patternCircular3d(
|
||||
axis = [0, 1, 0],
|
||||
center = [0, 0, 0],
|
||||
instances = 7,
|
||||
arcDegrees = 360,
|
||||
rotateDuplicates = true
|
||||
)
|
||||
|> appearance(color = "#4cd411")
|
||||
|
||||
// Create a plane for the washers on the back side of the wall
|
||||
backSideWasherPlane = {
|
||||
plane = {
|
||||
origin = {
|
||||
x = 0,
|
||||
y = -wallThickness - washerThickness,
|
||||
z = 0
|
||||
},
|
||||
xAxis = { x = 0, y = 0, z = 1 },
|
||||
yAxis = { x = 1, y = 0, z = 0 },
|
||||
zAxis = { x = 0, y = 1, z = 0 }
|
||||
}
|
||||
}
|
||||
|
||||
// Create the washers on the backside of the wall
|
||||
washer(backSideWasherPlane, [screwStart[2], screwStart[0]], 0.0625, screwDia + tol, 0.625)
|
||||
|> patternCircular3d(
|
||||
axis = [0, 1, 0],
|
||||
center = [0, 0, 0],
|
||||
instances = 7,
|
||||
arcDegrees = 360,
|
||||
rotateDuplicates = true
|
||||
)
|
||||
|> appearance(color = "#e8ec09")
|
||||
|
||||
// Create the hex nut and pattern around the flange
|
||||
hexNut([
|
||||
screwStart[0],
|
||||
screwStart[1],
|
||||
screwStart[2]
|
||||
], .25, screwDia + tol)
|
||||
|> patternCircular3d(
|
||||
axis = [0, 1, 0],
|
||||
center = [0, 0, 0],
|
||||
instances = 7,
|
||||
arcDegrees = 360,
|
||||
rotateDuplicates = true
|
||||
)
|
||||
|> appearance(color = "#bc3434")
|
||||
pipe()
|
||||
|> rotate(%, roll = 90, pitch = 0, yaw = 0)
|
||||
|> translate(%, translate = [0, 0, -(flangeBackHeight * 2 + gasketThickness + flangeBaseThickness + flangeFrontHeight - 0.5)], global = true)
|
@ -0,0 +1,269 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION (( 'STEP AP203' ),
|
||||
'1' );
|
||||
FILE_NAME ('1120T74_Standard-Wall Steel Unthreaded Pipe Nipple.STEP',
|
||||
'2021-07-09T13:29:34',
|
||||
( 'Administrator' ),
|
||||
( 'Managed by Terraform' ),
|
||||
'SwSTEP 2.0',
|
||||
'SolidWorks 2017',
|
||||
'' );
|
||||
FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' ));
|
||||
ENDSEC;
|
||||
|
||||
DATA;
|
||||
#1 = EDGE_LOOP ( 'NONE', ( #200, #99 ) ) ;
|
||||
#2 = CALENDAR_DATE ( 2021, 9, 7 ) ;
|
||||
#3 = AXIS2_PLACEMENT_3D ( 'NONE', #146, #228, #22 ) ;
|
||||
#4 = CALENDAR_DATE ( 2021, 9, 7 ) ;
|
||||
#5 = VECTOR ( 'NONE', #122, 39.37007874015748100 ) ;
|
||||
#6 = APPROVAL_PERSON_ORGANIZATION ( #191, #189, #47 ) ;
|
||||
#7 = MANIFOLD_SOLID_BREP ( 'Extrude1', #114 ) ;
|
||||
#8 = CALENDAR_DATE ( 2021, 9, 7 ) ;
|
||||
#9 = ORIENTED_EDGE ( 'NONE', *, *, #48, .F. ) ;
|
||||
#10 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.000000000000000400 ) ) ;
|
||||
#11 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#12 = AXIS2_PLACEMENT_3D ( 'NONE', #162, #203, #157 ) ;
|
||||
#13 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#14 = ADVANCED_FACE ( 'NONE', ( #107, #218 ), #177, .T. ) ;
|
||||
#15 = CIRCLE ( 'NONE', #193, 1.187500000000000000 ) ;
|
||||
#16 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ;
|
||||
#17 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#18 = AXIS2_PLACEMENT_3D ( 'NONE', #10, #245, #31 ) ;
|
||||
#19 = LINE ( 'NONE', #137, #80 ) ;
|
||||
#20 = CC_DESIGN_APPROVAL ( #189, ( #105 ) ) ;
|
||||
#21 = ADVANCED_FACE ( 'NONE', ( #142, #60 ), #74, .F. ) ;
|
||||
#22 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#23 = ORIENTED_EDGE ( 'NONE', *, *, #185, .T. ) ;
|
||||
#24 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #241, #211, ( #198 ) ) ;
|
||||
#25 = APPROVAL_DATE_TIME ( #135, #90 ) ;
|
||||
#26 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#27 = ORIENTED_EDGE ( 'NONE', *, *, #28, .T. ) ;
|
||||
#28 = EDGE_CURVE ( 'NONE', #237, #240, #110, .T. ) ;
|
||||
#29 = EDGE_LOOP ( 'NONE', ( #9, #222 ) ) ;
|
||||
#30 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#31 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#32 = CARTESIAN_POINT ( 'NONE', ( -1.187500000000000000, 0.0000000000000000000, -3.000000000000000400 ) ) ;
|
||||
#33 = PERSON_AND_ORGANIZATION ( #83, #100 ) ;
|
||||
#34 = VERTEX_POINT ( 'NONE', #201 ) ;
|
||||
#35 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#36 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
|
||||
#37 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#38 = PERSON_AND_ORGANIZATION ( #83, #100 ) ;
|
||||
#39 = EDGE_CURVE ( 'NONE', #112, #34, #43, .T. ) ;
|
||||
#40 = EDGE_CURVE ( 'NONE', #72, #121, #187, .T. ) ;
|
||||
#41 = LENGTH_MEASURE_WITH_UNIT ( LENGTH_MEASURE( 0.02539999999999999900 ), #165 );
|
||||
#42 = APPROVAL_DATE_TIME ( #87, #235 ) ;
|
||||
#43 = CIRCLE ( 'NONE', #156, 1.187500000000000000 ) ;
|
||||
#44 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#45 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#46 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#47 = APPROVAL_ROLE ( '' ) ;
|
||||
#48 = EDGE_CURVE ( 'NONE', #202, #71, #15, .T. ) ;
|
||||
#49 = LOCAL_TIME ( 8, 29, 34.00000000000000000, #173 ) ;
|
||||
#50 = EDGE_LOOP ( 'NONE', ( #54, #247, #232, #126 ) ) ;
|
||||
#51 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.000000000000000400 ) ) ;
|
||||
#52 = APPROVAL_ROLE ( '' ) ;
|
||||
#53 = CALENDAR_DATE ( 2021, 9, 7 ) ;
|
||||
#54 = ORIENTED_EDGE ( 'NONE', *, *, #229, .F. ) ;
|
||||
#55 = PERSON_AND_ORGANIZATION ( #83, #100 ) ;
|
||||
#56 = ORIENTED_EDGE ( 'NONE', *, *, #152, .T. ) ;
|
||||
#57 = FACE_OUTER_BOUND ( 'NONE', #220, .T. ) ;
|
||||
#58 = PERSON_AND_ORGANIZATION ( #83, #100 ) ;
|
||||
#59 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#60 = FACE_BOUND ( 'NONE', #153, .T. ) ;
|
||||
#61 = AXIS2_PLACEMENT_3D ( 'NONE', #13, #183, #35 ) ;
|
||||
#62 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#63 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#64 = LOCAL_TIME ( 8, 29, 34.00000000000000000, #115 ) ;
|
||||
#65 = ORIENTED_EDGE ( 'NONE', *, *, #48, .T. ) ;
|
||||
#66 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ;
|
||||
#67 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
|
||||
#68 = DIMENSIONAL_EXPONENTS ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ;
|
||||
#69 = LOCAL_TIME ( 8, 29, 34.00000000000000000, #120 ) ;
|
||||
#70 = ORIENTED_EDGE ( 'NONE', *, *, #88, .T. ) ;
|
||||
#71 = VERTEX_POINT ( 'NONE', #117 ) ;
|
||||
#72 = VERTEX_POINT ( 'NONE', #160 ) ;
|
||||
#73 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#74 = PLANE ( 'NONE', #119 ) ;
|
||||
#75 = CYLINDRICAL_SURFACE ( 'NONE', #86, 1.033499999999999900 ) ;
|
||||
#76 = CC_DESIGN_APPROVAL ( #235, ( #198 ) ) ;
|
||||
#77 = CARTESIAN_POINT ( 'NONE', ( -1.187500000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#78 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#79 = AXIS2_PLACEMENT_3D ( 'NONE', #252, #37, #124 ) ;
|
||||
#80 = VECTOR ( 'NONE', #44, 39.37007874015748100 ) ;
|
||||
#81 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#82 = PERSON_AND_ORGANIZATION ( #83, #100 ) ;
|
||||
#83 = PERSON ( 'UNSPECIFIED', 'UNSPECIFIED', 'UNSPECIFIED', ('UNSPECIFIED'), ('UNSPECIFIED'), ('UNSPECIFIED') ) ;
|
||||
#84 = ORIENTED_EDGE ( 'NONE', *, *, #215, .T. ) ;
|
||||
#85 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ;
|
||||
#86 = AXIS2_PLACEMENT_3D ( 'NONE', #46, #63, #78 ) ;
|
||||
#87 = DATE_AND_TIME ( #140, #64 ) ;
|
||||
#88 = EDGE_CURVE ( 'NONE', #72, #240, #158, .T. ) ;
|
||||
#89 = VECTOR ( 'NONE', #138, 39.37007874015748100 ) ;
|
||||
#90 = APPROVAL ( #171, 'UNSPECIFIED' ) ;
|
||||
#91 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#92 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.000000000000000400 ) ) ;
|
||||
#93 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#94 = CIRCLE ( 'NONE', #18, 1.187500000000000000 ) ;
|
||||
#95 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#96 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #105, #154 ) ;
|
||||
#97 = CARTESIAN_POINT ( 'NONE', ( -1.033499999999999900, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#98 = AXIS2_PLACEMENT_3D ( 'NONE', #141, #30, #181 ) ;
|
||||
#99 = ORIENTED_EDGE ( 'NONE', *, *, #229, .T. ) ;
|
||||
#100 = ORGANIZATION ( 'UNSPECIFIED', 'UNSPECIFIED', '' ) ;
|
||||
#101 = CARTESIAN_POINT ( 'NONE', ( 1.033499999999999900, 1.265672466918789100E-016, 3.000000000000000400 ) ) ;
|
||||
#102 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.000000000000000400 ) ) ;
|
||||
#103 = CC_DESIGN_SECURITY_CLASSIFICATION ( #198, ( #105 ) ) ;
|
||||
#104 = CYLINDRICAL_SURFACE ( 'NONE', #3, 1.033499999999999900 ) ;
|
||||
#105 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #230, .NOT_KNOWN. ) ;
|
||||
#106 = DATE_TIME_ROLE ( 'creation_date' ) ;
|
||||
#107 = FACE_OUTER_BOUND ( 'NONE', #1, .T. ) ;
|
||||
#108 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #207, #67, ( #105 ) ) ;
|
||||
#109 = LINE ( 'NONE', #101, #155 ) ;
|
||||
#110 = CIRCLE ( 'NONE', #217, 1.033499999999999900 ) ;
|
||||
#111 = EDGE_CURVE ( 'NONE', #34, #71, #19, .T. ) ;
|
||||
#112 = VERTEX_POINT ( 'NONE', #77 ) ;
|
||||
#113 = AXIS2_PLACEMENT_3D ( 'NONE', #81, #17, #233 ) ;
|
||||
#114 = CLOSED_SHELL ( 'NONE', ( #248, #148, #14, #21, #167, #170 ) ) ;
|
||||
#115 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#116 = ORIENTED_EDGE ( 'NONE', *, *, #185, .F. ) ;
|
||||
#117 = CARTESIAN_POINT ( 'NONE', ( 1.187500000000000000, 1.454268073987481900E-016, -3.000000000000000400 ) ) ;
|
||||
#118 = CYLINDRICAL_SURFACE ( 'NONE', #98, 1.187500000000000000 ) ;
|
||||
#119 = AXIS2_PLACEMENT_3D ( 'NONE', #92, #246, #62 ) ;
|
||||
#120 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#121 = VERTEX_POINT ( 'NONE', #179 ) ;
|
||||
#122 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#123 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#124 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#125 = FACE_OUTER_BOUND ( 'NONE', #163, .T. ) ;
|
||||
#126 = ORIENTED_EDGE ( 'NONE', *, *, #152, .F. ) ;
|
||||
#127 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #230 ) ) ;
|
||||
#128 = CYLINDRICAL_SURFACE ( 'NONE', #150, 1.187500000000000000 ) ;
|
||||
#129 = ORIENTED_EDGE ( 'NONE', *, *, #28, .F. ) ;
|
||||
#130 = APPROVAL_PERSON_ORGANIZATION ( #82, #235, #234 ) ;
|
||||
#131 = CIRCLE ( 'NONE', #161, 1.033499999999999900 ) ;
|
||||
#132 = CC_DESIGN_APPROVAL ( #90, ( #96 ) ) ;
|
||||
#133 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #147, #231, ( #230 ) ) ;
|
||||
#134 = EDGE_CURVE ( 'NONE', #71, #202, #94, .T. ) ;
|
||||
#135 = DATE_AND_TIME ( #8, #69 ) ;
|
||||
#136 = ORIENTED_EDGE ( 'NONE', *, *, #88, .F. ) ;
|
||||
#137 = CARTESIAN_POINT ( 'NONE', ( 1.187500000000000000, 1.454268073987481900E-016, 3.000000000000000400 ) ) ;
|
||||
#138 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#139 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#140 = CALENDAR_DATE ( 2021, 9, 7 ) ;
|
||||
#141 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#142 = FACE_OUTER_BOUND ( 'NONE', #29, .T. ) ;
|
||||
#143 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
|
||||
#144 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #169 ) ;
|
||||
#145 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) );
|
||||
#146 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#147 = PERSON_AND_ORGANIZATION ( #83, #100 ) ;
|
||||
#148 = ADVANCED_FACE ( 'NONE', ( #174 ), #118, .T. ) ;
|
||||
#149 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #55, #143, ( #96 ) ) ;
|
||||
#150 = AXIS2_PLACEMENT_3D ( 'NONE', #59, #159, #45 ) ;
|
||||
#151 = ORIENTED_EDGE ( 'NONE', *, *, #199, .T. ) ;
|
||||
#152 = EDGE_CURVE ( 'NONE', #112, #202, #208, .T. ) ;
|
||||
#153 = EDGE_LOOP ( 'NONE', ( #151, #27 ) ) ;
|
||||
#154 = DESIGN_CONTEXT ( 'detailed design', #36, 'design' ) ;
|
||||
#155 = VECTOR ( 'NONE', #188, 39.37007874015748100 ) ;
|
||||
#156 = AXIS2_PLACEMENT_3D ( 'NONE', #225, #139, #223 ) ;
|
||||
#157 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#158 = LINE ( 'NONE', #97, #5 ) ;
|
||||
#159 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#160 = CARTESIAN_POINT ( 'NONE', ( -1.033499999999999900, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#161 = AXIS2_PLACEMENT_3D ( 'NONE', #51, #186, #190 ) ;
|
||||
#162 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#163 = EDGE_LOOP ( 'NONE', ( #176, #23, #70, #129 ) ) ;
|
||||
#164 =( CONVERSION_BASED_UNIT ( 'INCH', #41 ) LENGTH_UNIT ( ) NAMED_UNIT ( #68 ) );
|
||||
#165 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( $, .METRE. ) );
|
||||
#166 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #36 ) ;
|
||||
#167 = ADVANCED_FACE ( 'NONE', ( #251 ), #128, .T. ) ;
|
||||
#168 = CIRCLE ( 'NONE', #61, 1.033499999999999900 ) ;
|
||||
#169 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
|
||||
#170 = ADVANCED_FACE ( 'NONE', ( #125 ), #75, .F. ) ;
|
||||
#171 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#172 = AXIS2_PLACEMENT_3D ( 'NONE', #26, #73, #93 ) ;
|
||||
#173 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#174 = FACE_OUTER_BOUND ( 'NONE', #50, .T. ) ;
|
||||
#175 = LOCAL_TIME ( 8, 29, 34.00000000000000000, #204 ) ;
|
||||
#176 = ORIENTED_EDGE ( 'NONE', *, *, #215, .F. ) ;
|
||||
#177 = PLANE ( 'NONE', #172 ) ;
|
||||
#178 = ORIENTED_EDGE ( 'NONE', *, *, #40, .T. ) ;
|
||||
#179 = CARTESIAN_POINT ( 'NONE', ( 1.033499999999999900, 1.265672466918789100E-016, 3.000000000000000400 ) ) ;
|
||||
#180 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #192 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #164, #145, #212 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) );
|
||||
#181 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#182 = EDGE_LOOP ( 'NONE', ( #227, #116 ) ) ;
|
||||
#183 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#184 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#185 = EDGE_CURVE ( 'NONE', #121, #72, #168, .T. ) ;
|
||||
#186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#187 = CIRCLE ( 'NONE', #12, 1.033499999999999900 ) ;
|
||||
#188 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#189 = APPROVAL ( #123, 'UNSPECIFIED' ) ;
|
||||
#190 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#191 = PERSON_AND_ORGANIZATION ( #83, #100 ) ;
|
||||
#192 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #164, 'distance_accuracy_value', 'NONE');
|
||||
#193 = AXIS2_PLACEMENT_3D ( 'NONE', #224, #184, #244 ) ;
|
||||
#194 = ORIENTED_EDGE ( 'NONE', *, *, #111, .F. ) ;
|
||||
#195 = EDGE_LOOP ( 'NONE', ( #194, #243, #56, #65 ) ) ;
|
||||
#196 = APPROVAL_DATE_TIME ( #236, #189 ) ;
|
||||
#197 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #33, #85, ( #105 ) ) ;
|
||||
#198 = SECURITY_CLASSIFICATION ( '', '', #66 ) ;
|
||||
#199 = EDGE_CURVE ( 'NONE', #240, #237, #131, .T. ) ;
|
||||
#200 = ORIENTED_EDGE ( 'NONE', *, *, #39, .T. ) ;
|
||||
#201 = CARTESIAN_POINT ( 'NONE', ( 1.187500000000000000, 1.454268073987481900E-016, 3.000000000000000400 ) ) ;
|
||||
#202 = VERTEX_POINT ( 'NONE', #32 ) ;
|
||||
#203 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#204 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#205 = CARTESIAN_POINT ( 'NONE', ( -1.033499999999999900, 0.0000000000000000000, -3.000000000000000400 ) ) ;
|
||||
#206 = CARTESIAN_POINT ( 'NONE', ( 1.033499999999999900, 1.265672466918789100E-016, -3.000000000000000400 ) ) ;
|
||||
#207 = PERSON_AND_ORGANIZATION ( #83, #100 ) ;
|
||||
#208 = LINE ( 'NONE', #221, #89 ) ;
|
||||
#209 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#210 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #38, #16, ( #198 ) ) ;
|
||||
#211 = DATE_TIME_ROLE ( 'classification_date' ) ;
|
||||
#212 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) );
|
||||
#213 = CIRCLE ( 'NONE', #113, 1.187500000000000000 ) ;
|
||||
#214 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #96 ) ;
|
||||
#215 = EDGE_CURVE ( 'NONE', #121, #237, #109, .T. ) ;
|
||||
#216 = DATE_AND_TIME ( #53, #175 ) ;
|
||||
#217 = AXIS2_PLACEMENT_3D ( 'NONE', #102, #11, #95 ) ;
|
||||
#218 = FACE_BOUND ( 'NONE', #182, .T. ) ;
|
||||
#219 = APPROVAL_PERSON_ORGANIZATION ( #58, #90, #52 ) ;
|
||||
#220 = EDGE_LOOP ( 'NONE', ( #178, #84, #242, #136 ) ) ;
|
||||
#221 = CARTESIAN_POINT ( 'NONE', ( -1.187500000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#222 = ORIENTED_EDGE ( 'NONE', *, *, #134, .F. ) ;
|
||||
#223 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#224 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.000000000000000400 ) ) ;
|
||||
#225 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.000000000000000400 ) ) ;
|
||||
#226 = LOCAL_TIME ( 8, 29, 34.00000000000000000, #91 ) ;
|
||||
#227 = ORIENTED_EDGE ( 'NONE', *, *, #40, .F. ) ;
|
||||
#228 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#229 = EDGE_CURVE ( 'NONE', #34, #112, #213, .T. ) ;
|
||||
#230 = PRODUCT ( '1120T74_Standard-Wall Steel Unthreaded Pipe Nipple', '1120T74_Standard-Wall Steel Unthreaded Pipe Nipple', '', ( #249 ) ) ;
|
||||
#231 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ;
|
||||
#232 = ORIENTED_EDGE ( 'NONE', *, *, #134, .T. ) ;
|
||||
#233 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#234 = APPROVAL_ROLE ( '' ) ;
|
||||
#235 = APPROVAL ( #209, 'UNSPECIFIED' ) ;
|
||||
#236 = DATE_AND_TIME ( #2, #226 ) ;
|
||||
#237 = VERTEX_POINT ( 'NONE', #206 ) ;
|
||||
#238 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #216, #106, ( #96 ) ) ;
|
||||
#239 = ADVANCED_BREP_SHAPE_REPRESENTATION ( '1120T74_Standard-Wall Steel Unthreaded Pipe Nipple', ( #7, #79 ), #180 ) ;
|
||||
#240 = VERTEX_POINT ( 'NONE', #205 ) ;
|
||||
#241 = DATE_AND_TIME ( #4, #49 ) ;
|
||||
#242 = ORIENTED_EDGE ( 'NONE', *, *, #199, .F. ) ;
|
||||
#243 = ORIENTED_EDGE ( 'NONE', *, *, #39, .F. ) ;
|
||||
#244 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#246 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#247 = ORIENTED_EDGE ( 'NONE', *, *, #111, .T. ) ;
|
||||
#248 = ADVANCED_FACE ( 'NONE', ( #57 ), #104, .F. ) ;
|
||||
#249 = MECHANICAL_CONTEXT ( 'NONE', #169, 'mechanical' ) ;
|
||||
#250 = SHAPE_DEFINITION_REPRESENTATION ( #214, #239 ) ;
|
||||
#251 = FACE_OUTER_BOUND ( 'NONE', #195, .T. ) ;
|
||||
#252 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
@ -0,0 +1,935 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION (( 'STEP AP203' ),
|
||||
'1' );
|
||||
FILE_NAME ('68095K348_Low-Pressure Steel Unthreaded Pipe Flange.STEP',
|
||||
'2023-02-07T16:53:08',
|
||||
( 'Administrator' ),
|
||||
( 'Managed by Terraform' ),
|
||||
'SwSTEP 2.0',
|
||||
'SolidWorks 2017',
|
||||
'' );
|
||||
FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' ));
|
||||
ENDSEC;
|
||||
|
||||
DATA;
|
||||
#1 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#2 = PLANE ( 'NONE', #478 ) ;
|
||||
#3 = DIRECTION ( 'NONE', ( 1.224646799147353200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#4 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ;
|
||||
#5 = ADVANCED_FACE ( 'NONE', ( #454 ), #796, .F. ) ;
|
||||
#6 = EDGE_LOOP ( 'NONE', ( #731, #231, #839, #562 ) ) ;
|
||||
#7 = EDGE_LOOP ( 'NONE', ( #351, #304, #227, #362 ) ) ;
|
||||
#8 = FACE_OUTER_BOUND ( 'NONE', #275, .T. ) ;
|
||||
#9 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#10 = EDGE_CURVE ( 'NONE', #561, #199, #238, .T. ) ;
|
||||
#11 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#12 = ORIENTED_EDGE ( 'NONE', *, *, #105, .F. ) ;
|
||||
#13 = ORIENTED_EDGE ( 'NONE', *, *, #197, .F. ) ;
|
||||
#14 = CIRCLE ( 'NONE', #559, 0.05999999999999990800 ) ;
|
||||
#15 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#16 = DATE_AND_TIME ( #483, #678 ) ;
|
||||
#17 = CIRCLE ( 'NONE', #51, 3.000000000000000400 ) ;
|
||||
#18 = AXIS2_PLACEMENT_3D ( 'NONE', #250, #616, #825 ) ;
|
||||
#19 = EDGE_CURVE ( 'NONE', #574, #144, #56, .T. ) ;
|
||||
#20 = AXIS2_PLACEMENT_3D ( 'NONE', #1, #845, #205 ) ;
|
||||
#21 = ORIENTED_EDGE ( 'NONE', *, *, #764, .F. ) ;
|
||||
#22 = CARTESIAN_POINT ( 'NONE', ( 1.583083515873356900, 0.0000000000000000000, -0.4350000000000001600 ) ) ;
|
||||
#23 = ORIENTED_EDGE ( 'NONE', *, *, #682, .T. ) ;
|
||||
#24 = FACE_OUTER_BOUND ( 'NONE', #7, .T. ) ;
|
||||
#25 = EDGE_CURVE ( 'NONE', #691, #614, #607, .T. ) ;
|
||||
#26 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#27 = VERTEX_POINT ( 'NONE', #760 ) ;
|
||||
#28 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#29 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#30 = AXIS2_PLACEMENT_3D ( 'NONE', #797, #584, #660 ) ;
|
||||
#31 = VERTEX_POINT ( 'NONE', #809 ) ;
|
||||
#32 = EDGE_LOOP ( 'NONE', ( #13, #696, #367, #300 ) ) ;
|
||||
#33 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#34 = VECTOR ( 'NONE', #158, 39.37007874015748100 ) ;
|
||||
#35 = VECTOR ( 'NONE', #541, 39.37007874015748100 ) ;
|
||||
#36 = EDGE_CURVE ( 'NONE', #768, #849, #78, .T. ) ;
|
||||
#37 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 2.375000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#38 = CARTESIAN_POINT ( 'NONE', ( 2.000000000000000000, 7.730582919617667100E-016, 0.3150000000000000600 ) ) ;
|
||||
#39 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#40 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#41 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#42 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.3150000000000002800 ) ) ;
|
||||
#43 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#44 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#45 = ORIENTED_EDGE ( 'NONE', *, *, #898, .T. ) ;
|
||||
#46 = ORIENTED_EDGE ( 'NONE', *, *, #558, .T. ) ;
|
||||
#47 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#48 = VECTOR ( 'NONE', #826, 39.37007874015748100 ) ;
|
||||
#49 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#50 = ORIENTED_EDGE ( 'NONE', *, *, #223, .T. ) ;
|
||||
#51 = AXIS2_PLACEMENT_3D ( 'NONE', #42, #404, #40 ) ;
|
||||
#52 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#53 = ORIENTED_EDGE ( 'NONE', *, *, #605, .T. ) ;
|
||||
#54 = CARTESIAN_POINT ( 'NONE', ( -2.940000000000000400, 3.637200993467639100E-016, -0.3750000000000001700 ) ) ;
|
||||
#55 = EDGE_CURVE ( 'NONE', #199, #777, #245, .T. ) ;
|
||||
#56 = CIRCLE ( 'NONE', #431, 1.505773112999396800 ) ;
|
||||
#57 = ORIENTED_EDGE ( 'NONE', *, *, #487, .T. ) ;
|
||||
#58 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#59 = VECTOR ( 'NONE', #97, 39.37007874015748100 ) ;
|
||||
#60 = APPROVAL_DATE_TIME ( #310, #139 ) ;
|
||||
#61 = TOROIDAL_SURFACE ( 'NONE', #253, 2.940000000000000400, 0.05999999999999999800 ) ;
|
||||
#62 = ORIENTED_EDGE ( 'NONE', *, *, #537, .T. ) ;
|
||||
#63 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) );
|
||||
#64 = AXIS2_PLACEMENT_3D ( 'NONE', #549, #184, #557 ) ;
|
||||
#65 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #279 ) ;
|
||||
#66 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #569 ) ;
|
||||
#67 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#68 = EDGE_CURVE ( 'NONE', #786, #90, #518, .T. ) ;
|
||||
#69 = VERTEX_POINT ( 'NONE', #672 ) ;
|
||||
#70 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#71 = ORIENTED_EDGE ( 'NONE', *, *, #682, .F. ) ;
|
||||
#72 = CC_DESIGN_SECURITY_CLASSIFICATION ( #899, ( #508 ) ) ;
|
||||
#73 = FACE_OUTER_BOUND ( 'NONE', #379, .T. ) ;
|
||||
#74 = ORIENTED_EDGE ( 'NONE', *, *, #260, .T. ) ;
|
||||
#75 = DIRECTION ( 'NONE', ( 0.1218693434051478800, 0.0000000000000000000, 0.9925461516413219800 ) ) ;
|
||||
#76 = EDGE_CURVE ( 'NONE', #398, #578, #896, .T. ) ;
|
||||
#77 = CARTESIAN_POINT ( 'NONE', ( -0.3749999999999996700, -2.375000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#78 = CIRCLE ( 'NONE', #774, 0.3749999999999999400 ) ;
|
||||
#79 = CARTESIAN_POINT ( 'NONE', ( 0.3749999999999999400, 2.375000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#80 = ORIENTED_EDGE ( 'NONE', *, *, #700, .F. ) ;
|
||||
#81 = AXIS2_PLACEMENT_3D ( 'NONE', #396, #256, #900 ) ;
|
||||
#82 = FACE_OUTER_BOUND ( 'NONE', #192, .T. ) ;
|
||||
#83 = PERSON_AND_ORGANIZATION ( #164, #907 ) ;
|
||||
#84 = FACE_OUTER_BOUND ( 'NONE', #251, .T. ) ;
|
||||
#85 = ADVANCED_FACE ( 'NONE', ( #679 ), #221, .F. ) ;
|
||||
#86 = CARTESIAN_POINT ( 'NONE', ( -2.000000000000000000, -4.362804221962446100E-016, -0.3750000000000001700 ) ) ;
|
||||
#87 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.4350000000000001600 ) ) ;
|
||||
#88 = EDGE_CURVE ( 'NONE', #407, #263, #917, .T. ) ;
|
||||
#89 = CARTESIAN_POINT ( 'NONE', ( -2.375000000000000000, -4.362804221962446100E-016, 0.3150000000000000600 ) ) ;
|
||||
#90 = VERTEX_POINT ( 'NONE', #464 ) ;
|
||||
#91 = VERTEX_POINT ( 'NONE', #765 ) ;
|
||||
#92 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#93 = LINE ( 'NONE', #220, #543 ) ;
|
||||
#94 = AXIS2_PLACEMENT_3D ( 'NONE', #70, #882, #335 ) ;
|
||||
#95 = CARTESIAN_POINT ( 'NONE', ( -1.220000000000000000, 1.494069094959770800E-016, -0.6250000000000000000 ) ) ;
|
||||
#96 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#97 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#98 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#99 = CARTESIAN_POINT ( 'NONE', ( -0.3749999999999996700, -2.375000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#100 = AXIS2_PLACEMENT_3D ( 'NONE', #662, #875, #597 ) ;
|
||||
#101 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#102 = ORIENTED_EDGE ( 'NONE', *, *, #823, .T. ) ;
|
||||
#103 = ORIENTED_EDGE ( 'NONE', *, *, #105, .T. ) ;
|
||||
#104 = TOROIDAL_SURFACE ( 'NONE', #162, 1.583083515873356900, 0.05999999999999999800 ) ;
|
||||
#105 = EDGE_CURVE ( 'NONE', #31, #506, #17, .T. ) ;
|
||||
#106 = PERSON_AND_ORGANIZATION ( #164, #907 ) ;
|
||||
#107 = CIRCLE ( 'NONE', #425, 0.05999999999999997700 ) ;
|
||||
#108 = CARTESIAN_POINT ( 'NONE', ( 2.000000000000000000, 7.730582919617667100E-016, -0.3750000000000001700 ) ) ;
|
||||
#109 = CARTESIAN_POINT ( 'NONE', ( 2.375000000000000000, 7.271340369937410300E-016, -0.6250000000000003300 ) ) ;
|
||||
#110 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#111 = AXIS2_PLACEMENT_3D ( 'NONE', #273, #783, #631 ) ;
|
||||
#112 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#113 = ORIENTED_EDGE ( 'NONE', *, *, #749, .T. ) ;
|
||||
#114 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#115 = ORIENTED_EDGE ( 'NONE', *, *, #516, .F. ) ;
|
||||
#116 = DATE_AND_TIME ( #883, #295 ) ;
|
||||
#117 = FACE_BOUND ( 'NONE', #210, .T. ) ;
|
||||
#118 = EDGE_CURVE ( 'NONE', #768, #91, #172, .T. ) ;
|
||||
#119 = ORIENTED_EDGE ( 'NONE', *, *, #338, .F. ) ;
|
||||
#120 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#121 = AXIS2_PLACEMENT_3D ( 'NONE', #773, #633, #264 ) ;
|
||||
#122 = EDGE_LOOP ( 'NONE', ( #538, #46, #315, #481 ) ) ;
|
||||
#123 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#124 = EDGE_CURVE ( 'NONE', #427, #674, #266, .T. ) ;
|
||||
#125 = EDGE_LOOP ( 'NONE', ( #442, #525, #634, #134 ) ) ;
|
||||
#126 = EDGE_LOOP ( 'NONE', ( #102, #816 ) ) ;
|
||||
#127 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.224646799147359900E-016, 0.0000000000000000000 ) ) ;
|
||||
#128 = CIRCLE ( 'NONE', #261, 0.3749999999999999400 ) ;
|
||||
#129 = LINE ( 'NONE', #503, #638 ) ;
|
||||
#130 = ORIENTED_EDGE ( 'NONE', *, *, #664, .F. ) ;
|
||||
#131 = AXIS2_PLACEMENT_3D ( 'NONE', #880, #174, #762 ) ;
|
||||
#132 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#133 = EDGE_CURVE ( 'NONE', #506, #31, #343, .T. ) ;
|
||||
#134 = ORIENTED_EDGE ( 'NONE', *, *, #605, .F. ) ;
|
||||
#135 = ORIENTED_EDGE ( 'NONE', *, *, #19, .T. ) ;
|
||||
#136 = LINE ( 'NONE', #843, #148 ) ;
|
||||
#137 = FACE_OUTER_BOUND ( 'NONE', #738, .T. ) ;
|
||||
#138 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#139 = APPROVAL ( #350, 'UNSPECIFIED' ) ;
|
||||
#140 = APPROVAL_ROLE ( '' ) ;
|
||||
#141 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#142 = AXIS2_PLACEMENT_3D ( 'NONE', #222, #868, #746 ) ;
|
||||
#143 = ORIENTED_EDGE ( 'NONE', *, *, #305, .T. ) ;
|
||||
#144 = VERTEX_POINT ( 'NONE', #393 ) ;
|
||||
#145 = CYLINDRICAL_SURFACE ( 'NONE', #601, 1.220000000000000000 ) ;
|
||||
#146 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#147 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#148 = VECTOR ( 'NONE', #594, 39.37007874015748100 ) ;
|
||||
#149 = CIRCLE ( 'NONE', #142, 0.05999999999999990800 ) ;
|
||||
#150 = EDGE_CURVE ( 'NONE', #437, #27, #567, .T. ) ;
|
||||
#151 = ADVANCED_FACE ( 'NONE', ( #736 ), #61, .T. ) ;
|
||||
#152 = CARTESIAN_POINT ( 'NONE', ( 2.940000000000000400, 0.0000000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#153 = ORIENTED_EDGE ( 'NONE', *, *, #68, .T. ) ;
|
||||
#154 = AXIS2_PLACEMENT_3D ( 'NONE', #37, #461, #324 ) ;
|
||||
#155 = ORIENTED_EDGE ( 'NONE', *, *, #36, .F. ) ;
|
||||
#156 = CIRCLE ( 'NONE', #492, 3.000000000000000400 ) ;
|
||||
#157 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#158 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#159 = ADVANCED_FACE ( 'NONE', ( #668 ), #276, .F. ) ;
|
||||
#160 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#161 = EDGE_CURVE ( 'NONE', #578, #398, #761, .T. ) ;
|
||||
#162 = AXIS2_PLACEMENT_3D ( 'NONE', #547, #734, #289 ) ;
|
||||
#163 = CARTESIAN_POINT ( 'NONE', ( -2.375000000000000000, -4.362804221962446100E-016, -0.3750000000000001700 ) ) ;
|
||||
#164 = PERSON ( 'UNSPECIFIED', 'UNSPECIFIED', 'UNSPECIFIED', ('UNSPECIFIED'), ('UNSPECIFIED'), ('UNSPECIFIED') ) ;
|
||||
#165 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.6250000000000001100 ) ) ;
|
||||
#166 = EDGE_LOOP ( 'NONE', ( #645, #168 ) ) ;
|
||||
#167 = EDGE_CURVE ( 'NONE', #262, #772, #851, .T. ) ;
|
||||
#168 = ORIENTED_EDGE ( 'NONE', *, *, #779, .T. ) ;
|
||||
#169 = FACE_BOUND ( 'NONE', #126, .T. ) ;
|
||||
#170 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#171 = SHAPE_DEFINITION_REPRESENTATION ( #445, #236 ) ;
|
||||
#172 = LINE ( 'NONE', #694, #35 ) ;
|
||||
#173 = AXIS2_PLACEMENT_3D ( 'NONE', #895, #886, #539 ) ;
|
||||
#174 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#175 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#176 = ORIENTED_EDGE ( 'NONE', *, *, #450, .T. ) ;
|
||||
#177 = CONICAL_SURFACE ( 'NONE', #364, 1.499303859774273800, 0.1221730476396034700 ) ;
|
||||
#178 = EDGE_CURVE ( 'NONE', #614, #574, #460, .T. ) ;
|
||||
#179 = DIRECTION ( 'NONE', ( -1.224646799147353200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#180 = FACE_OUTER_BOUND ( 'NONE', #586, .T. ) ;
|
||||
#181 = EDGE_LOOP ( 'NONE', ( #377, #252, #787, #115 ) ) ;
|
||||
#182 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#183 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#184 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#185 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#186 = EDGE_LOOP ( 'NONE', ( #359, #595, #365, #353 ) ) ;
|
||||
#187 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#188 = EDGE_LOOP ( 'NONE', ( #176, #771 ) ) ;
|
||||
#189 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#190 = FACE_BOUND ( 'NONE', #685, .T. ) ;
|
||||
#191 = AXIS2_PLACEMENT_3D ( 'NONE', #189, #194, #891 ) ;
|
||||
#192 = EDGE_LOOP ( 'NONE', ( #292, #573, #626, #417 ) ) ;
|
||||
#193 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#194 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#195 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#196 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#197 = EDGE_CURVE ( 'NONE', #485, #540, #780, .T. ) ;
|
||||
#198 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#199 = VERTEX_POINT ( 'NONE', #474 ) ;
|
||||
#200 = ORIENTED_EDGE ( 'NONE', *, *, #55, .F. ) ;
|
||||
#201 = CIRCLE ( 'NONE', #397, 1.583083515873356900 ) ;
|
||||
#202 = PERSON_AND_ORGANIZATION ( #164, #907 ) ;
|
||||
#203 = CIRCLE ( 'NONE', #726, 1.870000000000000100 ) ;
|
||||
#204 = AXIS2_PLACEMENT_3D ( 'NONE', #466, #41, #888 ) ;
|
||||
#205 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#206 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ;
|
||||
#207 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#208 = EDGE_CURVE ( 'NONE', #376, #777, #156, .T. ) ;
|
||||
#209 = VERTEX_POINT ( 'NONE', #401 ) ;
|
||||
#210 = EDGE_LOOP ( 'NONE', ( #847, #53 ) ) ;
|
||||
#211 = CIRCLE ( 'NONE', #173, 0.3749999999999999400 ) ;
|
||||
#212 = EDGE_CURVE ( 'NONE', #540, #554, #327, .T. ) ;
|
||||
#213 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#214 = ORIENTED_EDGE ( 'NONE', *, *, #208, .F. ) ;
|
||||
#215 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#216 = AXIS2_PLACEMENT_3D ( 'NONE', #456, #29, #813 ) ;
|
||||
#217 = ORIENTED_EDGE ( 'NONE', *, *, #850, .T. ) ;
|
||||
#218 = EDGE_LOOP ( 'NONE', ( #712, #135, #306, #698 ) ) ;
|
||||
#219 = FACE_BOUND ( 'NONE', #544, .T. ) ;
|
||||
#220 = CARTESIAN_POINT ( 'NONE', ( -1.220000000000000000, 1.494069094959770800E-016, 0.3750000000000000600 ) ) ;
|
||||
#221 = CYLINDRICAL_SURFACE ( 'NONE', #676, 0.3749999999999999400 ) ;
|
||||
#222 = CARTESIAN_POINT ( 'NONE', ( -2.940000000000000400, 3.600461589493218800E-016, -0.3150000000000002800 ) ) ;
|
||||
#223 = EDGE_CURVE ( 'NONE', #674, #427, #531, .T. ) ;
|
||||
#224 = ADVANCED_FACE ( 'NONE', ( #84, #842 ), #2, .F. ) ;
|
||||
#225 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#226 = EDGE_LOOP ( 'NONE', ( #513, #534 ) ) ;
|
||||
#227 = ORIENTED_EDGE ( 'NONE', *, *, #167, .F. ) ;
|
||||
#228 = CIRCLE ( 'NONE', #204, 0.3749999999999999400 ) ;
|
||||
#229 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#230 = CARTESIAN_POINT ( 'NONE', ( -1.583083515873356900, 1.938718160497244600E-016, -0.3750000000000001700 ) ) ;
|
||||
#231 = ORIENTED_EDGE ( 'NONE', *, *, #794, .F. ) ;
|
||||
#232 = CARTESIAN_POINT ( 'NONE', ( 1.870000000000000100, 2.290089514405550600E-016, 0.3750000000000000600 ) ) ;
|
||||
#233 = AXIS2_PLACEMENT_3D ( 'NONE', #766, #52, #329 ) ;
|
||||
#234 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.6250000000000000000 ) ) ;
|
||||
#235 = CARTESIAN_POINT ( 'NONE', ( 3.000000000000000400, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#236 = ADVANCED_BREP_SHAPE_REPRESENTATION ( '68095K348_Low-Pressure Steel Unthreaded Pipe Flange', ( #866, #20 ), #904 ) ;
|
||||
#237 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#238 = CIRCLE ( 'NONE', #383, 2.940000000000000400 ) ;
|
||||
#239 = EDGE_CURVE ( 'NONE', #348, #767, #872, .T. ) ;
|
||||
#240 = EDGE_LOOP ( 'NONE', ( #818, #74 ) ) ;
|
||||
#241 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#242 = LINE ( 'NONE', #604, #59 ) ;
|
||||
#243 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#244 = VECTOR ( 'NONE', #96, 39.37007874015748100 ) ;
|
||||
#245 = CIRCLE ( 'NONE', #890, 0.06000000000000001200 ) ;
|
||||
#246 = ORIENTED_EDGE ( 'NONE', *, *, #717, .F. ) ;
|
||||
#247 = CARTESIAN_POINT ( 'NONE', ( 1.446220343900916900, 0.0000000000000000000, -0.5650000000000001700 ) ) ;
|
||||
#248 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#249 = AXIS2_PLACEMENT_3D ( 'NONE', #89, #366, #865 ) ;
|
||||
#250 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.3150000000000002800 ) ) ;
|
||||
#251 = EDGE_LOOP ( 'NONE', ( #806, #455 ) ) ;
|
||||
#252 = ORIENTED_EDGE ( 'NONE', *, *, #178, .T. ) ;
|
||||
#253 = AXIS2_PLACEMENT_3D ( 'NONE', #331, #44, #684 ) ;
|
||||
#254 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#255 = FACE_OUTER_BOUND ( 'NONE', #125, .T. ) ;
|
||||
#256 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#257 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #509, #346, ( #473 ) ) ;
|
||||
#258 = CARTESIAN_POINT ( 'NONE', ( -1.499303859774273800, 1.836117672821836400E-016, -0.6250000000000003300 ) ) ;
|
||||
#259 = EDGE_LOOP ( 'NONE', ( #666, #130, #153, #71 ) ) ;
|
||||
#260 = EDGE_CURVE ( 'NONE', #743, #348, #370, .T. ) ;
|
||||
#261 = AXIS2_PLACEMENT_3D ( 'NONE', #612, #175, #532 ) ;
|
||||
#262 = VERTEX_POINT ( 'NONE', #472 ) ;
|
||||
#263 = VERTEX_POINT ( 'NONE', #490 ) ;
|
||||
#264 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#265 = FACE_OUTER_BOUND ( 'NONE', #6, .T. ) ;
|
||||
#266 = CIRCLE ( 'NONE', #334, 2.940000000000000400 ) ;
|
||||
#267 = AXIS2_PLACEMENT_3D ( 'NONE', #480, #546, #254 ) ;
|
||||
#268 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#269 = ADVANCED_FACE ( 'NONE', ( #180 ), #412, .T. ) ;
|
||||
#270 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#271 = EDGE_CURVE ( 'NONE', #91, #856, #471, .T. ) ;
|
||||
#272 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ;
|
||||
#273 = CARTESIAN_POINT ( 'NONE', ( -2.375000000000000000, -4.362804221962446100E-016, -0.3750000000000001700 ) ) ;
|
||||
#274 = ORIENTED_EDGE ( 'NONE', *, *, #823, .F. ) ;
|
||||
#275 = EDGE_LOOP ( 'NONE', ( #323, #143, #689, #655 ) ) ;
|
||||
#276 = TOROIDAL_SURFACE ( 'NONE', #318, 1.870000000000000100, 0.05999999999999999800 ) ;
|
||||
#277 = CARTESIAN_POINT ( 'NONE', ( -2.750000000000000000, -3.903561672282188800E-016, -0.3750000000000001700 ) ) ;
|
||||
#278 = AXIS2_PLACEMENT_3D ( 'NONE', #147, #213, #858 ) ;
|
||||
#279 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
|
||||
#280 = AXIS2_PLACEMENT_3D ( 'NONE', #406, #572, #579 ) ;
|
||||
#281 = ORIENTED_EDGE ( 'NONE', *, *, #516, .T. ) ;
|
||||
#282 = ORIENTED_EDGE ( 'NONE', *, *, #414, .F. ) ;
|
||||
#283 = ADVANCED_FACE ( 'NONE', ( #821 ), #391, .F. ) ;
|
||||
#284 = CIRCLE ( 'NONE', #357, 0.3749999999999999400 ) ;
|
||||
#285 = APPROVAL_DATE_TIME ( #116, #654 ) ;
|
||||
#286 = TOROIDAL_SURFACE ( 'NONE', #381, 1.583083515873356900, 0.05999999999999999800 ) ;
|
||||
#287 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#288 = EDGE_CURVE ( 'NONE', #209, #757, #860, .T. ) ;
|
||||
#289 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#290 = AXIS2_PLACEMENT_3D ( 'NONE', #416, #706, #707 ) ;
|
||||
#291 = ADVANCED_FACE ( 'NONE', ( #337 ), #611, .F. ) ;
|
||||
#292 = ORIENTED_EDGE ( 'NONE', *, *, #867, .F. ) ;
|
||||
#293 = EDGE_LOOP ( 'NONE', ( #807, #441 ) ) ;
|
||||
#294 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#295 = LOCAL_TIME ( 10, 53, 8.000000000000000000, #637 ) ;
|
||||
#296 = CYLINDRICAL_SURFACE ( 'NONE', #100, 3.000000000000000400 ) ;
|
||||
#297 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#298 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 2.375000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#299 = AXIS2_PLACEMENT_3D ( 'NONE', #185, #67, #132 ) ;
|
||||
#300 = ORIENTED_EDGE ( 'NONE', *, *, #212, .F. ) ;
|
||||
#301 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #517, #785, ( #508 ) ) ;
|
||||
#302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#303 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#304 = ORIENTED_EDGE ( 'NONE', *, *, #764, .T. ) ;
|
||||
#305 = EDGE_CURVE ( 'NONE', #398, #263, #93, .T. ) ;
|
||||
#306 = ORIENTED_EDGE ( 'NONE', *, *, #322, .T. ) ;
|
||||
#307 = AXIS2_PLACEMENT_3D ( 'NONE', #352, #486, #58 ) ;
|
||||
#308 = ORIENTED_EDGE ( 'NONE', *, *, #664, .T. ) ;
|
||||
#309 = LINE ( 'NONE', #727, #915 ) ;
|
||||
#310 = DATE_AND_TIME ( #841, #389 ) ;
|
||||
#311 = CARTESIAN_POINT ( 'NONE', ( 1.220000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#312 = DESIGN_CONTEXT ( 'detailed design', #569, 'design' ) ;
|
||||
#313 = TOROIDAL_SURFACE ( 'NONE', #661, 1.446220343900916900, 0.05999999999999999800 ) ;
|
||||
#314 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#315 = ORIENTED_EDGE ( 'NONE', *, *, #271, .F. ) ;
|
||||
#316 = EDGE_LOOP ( 'NONE', ( #113, #468 ) ) ;
|
||||
#317 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#318 = AXIS2_PLACEMENT_3D ( 'NONE', #624, #182, #477 ) ;
|
||||
#319 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#320 = EDGE_LOOP ( 'NONE', ( #339, #217, #491, #408 ) ) ;
|
||||
#321 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#322 = EDGE_CURVE ( 'NONE', #144, #90, #129, .T. ) ;
|
||||
#323 = ORIENTED_EDGE ( 'NONE', *, *, #76, .F. ) ;
|
||||
#324 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#325 = EDGE_LOOP ( 'NONE', ( #527, #914 ) ) ;
|
||||
#326 = DATE_AND_TIME ( #566, #529 ) ;
|
||||
#327 = CIRCLE ( 'NONE', #290, 0.05999999999999997700 ) ;
|
||||
#328 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.4276878393956912200 ) ) ;
|
||||
#329 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#330 = CARTESIAN_POINT ( 'NONE', ( 1.446220343900916900, 0.0000000000000000000, -0.6250000000000001100 ) ) ;
|
||||
#331 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.2550000000000000600 ) ) ;
|
||||
#332 = VERTEX_POINT ( 'NONE', #79 ) ;
|
||||
#333 = EDGE_LOOP ( 'NONE', ( #21, #274, #621, #596 ) ) ;
|
||||
#334 = AXIS2_PLACEMENT_3D ( 'NONE', #628, #112, #897 ) ;
|
||||
#335 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#336 = LINE ( 'NONE', #77, #34 ) ;
|
||||
#337 = FACE_OUTER_BOUND ( 'NONE', #186, .T. ) ;
|
||||
#338 = EDGE_CURVE ( 'NONE', #856, #91, #714, .T. ) ;
|
||||
#339 = ORIENTED_EDGE ( 'NONE', *, *, #260, .F. ) ;
|
||||
#340 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#341 = ORIENTED_EDGE ( 'NONE', *, *, #133, .F. ) ;
|
||||
#342 = LINE ( 'NONE', #235, #244 ) ;
|
||||
#343 = CIRCLE ( 'NONE', #18, 3.000000000000000400 ) ;
|
||||
#344 = AXIS2_PLACEMENT_3D ( 'NONE', #399, #909, #127 ) ;
|
||||
#345 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#346 = DATE_TIME_ROLE ( 'creation_date' ) ;
|
||||
#347 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#348 = VERTEX_POINT ( 'NONE', #86 ) ;
|
||||
#349 = AXIS2_PLACEMENT_3D ( 'NONE', #22, #522, #600 ) ;
|
||||
#350 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#351 = ORIENTED_EDGE ( 'NONE', *, *, #150, .F. ) ;
|
||||
#352 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.6250000000000001100 ) ) ;
|
||||
#353 = ORIENTED_EDGE ( 'NONE', *, *, #88, .T. ) ;
|
||||
#354 = FACE_BOUND ( 'NONE', #226, .T. ) ;
|
||||
#355 = EDGE_CURVE ( 'NONE', #348, #743, #433, .T. ) ;
|
||||
#356 = LENGTH_MEASURE_WITH_UNIT ( LENGTH_MEASURE( 0.02539999999999999900 ), #709 );
|
||||
#357 = AXIS2_PLACEMENT_3D ( 'NONE', #392, #241, #317 ) ;
|
||||
#358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#359 = ORIENTED_EDGE ( 'NONE', *, *, #305, .F. ) ;
|
||||
#360 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.000000000000000400, 0.3150000000000000600 ) ) ;
|
||||
#361 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#362 = ORIENTED_EDGE ( 'NONE', *, *, #652, .F. ) ;
|
||||
#363 = CARTESIAN_POINT ( 'NONE', ( -2.375000000000000000, -4.362804221962446100E-016, -0.6250000000000003300 ) ) ;
|
||||
#364 = AXIS2_PLACEMENT_3D ( 'NONE', #43, #193, #835 ) ;
|
||||
#365 = ORIENTED_EDGE ( 'NONE', *, *, #570, .T. ) ;
|
||||
#366 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#367 = ORIENTED_EDGE ( 'NONE', *, *, #805, .F. ) ;
|
||||
#368 = TOROIDAL_SURFACE ( 'NONE', #216, 2.940000000000000400, 0.05999999999999999800 ) ;
|
||||
#369 = PERSON_AND_ORGANIZATION ( #164, #907 ) ;
|
||||
#370 = CIRCLE ( 'NONE', #111, 0.3749999999999999400 ) ;
|
||||
#371 = CARTESIAN_POINT ( 'NONE', ( 1.583083515873356900, 0.0000000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#372 = EDGE_CURVE ( 'NONE', #777, #376, #801, .T. ) ;
|
||||
#373 = ORIENTED_EDGE ( 'NONE', *, *, #161, .T. ) ;
|
||||
#374 = PLANE ( 'NONE', #815 ) ;
|
||||
#375 = ADVANCED_FACE ( 'NONE', ( #589 ), #484, .F. ) ;
|
||||
#376 = VERTEX_POINT ( 'NONE', #444 ) ;
|
||||
#377 = ORIENTED_EDGE ( 'NONE', *, *, #901, .F. ) ;
|
||||
#378 = CIRCLE ( 'NONE', #803, 1.220000000000000000 ) ;
|
||||
#379 = EDGE_LOOP ( 'NONE', ( #421, #57, #12, #828 ) ) ;
|
||||
#380 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#381 = AXIS2_PLACEMENT_3D ( 'NONE', #87, #877, #593 ) ;
|
||||
#382 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.3150000000000002800 ) ) ;
|
||||
#383 = AXIS2_PLACEMENT_3D ( 'NONE', #817, #319, #887 ) ;
|
||||
#384 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#385 = ORIENTED_EDGE ( 'NONE', *, *, #715, .T. ) ;
|
||||
#386 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#387 = EDGE_LOOP ( 'NONE', ( #373, #711 ) ) ;
|
||||
#388 = FACE_BOUND ( 'NONE', #325, .T. ) ;
|
||||
#389 = LOCAL_TIME ( 10, 53, 8.000000000000000000, #735 ) ;
|
||||
#390 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.224646799147354900E-016, 0.0000000000000000000 ) ) ;
|
||||
#391 = CYLINDRICAL_SURFACE ( 'NONE', #280, 0.3749999999999999400 ) ;
|
||||
#392 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 2.375000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#393 = CARTESIAN_POINT ( 'NONE', ( 1.505773112999396800, 0.0000000000000000000, -0.5723121606043081200 ) ) ;
|
||||
#394 = CARTESIAN_POINT ( 'NONE', ( 2.940000000000000400, 3.637200993467639100E-016, 0.3150000000000000600 ) ) ;
|
||||
#395 = AXIS2_PLACEMENT_3D ( 'NONE', #345, #268, #207 ) ;
|
||||
#396 = CARTESIAN_POINT ( 'NONE', ( 2.908536147974963700E-016, -2.375000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#397 = AXIS2_PLACEMENT_3D ( 'NONE', #114, #463, #384 ) ;
|
||||
#398 = VERTEX_POINT ( 'NONE', #95 ) ;
|
||||
#399 = CARTESIAN_POINT ( 'NONE', ( 2.940000000000000400, 3.600461589493218800E-016, 0.2550000000000000600 ) ) ;
|
||||
#400 = ORIENTED_EDGE ( 'NONE', *, *, #913, .F. ) ;
|
||||
#401 = CARTESIAN_POINT ( 'NONE', ( -0.3749999999999999400, 2.375000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#402 = CIRCLE ( 'NONE', #278, 2.940000000000000400 ) ;
|
||||
#403 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#404 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#405 = EDGE_CURVE ( 'NONE', #427, #31, #831, .T. ) ;
|
||||
#406 = CARTESIAN_POINT ( 'NONE', ( 2.375000000000000000, 7.271340369937410300E-016, -0.6250000000000003300 ) ) ;
|
||||
#407 = VERTEX_POINT ( 'NONE', #669 ) ;
|
||||
#408 = ORIENTED_EDGE ( 'NONE', *, *, #239, .F. ) ;
|
||||
#409 = ADVANCED_FACE ( 'NONE', ( #137 ), #296, .T. ) ;
|
||||
#410 = AXIS2_PLACEMENT_3D ( 'NONE', #195, #403, #47 ) ;
|
||||
#411 = CIRCLE ( 'NONE', #533, 1.810000000000000100 ) ;
|
||||
#412 = CONICAL_SURFACE ( 'NONE', #613, 1.499303859774273800, 0.1221730476396034700 ) ;
|
||||
#413 = CARTESIAN_POINT ( 'NONE', ( -2.000000000000000000, -4.362804221962446100E-016, -0.6250000000000003300 ) ) ;
|
||||
#414 = EDGE_CURVE ( 'NONE', #90, #69, #688, .T. ) ;
|
||||
#415 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ;
|
||||
#416 = CARTESIAN_POINT ( 'NONE', ( -1.870000000000000100, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#417 = ORIENTED_EDGE ( 'NONE', *, *, #208, .T. ) ;
|
||||
#418 = VERTEX_POINT ( 'NONE', #524 ) ;
|
||||
#419 = CYLINDRICAL_SURFACE ( 'NONE', #592, 0.3749999999999999400 ) ;
|
||||
#420 = ADVANCED_FACE ( 'NONE', ( #908, #495 ), #374, .F. ) ;
|
||||
#421 = ORIENTED_EDGE ( 'NONE', *, *, #223, .F. ) ;
|
||||
#422 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#423 =( CONVERSION_BASED_UNIT ( 'INCH', #356 ) LENGTH_UNIT ( ) NAMED_UNIT ( #581 ) );
|
||||
#424 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.224646799147354900E-016, 0.0000000000000000000 ) ) ;
|
||||
#425 = AXIS2_PLACEMENT_3D ( 'NONE', #247, #110, #615 ) ;
|
||||
#426 = ADVANCED_FACE ( 'NONE', ( #724 ), #702, .T. ) ;
|
||||
#427 = VERTEX_POINT ( 'NONE', #152 ) ;
|
||||
#428 = ORIENTED_EDGE ( 'NONE', *, *, #794, .T. ) ;
|
||||
#429 = LINE ( 'NONE', #258, #555 ) ;
|
||||
#430 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#431 = AXIS2_PLACEMENT_3D ( 'NONE', #751, #671, #98 ) ;
|
||||
#432 = CALENDAR_DATE ( 2023, 7, 2 ) ;
|
||||
#433 = CIRCLE ( 'NONE', #550, 0.3749999999999999400 ) ;
|
||||
#434 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.5650000000000001700 ) ) ;
|
||||
#435 = ADVANCED_FACE ( 'NONE', ( #747 ), #286, .F. ) ;
|
||||
#436 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 2.375000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#437 = VERTEX_POINT ( 'NONE', #99 ) ;
|
||||
#438 = CARTESIAN_POINT ( 'NONE', ( -3.000000000000000400, 3.673940397442060400E-016, 0.2550000000000000600 ) ) ;
|
||||
#439 = AXIS2_PLACEMENT_3D ( 'NONE', #430, #854, #852 ) ;
|
||||
#440 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#441 = ORIENTED_EDGE ( 'NONE', *, *, #520, .T. ) ;
|
||||
#442 = ORIENTED_EDGE ( 'NONE', *, *, #850, .F. ) ;
|
||||
#443 = CYLINDRICAL_SURFACE ( 'NONE', #94, 3.000000000000000400 ) ;
|
||||
#444 = CARTESIAN_POINT ( 'NONE', ( 3.000000000000000400, 0.0000000000000000000, 0.2550000000000000600 ) ) ;
|
||||
#445 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #473 ) ;
|
||||
#446 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#447 = AXIS2_PLACEMENT_3D ( 'NONE', #832, #916, #781 ) ;
|
||||
#448 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.810000000000000100, 0.3750000000000000600 ) ) ;
|
||||
#449 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#450 = EDGE_CURVE ( 'NONE', #540, #485, #203, .T. ) ;
|
||||
#451 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#452 = CARTESIAN_POINT ( 'NONE', ( -2.940000000000000400, 0.0000000000000000000, 0.2550000000000000600 ) ) ;
|
||||
#453 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #106, #4, ( #548 ) ) ;
|
||||
#454 = FACE_OUTER_BOUND ( 'NONE', #122, .T. ) ;
|
||||
#455 = ORIENTED_EDGE ( 'NONE', *, *, #901, .T. ) ;
|
||||
#456 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.2550000000000000600 ) ) ;
|
||||
#457 = LINE ( 'NONE', #703, #646 ) ;
|
||||
#458 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#459 = PERSON_AND_ORGANIZATION ( #164, #907 ) ;
|
||||
#460 = CIRCLE ( 'NONE', #499, 0.05999999999999990800 ) ;
|
||||
#461 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#462 = AXIS2_PLACEMENT_3D ( 'NONE', #651, #11, #146 ) ;
|
||||
#463 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#464 = CARTESIAN_POINT ( 'NONE', ( 1.523530746774877300, 0.0000000000000000000, -0.4276878393956912200 ) ) ;
|
||||
#465 = EDGE_CURVE ( 'NONE', #767, #418, #510, .T. ) ;
|
||||
#466 = CARTESIAN_POINT ( 'NONE', ( -2.375000000000000000, -4.362804221962446100E-016, 0.3150000000000000600 ) ) ;
|
||||
#467 = ORIENTED_EDGE ( 'NONE', *, *, #450, .F. ) ;
|
||||
#468 = ORIENTED_EDGE ( 'NONE', *, *, #10, .T. ) ;
|
||||
#469 = APPROVAL_DATE_TIME ( #326, #650 ) ;
|
||||
#470 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#471 = CIRCLE ( 'NONE', #693, 0.3749999999999999400 ) ;
|
||||
#472 = CARTESIAN_POINT ( 'NONE', ( 0.3750000000000002200, -2.375000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#473 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #508, #312 ) ;
|
||||
#474 = CARTESIAN_POINT ( 'NONE', ( -2.940000000000000400, 0.0000000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#475 = EDGE_LOOP ( 'NONE', ( #608, #155, #793, #119 ) ) ;
|
||||
#476 = ORIENTED_EDGE ( 'NONE', *, *, #838, .T. ) ;
|
||||
#477 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#478 = AXIS2_PLACEMENT_3D ( 'NONE', #710, #270, #198 ) ;
|
||||
#479 = ORIENTED_EDGE ( 'NONE', *, *, #124, .T. ) ;
|
||||
#480 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.5723121606043081200 ) ) ;
|
||||
#481 = ORIENTED_EDGE ( 'NONE', *, *, #118, .F. ) ;
|
||||
#482 = LINE ( 'NONE', #903, #732 ) ;
|
||||
#483 = CALENDAR_DATE ( 2023, 7, 2 ) ;
|
||||
#484 = CYLINDRICAL_SURFACE ( 'NONE', #648, 0.3749999999999999400 ) ;
|
||||
#485 = VERTEX_POINT ( 'NONE', #602 ) ;
|
||||
#486 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#487 = EDGE_CURVE ( 'NONE', #674, #506, #149, .T. ) ;
|
||||
#488 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) );
|
||||
#489 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#490 = CARTESIAN_POINT ( 'NONE', ( -1.220000000000000000, 1.494069094959770800E-016, 0.3750000000000000600 ) ) ;
|
||||
#491 = ORIENTED_EDGE ( 'NONE', *, *, #465, .F. ) ;
|
||||
#492 = AXIS2_PLACEMENT_3D ( 'NONE', #564, #340, #846 ) ;
|
||||
#493 = ORIENTED_EDGE ( 'NONE', *, *, #487, .F. ) ;
|
||||
#494 = APPROVAL_PERSON_ORGANIZATION ( #723, #650, #788 ) ;
|
||||
#495 = FACE_OUTER_BOUND ( 'NONE', #293, .T. ) ;
|
||||
#496 = DATE_TIME_ROLE ( 'classification_date' ) ;
|
||||
#497 = CARTESIAN_POINT ( 'NONE', ( -1.583083515873356900, 1.938718160497244600E-016, -0.4350000000000001600 ) ) ;
|
||||
#498 = ORIENTED_EDGE ( 'NONE', *, *, #700, .T. ) ;
|
||||
#499 = AXIS2_PLACEMENT_3D ( 'NONE', #690, #833, #551 ) ;
|
||||
#500 = AXIS2_PLACEMENT_3D ( 'NONE', #298, #303, #449 ) ;
|
||||
#501 = CARTESIAN_POINT ( 'NONE', ( -2.000000000000000000, -4.362804221962446100E-016, 0.3150000000000000600 ) ) ;
|
||||
#502 = ORIENTED_EDGE ( 'NONE', *, *, #505, .F. ) ;
|
||||
#503 = CARTESIAN_POINT ( 'NONE', ( 1.499303859774273800, 0.0000000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#504 = CARTESIAN_POINT ( 'NONE', ( 0.3749999999999999400, 2.375000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#505 = EDGE_CURVE ( 'NONE', #485, #665, #556, .T. ) ;
|
||||
#506 = VERTEX_POINT ( 'NONE', #802 ) ;
|
||||
#507 = CIRCLE ( 'NONE', #267, 1.505773112999396800 ) ;
|
||||
#508 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #548, .NOT_KNOWN. ) ;
|
||||
#509 = DATE_AND_TIME ( #432, #701 ) ;
|
||||
#510 = CIRCLE ( 'NONE', #249, 0.3749999999999999400 ) ;
|
||||
#511 = AXIS2_PLACEMENT_3D ( 'NONE', #836, #187, #120 ) ;
|
||||
#512 = ADVANCED_FACE ( 'NONE', ( #658 ), #313, .T. ) ;
|
||||
#513 = ORIENTED_EDGE ( 'NONE', *, *, #36, .T. ) ;
|
||||
#514 = EDGE_LOOP ( 'NONE', ( #705, #498, #879, #200 ) ) ;
|
||||
#515 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#516 = EDGE_CURVE ( 'NONE', #691, #144, #107, .T. ) ;
|
||||
#517 = PERSON_AND_ORGANIZATION ( #164, #907 ) ;
|
||||
#518 = CIRCLE ( 'NONE', #349, 0.05999999999999997700 ) ;
|
||||
#519 = DIRECTION ( 'NONE', ( -0.1218693434051478800, 1.492469013153039400E-017, 0.9925461516413219800 ) ) ;
|
||||
#520 = EDGE_CURVE ( 'NONE', #665, #554, #411, .T. ) ;
|
||||
#521 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.4276878393956912200 ) ) ;
|
||||
#522 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#523 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #16, #496, ( #899 ) ) ;
|
||||
#524 = CARTESIAN_POINT ( 'NONE', ( -2.750000000000000000, -3.903561672282188800E-016, 0.3150000000000000600 ) ) ;
|
||||
#525 = ORIENTED_EDGE ( 'NONE', *, *, #355, .F. ) ;
|
||||
#526 = CARTESIAN_POINT ( 'NONE', ( 2.375000000000000000, 7.271340369937410300E-016, -0.3750000000000001700 ) ) ;
|
||||
#527 = ORIENTED_EDGE ( 'NONE', *, *, #271, .T. ) ;
|
||||
#528 = CIRCLE ( 'NONE', #410, 1.583083515873356900 ) ;
|
||||
#529 = LOCAL_TIME ( 10, 53, 8.000000000000000000, #542 ) ;
|
||||
#530 = CARTESIAN_POINT ( 'NONE', ( -1.810000000000000100, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#531 = CIRCLE ( 'NONE', #395, 2.940000000000000400 ) ;
|
||||
#532 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#533 = AXIS2_PLACEMENT_3D ( 'NONE', #321, #535, #754 ) ;
|
||||
#534 = ORIENTED_EDGE ( 'NONE', *, *, #585, .T. ) ;
|
||||
#535 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#536 = CARTESIAN_POINT ( 'NONE', ( -0.3749999999999999400, 2.375000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#537 = EDGE_CURVE ( 'NONE', #830, #332, #789, .T. ) ;
|
||||
#538 = ORIENTED_EDGE ( 'NONE', *, *, #585, .F. ) ;
|
||||
#539 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#540 = VERTEX_POINT ( 'NONE', #729 ) ;
|
||||
#541 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#542 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#543 = VECTOR ( 'NONE', #215, 39.37007874015748100 ) ;
|
||||
#544 = EDGE_LOOP ( 'NONE', ( #45, #869 ) ) ;
|
||||
#545 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#546 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#547 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.4350000000000001600 ) ) ;
|
||||
#548 = PRODUCT ( '68095K348_Low-Pressure Steel Unthreaded Pipe Flange', '68095K348_Low-Pressure Steel Unthreaded Pipe Flange', '', ( #571 ) ) ;
|
||||
#549 = CARTESIAN_POINT ( 'NONE', ( 2.908536147974963700E-016, -2.375000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#550 = AXIS2_PLACEMENT_3D ( 'NONE', #163, #670, #92 ) ;
|
||||
#551 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.224646799147354900E-016, 0.0000000000000000000 ) ) ;
|
||||
#552 = EDGE_LOOP ( 'NONE', ( #902, #910, #281, #798 ) ) ;
|
||||
#553 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #459, #782, ( #473 ) ) ;
|
||||
#554 = VERTEX_POINT ( 'NONE', #530 ) ;
|
||||
#555 = VECTOR ( 'NONE', #519, 39.37007874015748100 ) ;
|
||||
#556 = CIRCLE ( 'NONE', #912, 0.05999999999999990800 ) ;
|
||||
#557 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#558 = EDGE_CURVE ( 'NONE', #849, #856, #778, .T. ) ;
|
||||
#559 = AXIS2_PLACEMENT_3D ( 'NONE', #497, #3, #424 ) ;
|
||||
#560 = AXIS2_PLACEMENT_3D ( 'NONE', #328, #697, #623 ) ;
|
||||
#561 = VERTEX_POINT ( 'NONE', #394 ) ;
|
||||
#562 = ORIENTED_EDGE ( 'NONE', *, *, #288, .F. ) ;
|
||||
#563 = ADVANCED_FACE ( 'NONE', ( #73 ), #575, .T. ) ;
|
||||
#564 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.2550000000000000600 ) ) ;
|
||||
#565 = CYLINDRICAL_SURFACE ( 'NONE', #154, 0.3749999999999999400 ) ;
|
||||
#566 = CALENDAR_DATE ( 2023, 7, 2 ) ;
|
||||
#567 = CIRCLE ( 'NONE', #64, 0.3749999999999999400 ) ;
|
||||
#568 = ORIENTED_EDGE ( 'NONE', *, *, #124, .F. ) ;
|
||||
#569 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
|
||||
#570 = EDGE_CURVE ( 'NONE', #578, #407, #840, .T. ) ;
|
||||
#571 = MECHANICAL_CONTEXT ( 'NONE', #279, 'mechanical' ) ;
|
||||
#572 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#573 = ORIENTED_EDGE ( 'NONE', *, *, #133, .T. ) ;
|
||||
#574 = VERTEX_POINT ( 'NONE', #750 ) ;
|
||||
#575 = TOROIDAL_SURFACE ( 'NONE', #758, 2.940000000000000400, 0.05999999999999999800 ) ;
|
||||
#576 = PLANE ( 'NONE', #643 ) ;
|
||||
#577 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.5650000000000001700 ) ) ;
|
||||
#578 = VERTEX_POINT ( 'NONE', #889 ) ;
|
||||
#579 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#580 = AXIS2_PLACEMENT_3D ( 'NONE', #739, #741, #294 ) ;
|
||||
#581 = DIMENSIONAL_EXPONENTS ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ;
|
||||
#582 = CARTESIAN_POINT ( 'NONE', ( -0.3749999999999996700, -2.375000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#583 = ORIENTED_EDGE ( 'NONE', *, *, #717, .T. ) ;
|
||||
#584 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#585 = EDGE_CURVE ( 'NONE', #849, #768, #211, .T. ) ;
|
||||
#586 = EDGE_LOOP ( 'NONE', ( #673, #476, #23, #625 ) ) ;
|
||||
#587 = ADVANCED_FACE ( 'NONE', ( #265 ), #565, .F. ) ;
|
||||
#588 = FACE_OUTER_BOUND ( 'NONE', #316, .T. ) ;
|
||||
#589 = FACE_OUTER_BOUND ( 'NONE', #878, .T. ) ;
|
||||
#590 = ADVANCED_FACE ( 'NONE', ( #609 ), #368, .T. ) ;
|
||||
#591 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#592 = AXIS2_PLACEMENT_3D ( 'NONE', #363, #716, #791 ) ;
|
||||
#593 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#594 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#595 = ORIENTED_EDGE ( 'NONE', *, *, #161, .F. ) ;
|
||||
#596 = ORIENTED_EDGE ( 'NONE', *, *, #779, .F. ) ;
|
||||
#597 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#598 = AXIS2_PLACEMENT_3D ( 'NONE', #577, #141, #361 ) ;
|
||||
#599 = VECTOR ( 'NONE', #451, 39.37007874015748100 ) ;
|
||||
#600 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#601 = AXIS2_PLACEMENT_3D ( 'NONE', #675, #314, #827 ) ;
|
||||
#602 = CARTESIAN_POINT ( 'NONE', ( 1.870000000000000100, 2.290089514405550600E-016, 0.3150000000000000600 ) ) ;
|
||||
#603 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#604 = CARTESIAN_POINT ( 'NONE', ( -2.750000000000000000, -3.903561672282188800E-016, -0.6250000000000003300 ) ) ;
|
||||
#605 = EDGE_CURVE ( 'NONE', #418, #767, #228, .T. ) ;
|
||||
#606 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #687, #415, ( #899 ) ) ;
|
||||
#607 = CIRCLE ( 'NONE', #834, 1.446220343900916900 ) ;
|
||||
#608 = ORIENTED_EDGE ( 'NONE', *, *, #558, .F. ) ;
|
||||
#609 = FACE_OUTER_BOUND ( 'NONE', #792, .T. ) ;
|
||||
#610 = FACE_OUTER_BOUND ( 'NONE', #753, .T. ) ;
|
||||
#611 = CYLINDRICAL_SURFACE ( 'NONE', #439, 1.220000000000000000 ) ;
|
||||
#612 = CARTESIAN_POINT ( 'NONE', ( 2.908536147974963700E-016, -2.375000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#613 = AXIS2_PLACEMENT_3D ( 'NONE', #489, #918, #911 ) ;
|
||||
#614 = VERTEX_POINT ( 'NONE', #680 ) ;
|
||||
#615 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#616 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#617 = ORIENTED_EDGE ( 'NONE', *, *, #885, .F. ) ;
|
||||
#618 = EDGE_CURVE ( 'NONE', #263, #407, #378, .T. ) ;
|
||||
#619 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#620 = ORIENTED_EDGE ( 'NONE', *, *, #749, .F. ) ;
|
||||
#621 = ORIENTED_EDGE ( 'NONE', *, *, #652, .T. ) ;
|
||||
#622 = CYLINDRICAL_SURFACE ( 'NONE', #844, 0.3749999999999999400 ) ;
|
||||
#623 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#624 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#625 = ORIENTED_EDGE ( 'NONE', *, *, #322, .F. ) ;
|
||||
#626 = ORIENTED_EDGE ( 'NONE', *, *, #885, .T. ) ;
|
||||
#627 = CARTESIAN_POINT ( 'NONE', ( 2.908536147974963700E-016, -2.375000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#628 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#629 = AXIS2_PLACEMENT_3D ( 'NONE', #873, #225, #740 ) ;
|
||||
#630 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#631 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#632 = FACE_BOUND ( 'NONE', #166, .T. ) ;
|
||||
#633 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#634 = ORIENTED_EDGE ( 'NONE', *, *, #239, .T. ) ;
|
||||
#635 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#636 = FACE_BOUND ( 'NONE', #871, .T. ) ;
|
||||
#637 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#638 = VECTOR ( 'NONE', #75, 39.37007874015748100 ) ;
|
||||
#639 = EDGE_CURVE ( 'NONE', #144, #574, #507, .T. ) ;
|
||||
#640 = ADVANCED_FACE ( 'NONE', ( #759 ), #881, .F. ) ;
|
||||
#641 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #423, 'distance_accuracy_value', 'NONE');
|
||||
#642 = ADVANCED_FACE ( 'NONE', ( #24 ), #622, .F. ) ;
|
||||
#643 = AXIS2_PLACEMENT_3D ( 'NONE', #360, #287, #440 ) ;
|
||||
#644 = EDGE_LOOP ( 'NONE', ( #653, #837 ) ) ;
|
||||
#645 = ORIENTED_EDGE ( 'NONE', *, *, #167, .T. ) ;
|
||||
#646 = VECTOR ( 'NONE', #123, 39.37007874015748100 ) ;
|
||||
#647 = APPROVAL_ROLE ( '' ) ;
|
||||
#648 = AXIS2_PLACEMENT_3D ( 'NONE', #436, #297, #733 ) ;
|
||||
#649 = ADVANCED_FACE ( 'NONE', ( #677 ), #177, .T. ) ;
|
||||
#650 = APPROVAL ( #853, 'UNSPECIFIED' ) ;
|
||||
#651 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 2.375000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#652 = EDGE_CURVE ( 'NONE', #27, #262, #457, .T. ) ;
|
||||
#653 = ORIENTED_EDGE ( 'NONE', *, *, #88, .F. ) ;
|
||||
#654 = APPROVAL ( #138, 'UNSPECIFIED' ) ;
|
||||
#655 = ORIENTED_EDGE ( 'NONE', *, *, #570, .F. ) ;
|
||||
#656 = FACE_OUTER_BOUND ( 'NONE', #686, .T. ) ;
|
||||
#657 = APPROVAL_PERSON_ORGANIZATION ( #369, #139, #140 ) ;
|
||||
#658 = FACE_OUTER_BOUND ( 'NONE', #181, .T. ) ;
|
||||
#659 = ORIENTED_EDGE ( 'NONE', *, *, #867, .T. ) ;
|
||||
#660 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#661 = AXIS2_PLACEMENT_3D ( 'NONE', #434, #33, #248 ) ;
|
||||
#662 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#663 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000000000, 7.271340369937410300E-016, -0.3750000000000001700 ) ) ;
|
||||
#664 = EDGE_CURVE ( 'NONE', #786, #893, #528, .T. ) ;
|
||||
#665 = VERTEX_POINT ( 'NONE', #769 ) ;
|
||||
#666 = ORIENTED_EDGE ( 'NONE', *, *, #730, .F. ) ;
|
||||
#667 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#668 = FACE_OUTER_BOUND ( 'NONE', #32, .T. ) ;
|
||||
#669 = CARTESIAN_POINT ( 'NONE', ( 1.220000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#670 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#671 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#672 = CARTESIAN_POINT ( 'NONE', ( -1.523530746774877300, 1.865787052440430200E-016, -0.4276878393956912200 ) ) ;
|
||||
#673 = ORIENTED_EDGE ( 'NONE', *, *, #639, .T. ) ;
|
||||
#674 = VERTEX_POINT ( 'NONE', #54 ) ;
|
||||
#675 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3750000000000000600 ) ) ;
|
||||
#676 = AXIS2_PLACEMENT_3D ( 'NONE', #755, #386, #170 ) ;
|
||||
#677 = FACE_OUTER_BOUND ( 'NONE', #218, .T. ) ;
|
||||
#678 = LOCAL_TIME ( 10, 53, 8.000000000000000000, #859 ) ;
|
||||
#679 = FACE_OUTER_BOUND ( 'NONE', #320, .T. ) ;
|
||||
#680 = CARTESIAN_POINT ( 'NONE', ( -1.446220343900916900, 1.807574669048449600E-016, -0.6250000000000001100 ) ) ;
|
||||
#681 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#682 = EDGE_CURVE ( 'NONE', #69, #90, #699, .T. ) ;
|
||||
#683 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#684 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#685 = EDGE_LOOP ( 'NONE', ( #308, #583 ) ) ;
|
||||
#686 = EDGE_LOOP ( 'NONE', ( #479, #50 ) ) ;
|
||||
#687 = PERSON_AND_ORGANIZATION ( #164, #907 ) ;
|
||||
#688 = CIRCLE ( 'NONE', #790, 1.523530746774877300 ) ;
|
||||
#689 = ORIENTED_EDGE ( 'NONE', *, *, #618, .T. ) ;
|
||||
#690 = CARTESIAN_POINT ( 'NONE', ( -1.446220343900916900, 1.771109115020042200E-016, -0.5650000000000001700 ) ) ;
|
||||
#691 = VERTEX_POINT ( 'NONE', #330 ) ;
|
||||
#692 = ORIENTED_EDGE ( 'NONE', *, *, #537, .F. ) ;
|
||||
#693 = AXIS2_PLACEMENT_3D ( 'NONE', #863, #358, #347 ) ;
|
||||
#694 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000000000, 7.271340369937410300E-016, -0.6250000000000003300 ) ) ;
|
||||
#695 = AXIS2_PLACEMENT_3D ( 'NONE', #39, #814, #763 ) ;
|
||||
#696 = ORIENTED_EDGE ( 'NONE', *, *, #505, .T. ) ;
|
||||
#697 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#698 = ORIENTED_EDGE ( 'NONE', *, *, #414, .T. ) ;
|
||||
#699 = CIRCLE ( 'NONE', #560, 1.523530746774877300 ) ;
|
||||
#700 = EDGE_CURVE ( 'NONE', #561, #376, #808, .T. ) ;
|
||||
#701 = LOCAL_TIME ( 10, 53, 8.000000000000000000, #667 ) ;
|
||||
#702 = TOROIDAL_SURFACE ( 'NONE', #629, 2.940000000000000400, 0.05999999999999999800 ) ;
|
||||
#703 = CARTESIAN_POINT ( 'NONE', ( 0.3750000000000002200, -2.375000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#704 = AXIS2_PLACEMENT_3D ( 'NONE', #422, #876, #446 ) ;
|
||||
#705 = ORIENTED_EDGE ( 'NONE', *, *, #10, .F. ) ;
|
||||
#706 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#707 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#708 = AXIS2_PLACEMENT_3D ( 'NONE', #109, #683, #681 ) ;
|
||||
#709 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( $, .METRE. ) );
|
||||
#710 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.499303859774273800, -0.6250000000000001100 ) ) ;
|
||||
#711 = ORIENTED_EDGE ( 'NONE', *, *, #76, .T. ) ;
|
||||
#712 = ORIENTED_EDGE ( 'NONE', *, *, #838, .F. ) ;
|
||||
#713 = CIRCLE ( 'NONE', #307, 1.446220343900916900 ) ;
|
||||
#714 = CIRCLE ( 'NONE', #30, 0.3749999999999999400 ) ;
|
||||
#715 = EDGE_CURVE ( 'NONE', #830, #209, #482, .T. ) ;
|
||||
#716 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#717 = EDGE_CURVE ( 'NONE', #893, #786, #201, .T. ) ;
|
||||
#718 = ADVANCED_FACE ( 'NONE', ( #82 ), #443, .T. ) ;
|
||||
#719 = CC_DESIGN_APPROVAL ( #650, ( #899 ) ) ;
|
||||
#720 = ORIENTED_EDGE ( 'NONE', *, *, #68, .F. ) ;
|
||||
#721 = ORIENTED_EDGE ( 'NONE', *, *, #730, .T. ) ;
|
||||
#722 = FACE_OUTER_BOUND ( 'NONE', #776, .T. ) ;
|
||||
#723 = PERSON_AND_ORGANIZATION ( #164, #907 ) ;
|
||||
#724 = FACE_OUTER_BOUND ( 'NONE', #744, .T. ) ;
|
||||
#725 = ADVANCED_FACE ( 'NONE', ( #857 ), #819, .T. ) ;
|
||||
#726 = AXIS2_PLACEMENT_3D ( 'NONE', #591, #160, #157 ) ;
|
||||
#727 = CARTESIAN_POINT ( 'NONE', ( -3.000000000000000400, 3.673940397442060400E-016, 0.3750000000000000600 ) ) ;
|
||||
#728 = ADVANCED_FACE ( 'NONE', ( #255 ), #419, .F. ) ;
|
||||
#729 = CARTESIAN_POINT ( 'NONE', ( -1.870000000000000100, 0.0000000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#730 = EDGE_CURVE ( 'NONE', #893, #69, #14, .T. ) ;
|
||||
#731 = ORIENTED_EDGE ( 'NONE', *, *, #715, .F. ) ;
|
||||
#732 = VECTOR ( 'NONE', #635, 39.37007874015748100 ) ;
|
||||
#733 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#734 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#735 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#736 = FACE_OUTER_BOUND ( 'NONE', #514, .T. ) ;
|
||||
#737 = ORIENTED_EDGE ( 'NONE', *, *, #55, .T. ) ;
|
||||
#738 = EDGE_LOOP ( 'NONE', ( #103, #659, #862, #617 ) ) ;
|
||||
#739 = CARTESIAN_POINT ( 'NONE', ( 2.940000000000000400, 0.0000000000000000000, -0.3150000000000002800 ) ) ;
|
||||
#740 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#741 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#742 = AXIS2_PLACEMENT_3D ( 'NONE', #234, #49, #545 ) ;
|
||||
#743 = VERTEX_POINT ( 'NONE', #277 ) ;
|
||||
#744 = EDGE_LOOP ( 'NONE', ( #493, #568, #905, #341 ) ) ;
|
||||
#745 = CIRCLE ( 'NONE', #447, 0.3749999999999999400 ) ;
|
||||
#746 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.224646799147359900E-016, 0.0000000000000000000 ) ) ;
|
||||
#747 = FACE_OUTER_BOUND ( 'NONE', #259, .T. ) ;
|
||||
#748 = PLANE ( 'NONE', #121 ) ;
|
||||
#749 = EDGE_CURVE ( 'NONE', #199, #561, #402, .T. ) ;
|
||||
#750 = CARTESIAN_POINT ( 'NONE', ( -1.505773112999396800, 1.854913637758643400E-016, -0.5723121606043081200 ) ) ;
|
||||
#751 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.5723121606043081200 ) ) ;
|
||||
#752 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #548 ) ) ;
|
||||
#753 = EDGE_LOOP ( 'NONE', ( #502, #467, #892, #756 ) ) ;
|
||||
#754 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#755 = CARTESIAN_POINT ( 'NONE', ( -2.375000000000000000, -4.362804221962446100E-016, -0.6250000000000003300 ) ) ;
|
||||
#756 = ORIENTED_EDGE ( 'NONE', *, *, #520, .F. ) ;
|
||||
#757 = VERTEX_POINT ( 'NONE', #504 ) ;
|
||||
#758 = AXIS2_PLACEMENT_3D ( 'NONE', #382, #380, #28 ) ;
|
||||
#759 = FACE_OUTER_BOUND ( 'NONE', #333, .T. ) ;
|
||||
#760 = CARTESIAN_POINT ( 'NONE', ( 0.3750000000000002200, -2.375000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#761 = CIRCLE ( 'NONE', #233, 1.220000000000000000 ) ;
|
||||
#762 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#763 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#764 = EDGE_CURVE ( 'NONE', #437, #772, #336, .T. ) ;
|
||||
#765 = CARTESIAN_POINT ( 'NONE', ( 2.750000000000000000, 7.271340369937410300E-016, 0.3150000000000000600 ) ) ;
|
||||
#766 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.6250000000000000000 ) ) ;
|
||||
#767 = VERTEX_POINT ( 'NONE', #501 ) ;
|
||||
#768 = VERTEX_POINT ( 'NONE', #663 ) ;
|
||||
#769 = CARTESIAN_POINT ( 'NONE', ( 1.810000000000000100, 2.253350110431129800E-016, 0.3750000000000000600 ) ) ;
|
||||
#770 = CIRCLE ( 'NONE', #695, 1.810000000000000100 ) ;
|
||||
#771 = ORIENTED_EDGE ( 'NONE', *, *, #197, .T. ) ;
|
||||
#772 = VERTEX_POINT ( 'NONE', #582 ) ;
|
||||
#773 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.530000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#774 = AXIS2_PLACEMENT_3D ( 'NONE', #526, #101, #243 ) ;
|
||||
#775 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#776 = EDGE_LOOP ( 'NONE', ( #246, #721, #282, #720 ) ) ;
|
||||
#777 = VERTEX_POINT ( 'NONE', #438 ) ;
|
||||
#778 = LINE ( 'NONE', #824, #599 ) ;
|
||||
#779 = EDGE_CURVE ( 'NONE', #772, #262, #128, .T. ) ;
|
||||
#780 = CIRCLE ( 'NONE', #299, 1.870000000000000100 ) ;
|
||||
#781 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#782 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
|
||||
#783 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#784 = CC_DESIGN_APPROVAL ( #139, ( #508 ) ) ;
|
||||
#785 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
|
||||
#786 = VERTEX_POINT ( 'NONE', #371 ) ;
|
||||
#787 = ORIENTED_EDGE ( 'NONE', *, *, #639, .F. ) ;
|
||||
#788 = APPROVAL_ROLE ( '' ) ;
|
||||
#789 = CIRCLE ( 'NONE', #131, 0.3749999999999999400 ) ;
|
||||
#790 = AXIS2_PLACEMENT_3D ( 'NONE', #521, #229, #515 ) ;
|
||||
#791 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#792 = EDGE_LOOP ( 'NONE', ( #80, #620, #737, #214 ) ) ;
|
||||
#793 = ORIENTED_EDGE ( 'NONE', *, *, #118, .T. ) ;
|
||||
#794 = EDGE_CURVE ( 'NONE', #332, #830, #284, .T. ) ;
|
||||
#795 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #202, #272, ( #508 ) ) ;
|
||||
#796 = CYLINDRICAL_SURFACE ( 'NONE', #708, 0.3749999999999999400 ) ;
|
||||
#797 = CARTESIAN_POINT ( 'NONE', ( 2.375000000000000000, 7.271340369937410300E-016, 0.3150000000000000600 ) ) ;
|
||||
#798 = ORIENTED_EDGE ( 'NONE', *, *, #19, .F. ) ;
|
||||
#799 = FACE_BOUND ( 'NONE', #188, .T. ) ;
|
||||
#800 = TOROIDAL_SURFACE ( 'NONE', #704, 1.870000000000000100, 0.05999999999999999800 ) ;
|
||||
#801 = CIRCLE ( 'NONE', #861, 3.000000000000000400 ) ;
|
||||
#802 = CARTESIAN_POINT ( 'NONE', ( -3.000000000000000400, 3.673940397442060400E-016, -0.3150000000000002800 ) ) ;
|
||||
#803 = AXIS2_PLACEMENT_3D ( 'NONE', #619, #183, #470 ) ;
|
||||
#804 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.2550000000000000600 ) ) ;
|
||||
#805 = EDGE_CURVE ( 'NONE', #554, #665, #770, .T. ) ;
|
||||
#806 = ORIENTED_EDGE ( 'NONE', *, *, #25, .T. ) ;
|
||||
#807 = ORIENTED_EDGE ( 'NONE', *, *, #805, .T. ) ;
|
||||
#808 = CIRCLE ( 'NONE', #344, 0.05999999999999990800 ) ;
|
||||
#809 = CARTESIAN_POINT ( 'NONE', ( 3.000000000000000400, 0.0000000000000000000, -0.3150000000000002800 ) ) ;
|
||||
#810 = ADVANCED_FACE ( 'NONE', ( #8 ), #145, .F. ) ;
|
||||
#811 = CLOSED_SHELL ( 'NONE', ( #159, #151, #563, #864, #512, #375, #5, #642, #85, #269, #810, #409, #718, #870, #420, #291, #224, #649, #848, #728, #640, #283, #587, #725, #435, #426, #590, #874 ) ) ;
|
||||
#812 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#813 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#814 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#815 = AXIS2_PLACEMENT_3D ( 'NONE', #448, #26, #15 ) ;
|
||||
#816 = ORIENTED_EDGE ( 'NONE', *, *, #150, .T. ) ;
|
||||
#817 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.3150000000000000600 ) ) ;
|
||||
#818 = ORIENTED_EDGE ( 'NONE', *, *, #355, .T. ) ;
|
||||
#819 = TOROIDAL_SURFACE ( 'NONE', #598, 1.446220343900916900, 0.05999999999999999800 ) ;
|
||||
#820 = CIRCLE ( 'NONE', #500, 0.3749999999999999400 ) ;
|
||||
#821 = FACE_OUTER_BOUND ( 'NONE', #475, .T. ) ;
|
||||
#822 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#823 = EDGE_CURVE ( 'NONE', #27, #437, #745, .T. ) ;
|
||||
#824 = CARTESIAN_POINT ( 'NONE', ( 2.000000000000000000, 7.730582919617667100E-016, -0.6250000000000003300 ) ) ;
|
||||
#825 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#826 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#827 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#828 = ORIENTED_EDGE ( 'NONE', *, *, #405, .F. ) ;
|
||||
#829 = CC_DESIGN_APPROVAL ( #654, ( #473 ) ) ;
|
||||
#830 = VERTEX_POINT ( 'NONE', #536 ) ;
|
||||
#831 = CIRCLE ( 'NONE', #580, 0.05999999999999997700 ) ;
|
||||
#832 = CARTESIAN_POINT ( 'NONE', ( 2.908536147974963700E-016, -2.375000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#833 = DIRECTION ( 'NONE', ( 1.224646799147353200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#834 = AXIS2_PLACEMENT_3D ( 'NONE', #165, #237, #458 ) ;
|
||||
#835 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#836 = CARTESIAN_POINT ( 'NONE', ( 2.908536147974963700E-016, -2.375000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#837 = ORIENTED_EDGE ( 'NONE', *, *, #618, .F. ) ;
|
||||
#838 = EDGE_CURVE ( 'NONE', #574, #69, #429, .T. ) ;
|
||||
#839 = ORIENTED_EDGE ( 'NONE', *, *, #913, .T. ) ;
|
||||
#840 = LINE ( 'NONE', #311, #48 ) ;
|
||||
#841 = CALENDAR_DATE ( 2023, 7, 2 ) ;
|
||||
#842 = FACE_BOUND ( 'NONE', #387, .T. ) ;
|
||||
#843 = CARTESIAN_POINT ( 'NONE', ( 0.3749999999999999400, 2.375000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#844 = AXIS2_PLACEMENT_3D ( 'NONE', #627, #630, #775 ) ;
|
||||
#845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#846 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#847 = ORIENTED_EDGE ( 'NONE', *, *, #465, .T. ) ;
|
||||
#848 = ADVANCED_FACE ( 'NONE', ( #190, #656, #636, #354, #169, #906 ), #748, .F. ) ;
|
||||
#849 = VERTEX_POINT ( 'NONE', #108 ) ;
|
||||
#850 = EDGE_CURVE ( 'NONE', #743, #418, #242, .T. ) ;
|
||||
#851 = CIRCLE ( 'NONE', #81, 0.3749999999999999400 ) ;
|
||||
#852 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#853 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#854 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#855 = ORIENTED_EDGE ( 'NONE', *, *, #898, .F. ) ;
|
||||
#856 = VERTEX_POINT ( 'NONE', #38 ) ;
|
||||
#857 = FACE_OUTER_BOUND ( 'NONE', #552, .T. ) ;
|
||||
#858 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#859 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#860 = CIRCLE ( 'NONE', #462, 0.3749999999999999400 ) ;
|
||||
#861 = AXIS2_PLACEMENT_3D ( 'NONE', #804, #302, #812 ) ;
|
||||
#862 = ORIENTED_EDGE ( 'NONE', *, *, #372, .T. ) ;
|
||||
#863 = CARTESIAN_POINT ( 'NONE', ( 2.375000000000000000, 7.271340369937410300E-016, 0.3150000000000000600 ) ) ;
|
||||
#864 = ADVANCED_FACE ( 'NONE', ( #722 ), #104, .F. ) ;
|
||||
#865 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#866 = MANIFOLD_SOLID_BREP ( 'Fillet1', #811 ) ;
|
||||
#867 = EDGE_CURVE ( 'NONE', #506, #777, #309, .T. ) ;
|
||||
#868 = DIRECTION ( 'NONE', ( 1.224646799147353200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#869 = ORIENTED_EDGE ( 'NONE', *, *, #288, .T. ) ;
|
||||
#870 = ADVANCED_FACE ( 'NONE', ( #588, #799, #219, #388, #632, #117 ), #576, .F. ) ;
|
||||
#871 = EDGE_LOOP ( 'NONE', ( #428, #62 ) ) ;
|
||||
#872 = LINE ( 'NONE', #413, #884 ) ;
|
||||
#873 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.3150000000000002800 ) ) ;
|
||||
#874 = ADVANCED_FACE ( 'NONE', ( #610 ), #800, .F. ) ;
|
||||
#875 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#876 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#877 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#878 = EDGE_LOOP ( 'NONE', ( #692, #385, #855, #400 ) ) ;
|
||||
#879 = ORIENTED_EDGE ( 'NONE', *, *, #372, .F. ) ;
|
||||
#880 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 2.375000000000000000, -0.3750000000000001700 ) ) ;
|
||||
#881 = CYLINDRICAL_SURFACE ( 'NONE', #511, 0.3749999999999999400 ) ;
|
||||
#882 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#883 = CALENDAR_DATE ( 2023, 7, 2 ) ;
|
||||
#884 = VECTOR ( 'NONE', #196, 39.37007874015748100 ) ;
|
||||
#885 = EDGE_CURVE ( 'NONE', #31, #376, #342, .T. ) ;
|
||||
#886 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#887 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#888 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#889 = CARTESIAN_POINT ( 'NONE', ( 1.220000000000000000, 0.0000000000000000000, -0.6250000000000000000 ) ) ;
|
||||
#890 = AXIS2_PLACEMENT_3D ( 'NONE', #452, #822, #603 ) ;
|
||||
#891 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#892 = ORIENTED_EDGE ( 'NONE', *, *, #212, .T. ) ;
|
||||
#893 = VERTEX_POINT ( 'NONE', #230 ) ;
|
||||
#894 = APPROVAL_PERSON_ORGANIZATION ( #83, #654, #647 ) ;
|
||||
#895 = CARTESIAN_POINT ( 'NONE', ( 2.375000000000000000, 7.271340369937410300E-016, -0.3750000000000001700 ) ) ;
|
||||
#896 = CIRCLE ( 'NONE', #742, 1.220000000000000000 ) ;
|
||||
#897 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#898 = EDGE_CURVE ( 'NONE', #757, #209, #820, .T. ) ;
|
||||
#899 = SECURITY_CLASSIFICATION ( '', '', #206 ) ;
|
||||
#900 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#901 = EDGE_CURVE ( 'NONE', #614, #691, #713, .T. ) ;
|
||||
#902 = ORIENTED_EDGE ( 'NONE', *, *, #178, .F. ) ;
|
||||
#903 = CARTESIAN_POINT ( 'NONE', ( -0.3749999999999999400, 2.375000000000000000, -0.6250000000000003300 ) ) ;
|
||||
#904 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #641 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #423, #63, #488 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) );
|
||||
#905 = ORIENTED_EDGE ( 'NONE', *, *, #405, .T. ) ;
|
||||
#906 = FACE_BOUND ( 'NONE', #240, .T. ) ;
|
||||
#907 = ORGANIZATION ( 'UNSPECIFIED', 'UNSPECIFIED', '' ) ;
|
||||
#908 = FACE_BOUND ( 'NONE', #644, .T. ) ;
|
||||
#909 = DIRECTION ( 'NONE', ( -1.224646799147353200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#910 = ORIENTED_EDGE ( 'NONE', *, *, #25, .F. ) ;
|
||||
#911 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#912 = AXIS2_PLACEMENT_3D ( 'NONE', #232, #179, #390 ) ;
|
||||
#913 = EDGE_CURVE ( 'NONE', #332, #757, #136, .T. ) ;
|
||||
#914 = ORIENTED_EDGE ( 'NONE', *, *, #338, .T. ) ;
|
||||
#915 = VECTOR ( 'NONE', #9, 39.37007874015748100 ) ;
|
||||
#916 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#917 = CIRCLE ( 'NONE', #191, 1.220000000000000000 ) ;
|
||||
#918 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
@ -0,0 +1,269 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION (( 'STEP AP203' ),
|
||||
'1' );
|
||||
FILE_NAME ('9472K188_Oil-Resistant Aramid-Buna-N Gasket.STEP',
|
||||
'2022-11-17T21:46:33',
|
||||
( 'Administrator' ),
|
||||
( 'Managed by Terraform' ),
|
||||
'SwSTEP 2.0',
|
||||
'SolidWorks 2017',
|
||||
'' );
|
||||
FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' ));
|
||||
ENDSEC;
|
||||
|
||||
DATA;
|
||||
#1 = EDGE_CURVE ( 'NONE', #251, #149, #124, .T. ) ;
|
||||
#2 = PERSON_AND_ORGANIZATION ( #159, #138 ) ;
|
||||
#3 = SECURITY_CLASSIFICATION ( '', '', #150 ) ;
|
||||
#4 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#5 = AXIS2_PLACEMENT_3D ( 'NONE', #243, #143, #82 ) ;
|
||||
#6 = DATE_AND_TIME ( #211, #125 ) ;
|
||||
#7 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) );
|
||||
#8 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #87 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #64, #168, #7 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) );
|
||||
#9 = EDGE_LOOP ( 'NONE', ( #55, #200 ) ) ;
|
||||
#10 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01562500000000000000 ) ) ;
|
||||
#11 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#12 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#13 = CALENDAR_DATE ( 2022, 17, 11 ) ;
|
||||
#14 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #172 ) ;
|
||||
#15 = CIRCLE ( 'NONE', #186, 1.187500000000000000 ) ;
|
||||
#16 = DIMENSIONAL_EXPONENTS ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ;
|
||||
#17 = EDGE_CURVE ( 'NONE', #149, #114, #236, .T. ) ;
|
||||
#18 = ORIENTED_EDGE ( 'NONE', *, *, #178, .T. ) ;
|
||||
#19 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#20 = AXIS2_PLACEMENT_3D ( 'NONE', #135, #198, #19 ) ;
|
||||
#21 = CIRCLE ( 'NONE', #91, 2.062500000000000000 ) ;
|
||||
#22 = LOCAL_TIME ( 15, 46, 33.00000000000000000, #221 ) ;
|
||||
#23 = CARTESIAN_POINT ( 'NONE', ( -2.062500000000000000, 0.0000000000000000000, -0.01562500000000000000 ) ) ;
|
||||
#24 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#25 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01562500000000000000 ) ) ;
|
||||
#26 = CARTESIAN_POINT ( 'NONE', ( 2.062500000000000000, 2.525834023241416400E-016, -0.01562500000000000000 ) ) ;
|
||||
#27 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ;
|
||||
#28 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
|
||||
#29 = ADVANCED_BREP_SHAPE_REPRESENTATION ( '9472K188_Oil-Resistant Aramid-Buna-N Gasket', ( #118, #194 ), #8 ) ;
|
||||
#30 = AXIS2_PLACEMENT_3D ( 'NONE', #235, #39, #216 ) ;
|
||||
#31 = ADVANCED_FACE ( 'NONE', ( #40 ), #192, .F. ) ;
|
||||
#32 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #6, #212, ( #3 ) ) ;
|
||||
#33 = ORIENTED_EDGE ( 'NONE', *, *, #171, .F. ) ;
|
||||
#34 = PERSON_AND_ORGANIZATION ( #159, #138 ) ;
|
||||
#35 = ADVANCED_FACE ( 'NONE', ( #232 ), #132, .T. ) ;
|
||||
#36 = CIRCLE ( 'NONE', #44, 1.187500000000000000 ) ;
|
||||
#37 = PERSON_AND_ORGANIZATION ( #159, #138 ) ;
|
||||
#38 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#39 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#40 = FACE_OUTER_BOUND ( 'NONE', #54, .T. ) ;
|
||||
#41 = PERSON_AND_ORGANIZATION ( #159, #138 ) ;
|
||||
#42 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #139, .NOT_KNOWN. ) ;
|
||||
#43 = EDGE_LOOP ( 'NONE', ( #242, #57 ) ) ;
|
||||
#44 = AXIS2_PLACEMENT_3D ( 'NONE', #131, #134, #38 ) ;
|
||||
#45 = ORIENTED_EDGE ( 'NONE', *, *, #71, .T. ) ;
|
||||
#46 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
|
||||
#47 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ;
|
||||
#48 = ORIENTED_EDGE ( 'NONE', *, *, #99, .F. ) ;
|
||||
#49 = PERSON_AND_ORGANIZATION ( #159, #138 ) ;
|
||||
#50 = DATE_TIME_ROLE ( 'creation_date' ) ;
|
||||
#51 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #41, #210, ( #42 ) ) ;
|
||||
#52 = ORIENTED_EDGE ( 'NONE', *, *, #115, .T. ) ;
|
||||
#53 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #58, #148, ( #139 ) ) ;
|
||||
#54 = EDGE_LOOP ( 'NONE', ( #116, #188, #179, #48 ) ) ;
|
||||
#55 = ORIENTED_EDGE ( 'NONE', *, *, #59, .T. ) ;
|
||||
#56 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #42, #225 ) ;
|
||||
#57 = ORIENTED_EDGE ( 'NONE', *, *, #140, .F. ) ;
|
||||
#58 = PERSON_AND_ORGANIZATION ( #159, #138 ) ;
|
||||
#59 = EDGE_CURVE ( 'NONE', #149, #251, #103, .T. ) ;
|
||||
#60 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#61 = FACE_BOUND ( 'NONE', #80, .T. ) ;
|
||||
#62 = ORIENTED_EDGE ( 'NONE', *, *, #99, .T. ) ;
|
||||
#63 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#64 =( CONVERSION_BASED_UNIT ( 'INCH', #155 ) LENGTH_UNIT ( ) NAMED_UNIT ( #16 ) );
|
||||
#65 = ORIENTED_EDGE ( 'NONE', *, *, #111, .F. ) ;
|
||||
#66 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#67 = DATE_AND_TIME ( #13, #183 ) ;
|
||||
#68 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#69 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#70 = APPROVAL_ROLE ( '' ) ;
|
||||
#71 = EDGE_CURVE ( 'NONE', #251, #176, #249, .T. ) ;
|
||||
#72 = LINE ( 'NONE', #189, #201 ) ;
|
||||
#73 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#74 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #67, #50, ( #56 ) ) ;
|
||||
#75 = ORIENTED_EDGE ( 'NONE', *, *, #17, .T. ) ;
|
||||
#76 = PERSON_AND_ORGANIZATION ( #159, #138 ) ;
|
||||
#77 = EDGE_CURVE ( 'NONE', #160, #213, #36, .T. ) ;
|
||||
#78 = ADVANCED_FACE ( 'NONE', ( #141 ), #128, .F. ) ;
|
||||
#79 = FACE_BOUND ( 'NONE', #43, .T. ) ;
|
||||
#80 = EDGE_LOOP ( 'NONE', ( #52, #62 ) ) ;
|
||||
#81 = PLANE ( 'NONE', #157 ) ;
|
||||
#82 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#83 = FACE_OUTER_BOUND ( 'NONE', #9, .T. ) ;
|
||||
#84 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#85 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #244, #27, ( #42 ) ) ;
|
||||
#86 = CLOSED_SHELL ( 'NONE', ( #78, #35, #92, #177, #130, #31 ) ) ;
|
||||
#87 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #64, 'distance_accuracy_value', 'NONE');
|
||||
#88 = APPROVAL_ROLE ( '' ) ;
|
||||
#89 = CIRCLE ( 'NONE', #203, 1.187500000000000000 ) ;
|
||||
#90 = APPROVAL_PERSON_ORGANIZATION ( #76, #153, #88 ) ;
|
||||
#91 = AXIS2_PLACEMENT_3D ( 'NONE', #165, #208, #205 ) ;
|
||||
#92 = ADVANCED_FACE ( 'NONE', ( #83, #79 ), #81, .T. ) ;
|
||||
#93 = ORIENTED_EDGE ( 'NONE', *, *, #71, .F. ) ;
|
||||
#94 = DATE_AND_TIME ( #145, #120 ) ;
|
||||
#95 = ORIENTED_EDGE ( 'NONE', *, *, #115, .F. ) ;
|
||||
#96 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#97 = AXIS2_PLACEMENT_3D ( 'NONE', #12, #63, #162 ) ;
|
||||
#98 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#99 = EDGE_CURVE ( 'NONE', #163, #107, #89, .T. ) ;
|
||||
#100 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( $, .METRE. ) );
|
||||
#101 = CARTESIAN_POINT ( 'NONE', ( 2.062500000000000000, 2.525834023241416400E-016, 0.01562500000000000000 ) ) ;
|
||||
#102 = CARTESIAN_POINT ( 'NONE', ( 1.187500000000000000, 1.454268073987481900E-016, 0.01562500000000000000 ) ) ;
|
||||
#103 = CIRCLE ( 'NONE', #105, 2.062500000000000000 ) ;
|
||||
#104 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#105 = AXIS2_PLACEMENT_3D ( 'NONE', #147, #73, #152 ) ;
|
||||
#106 = CYLINDRICAL_SURFACE ( 'NONE', #97, 2.062500000000000000 ) ;
|
||||
#107 = VERTEX_POINT ( 'NONE', #240 ) ;
|
||||
#108 = AXIS2_PLACEMENT_3D ( 'NONE', #174, #127, #245 ) ;
|
||||
#109 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #56 ) ;
|
||||
#110 = ORIENTED_EDGE ( 'NONE', *, *, #1, .F. ) ;
|
||||
#111 = EDGE_CURVE ( 'NONE', #114, #176, #21, .T. ) ;
|
||||
#112 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#113 = FACE_OUTER_BOUND ( 'NONE', #209, .T. ) ;
|
||||
#114 = VERTEX_POINT ( 'NONE', #23 ) ;
|
||||
#115 = EDGE_CURVE ( 'NONE', #107, #163, #246, .T. ) ;
|
||||
#116 = ORIENTED_EDGE ( 'NONE', *, *, #193, .F. ) ;
|
||||
#117 = CALENDAR_DATE ( 2022, 17, 11 ) ;
|
||||
#118 = MANIFOLD_SOLID_BREP ( 'Boss-Extrude1', #86 ) ;
|
||||
#119 = AXIS2_PLACEMENT_3D ( 'NONE', #234, #4, #112 ) ;
|
||||
#120 = LOCAL_TIME ( 15, 46, 33.00000000000000000, #96 ) ;
|
||||
#121 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01562500000000000000 ) ) ;
|
||||
#122 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#123 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#124 = CIRCLE ( 'NONE', #30, 2.062500000000000000 ) ;
|
||||
#125 = LOCAL_TIME ( 15, 46, 33.00000000000000000, #233 ) ;
|
||||
#126 = MECHANICAL_CONTEXT ( 'NONE', #46, 'mechanical' ) ;
|
||||
#127 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#128 = CYLINDRICAL_SURFACE ( 'NONE', #108, 1.187500000000000000 ) ;
|
||||
#129 = EDGE_LOOP ( 'NONE', ( #182, #202, #95, #33 ) ) ;
|
||||
#130 = ADVANCED_FACE ( 'NONE', ( #238 ), #106, .T. ) ;
|
||||
#131 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#132 = CYLINDRICAL_SURFACE ( 'NONE', #20, 2.062500000000000000 ) ;
|
||||
#133 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#134 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#135 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#136 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #37, #47, ( #3 ) ) ;
|
||||
#137 = EDGE_LOOP ( 'NONE', ( #110, #45, #18, #227 ) ) ;
|
||||
#138 = ORGANIZATION ( 'UNSPECIFIED', 'UNSPECIFIED', '' ) ;
|
||||
#139 = PRODUCT ( '9472K188_Oil-Resistant Aramid-Buna-N Gasket', '9472K188_Oil-Resistant Aramid-Buna-N Gasket', '', ( #126 ) ) ;
|
||||
#140 = EDGE_CURVE ( 'NONE', #213, #160, #15, .T. ) ;
|
||||
#141 = FACE_OUTER_BOUND ( 'NONE', #129, .T. ) ;
|
||||
#142 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#143 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#144 = ORIENTED_EDGE ( 'NONE', *, *, #59, .F. ) ;
|
||||
#145 = CALENDAR_DATE ( 2022, 17, 11 ) ;
|
||||
#146 = CARTESIAN_POINT ( 'NONE', ( -1.187500000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#147 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#148 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ;
|
||||
#149 = VERTEX_POINT ( 'NONE', #167 ) ;
|
||||
#150 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ;
|
||||
#151 = APPROVAL_DATE_TIME ( #180, #153 ) ;
|
||||
#152 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#153 = APPROVAL ( #170, 'UNSPECIFIED' ) ;
|
||||
#154 = ORIENTED_EDGE ( 'NONE', *, *, #178, .F. ) ;
|
||||
#155 = LENGTH_MEASURE_WITH_UNIT ( LENGTH_MEASURE( 0.02539999999999999900 ), #100 );
|
||||
#156 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#157 = AXIS2_PLACEMENT_3D ( 'NONE', #68, #185, #206 ) ;
|
||||
#158 = CARTESIAN_POINT ( 'NONE', ( -2.062500000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#159 = PERSON ( 'UNSPECIFIED', 'UNSPECIFIED', 'UNSPECIFIED', ('UNSPECIFIED'), ('UNSPECIFIED'), ('UNSPECIFIED') ) ;
|
||||
#160 = VERTEX_POINT ( 'NONE', #146 ) ;
|
||||
#161 = SHAPE_DEFINITION_REPRESENTATION ( #109, #29 ) ;
|
||||
#162 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#163 = VERTEX_POINT ( 'NONE', #226 ) ;
|
||||
#164 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#165 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01562500000000000000 ) ) ;
|
||||
#166 = APPROVAL ( #229, 'UNSPECIFIED' ) ;
|
||||
#167 = CARTESIAN_POINT ( 'NONE', ( -2.062500000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#168 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) );
|
||||
#169 = VECTOR ( 'NONE', #156, 39.37007874015748100 ) ;
|
||||
#170 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#171 = EDGE_CURVE ( 'NONE', #160, #107, #217, .T. ) ;
|
||||
#172 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
|
||||
#173 = VECTOR ( 'NONE', #122, 39.37007874015748100 ) ;
|
||||
#174 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#175 = APPROVAL ( #69, 'UNSPECIFIED' ) ;
|
||||
#176 = VERTEX_POINT ( 'NONE', #26 ) ;
|
||||
#177 = ADVANCED_FACE ( 'NONE', ( #113, #61 ), #247, .F. ) ;
|
||||
#178 = EDGE_CURVE ( 'NONE', #176, #114, #252, .T. ) ;
|
||||
#179 = ORIENTED_EDGE ( 'NONE', *, *, #171, .T. ) ;
|
||||
#180 = DATE_AND_TIME ( #228, #22 ) ;
|
||||
#181 = AXIS2_PLACEMENT_3D ( 'NONE', #25, #187, #11 ) ;
|
||||
#182 = ORIENTED_EDGE ( 'NONE', *, *, #77, .T. ) ;
|
||||
#183 = LOCAL_TIME ( 15, 46, 33.00000000000000000, #133 ) ;
|
||||
#184 = APPROVAL_DATE_TIME ( #94, #175 ) ;
|
||||
#185 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#186 = AXIS2_PLACEMENT_3D ( 'NONE', #66, #224, #142 ) ;
|
||||
#187 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#188 = ORIENTED_EDGE ( 'NONE', *, *, #140, .T. ) ;
|
||||
#189 = CARTESIAN_POINT ( 'NONE', ( 1.187500000000000000, 1.454268073987481900E-016, 0.01562500000000000000 ) ) ;
|
||||
#190 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #46 ) ;
|
||||
#191 = APPROVAL_ROLE ( '' ) ;
|
||||
#192 = CYLINDRICAL_SURFACE ( 'NONE', #119, 1.187500000000000000 ) ;
|
||||
#193 = EDGE_CURVE ( 'NONE', #213, #163, #72, .T. ) ;
|
||||
#194 = AXIS2_PLACEMENT_3D ( 'NONE', #84, #98, #123 ) ;
|
||||
#195 = LOCAL_TIME ( 15, 46, 33.00000000000000000, #237 ) ;
|
||||
#196 = VECTOR ( 'NONE', #104, 39.37007874015748100 ) ;
|
||||
#197 = APPROVAL_DATE_TIME ( #214, #166 ) ;
|
||||
#198 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#199 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #139 ) ) ;
|
||||
#200 = ORIENTED_EDGE ( 'NONE', *, *, #1, .T. ) ;
|
||||
#201 = VECTOR ( 'NONE', #222, 39.37007874015748100 ) ;
|
||||
#202 = ORIENTED_EDGE ( 'NONE', *, *, #193, .T. ) ;
|
||||
#203 = AXIS2_PLACEMENT_3D ( 'NONE', #121, #248, #164 ) ;
|
||||
#204 = CARTESIAN_POINT ( 'NONE', ( 2.062500000000000000, 2.525834023241416400E-016, 0.01562500000000000000 ) ) ;
|
||||
#205 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#206 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#207 = CC_DESIGN_APPROVAL ( #166, ( #56 ) ) ;
|
||||
#208 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#209 = EDGE_LOOP ( 'NONE', ( #65, #154 ) ) ;
|
||||
#210 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
|
||||
#211 = CALENDAR_DATE ( 2022, 17, 11 ) ;
|
||||
#212 = DATE_TIME_ROLE ( 'classification_date' ) ;
|
||||
#213 = VERTEX_POINT ( 'NONE', #102 ) ;
|
||||
#214 = DATE_AND_TIME ( #117, #195 ) ;
|
||||
#215 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #34, #28, ( #56 ) ) ;
|
||||
#216 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#217 = LINE ( 'NONE', #241, #173 ) ;
|
||||
#218 = ORIENTED_EDGE ( 'NONE', *, *, #111, .T. ) ;
|
||||
#219 = CC_DESIGN_SECURITY_CLASSIFICATION ( #3, ( #42 ) ) ;
|
||||
#220 = EDGE_LOOP ( 'NONE', ( #93, #144, #75, #218 ) ) ;
|
||||
#221 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#222 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#223 = CC_DESIGN_APPROVAL ( #153, ( #3 ) ) ;
|
||||
#224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#225 = DESIGN_CONTEXT ( 'detailed design', #172, 'design' ) ;
|
||||
#226 = CARTESIAN_POINT ( 'NONE', ( 1.187500000000000000, 1.454268073987481900E-016, -0.01562500000000000000 ) ) ;
|
||||
#227 = ORIENTED_EDGE ( 'NONE', *, *, #17, .F. ) ;
|
||||
#228 = CALENDAR_DATE ( 2022, 17, 11 ) ;
|
||||
#229 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#230 = APPROVAL_PERSON_ORGANIZATION ( #2, #175, #191 ) ;
|
||||
#231 = AXIS2_PLACEMENT_3D ( 'NONE', #10, #24, #60 ) ;
|
||||
#232 = FACE_OUTER_BOUND ( 'NONE', #137, .T. ) ;
|
||||
#233 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#234 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#235 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#236 = LINE ( 'NONE', #158, #169 ) ;
|
||||
#237 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#238 = FACE_OUTER_BOUND ( 'NONE', #220, .T. ) ;
|
||||
#239 = APPROVAL_PERSON_ORGANIZATION ( #49, #166, #70 ) ;
|
||||
#240 = CARTESIAN_POINT ( 'NONE', ( -1.187500000000000000, 0.0000000000000000000, -0.01562500000000000000 ) ) ;
|
||||
#241 = CARTESIAN_POINT ( 'NONE', ( -1.187500000000000000, 0.0000000000000000000, 0.01562500000000000000 ) ) ;
|
||||
#242 = ORIENTED_EDGE ( 'NONE', *, *, #77, .F. ) ;
|
||||
#243 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01562500000000000000 ) ) ;
|
||||
#244 = PERSON_AND_ORGANIZATION ( #159, #138 ) ;
|
||||
#245 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#246 = CIRCLE ( 'NONE', #231, 1.187500000000000000 ) ;
|
||||
#247 = PLANE ( 'NONE', #181 ) ;
|
||||
#248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#249 = LINE ( 'NONE', #101, #196 ) ;
|
||||
#250 = CC_DESIGN_APPROVAL ( #175, ( #42 ) ) ;
|
||||
#251 = VERTEX_POINT ( 'NONE', #204 ) ;
|
||||
#252 = CIRCLE ( 'NONE', #5, 2.062500000000000000 ) ;
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
@ -0,0 +1,373 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION (( 'STEP AP203' ),
|
||||
'1' );
|
||||
FILE_NAME ('98017A257_18-8 Stainless Steel Mil. Spec. Washer.STEP',
|
||||
'2023-09-12T13:39:25',
|
||||
( 'Administrator' ),
|
||||
( 'Managed by Terraform' ),
|
||||
'SwSTEP 2.0',
|
||||
'SolidWorks 2017',
|
||||
'' );
|
||||
FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' ));
|
||||
ENDSEC;
|
||||
|
||||
DATA;
|
||||
#1 = CARTESIAN_POINT ( 'NONE', ( 0.3200000000000000100, 3.918869757271530800E-017, -0.01600000000000001800 ) ) ;
|
||||
#2 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#3 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01280000000000027500 ) ) ;
|
||||
#4 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#5 = FACE_BOUND ( 'NONE', #226, .T. ) ;
|
||||
#6 = APPROVAL ( #354, 'UNSPECIFIED' ) ;
|
||||
#7 = LOCAL_TIME ( 8, 39, 25.00000000000000000, #120 ) ;
|
||||
#8 = CARTESIAN_POINT ( 'NONE', ( -0.3200000000000000100, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#9 = CIRCLE ( 'NONE', #260, 0.3200000000000000100 ) ;
|
||||
#10 = VERTEX_POINT ( 'NONE', #20 ) ;
|
||||
#11 = AXIS2_PLACEMENT_3D ( 'NONE', #108, #220, #275 ) ;
|
||||
#12 = CYLINDRICAL_SURFACE ( 'NONE', #11, 0.3200000000000000100 ) ;
|
||||
#13 = FACE_OUTER_BOUND ( 'NONE', #312, .T. ) ;
|
||||
#14 = VERTEX_POINT ( 'NONE', #1 ) ;
|
||||
#15 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#16 = ORIENTED_EDGE ( 'NONE', *, *, #31, .T. ) ;
|
||||
#17 = AXIS2_PLACEMENT_3D ( 'NONE', #130, #23, #272 ) ;
|
||||
#18 = ORIENTED_EDGE ( 'NONE', *, *, #188, .T. ) ;
|
||||
#19 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#20 = CARTESIAN_POINT ( 'NONE', ( 0.3200000000000000100, 3.918869757271530800E-017, 0.01280000000000027500 ) ) ;
|
||||
#21 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#22 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #84 ) ) ;
|
||||
#23 = DIRECTION ( 'NONE', ( 1.224646799147353200E-016, 1.000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#24 = CALENDAR_DATE ( 2023, 12, 9 ) ;
|
||||
#25 = FACE_OUTER_BOUND ( 'NONE', #137, .T. ) ;
|
||||
#26 = AXIS2_PLACEMENT_3D ( 'NONE', #131, #306, #147 ) ;
|
||||
#27 = CARTESIAN_POINT ( 'NONE', ( -0.3200000000000000100, 0.0000000000000000000, -0.01600000000000001800 ) ) ;
|
||||
#28 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#29 = CIRCLE ( 'NONE', #250, 0.5939999999999999700 ) ;
|
||||
#30 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#31 = EDGE_CURVE ( 'NONE', #223, #296, #29, .T. ) ;
|
||||
#32 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#33 = CALENDAR_DATE ( 2023, 12, 9 ) ;
|
||||
#34 = VERTEX_POINT ( 'NONE', #27 ) ;
|
||||
#35 = PERSON_AND_ORGANIZATION ( #203, #57 ) ;
|
||||
#36 = CALENDAR_DATE ( 2023, 12, 9 ) ;
|
||||
#37 = ORIENTED_EDGE ( 'NONE', *, *, #230, .F. ) ;
|
||||
#38 = ORIENTED_EDGE ( 'NONE', *, *, #341, .T. ) ;
|
||||
#39 = AXIS2_PLACEMENT_3D ( 'NONE', #182, #123, #21 ) ;
|
||||
#40 = VERTEX_POINT ( 'NONE', #346 ) ;
|
||||
#41 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #54 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #73, #214, #268 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) );
|
||||
#42 = ADVANCED_FACE ( 'NONE', ( #5, #25 ), #238, .T. ) ;
|
||||
#43 = TOROIDAL_SURFACE ( 'NONE', #200, 0.3271554175279990400, 0.009600000000000000900 ) ;
|
||||
#44 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01280000000000013800 ) ) ;
|
||||
#45 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.224646799147356200E-016, 0.0000000000000000000 ) ) ;
|
||||
#46 = EDGE_CURVE ( 'NONE', #223, #271, #286, .T. ) ;
|
||||
#47 = LOCAL_TIME ( 8, 39, 25.00000000000000000, #169 ) ;
|
||||
#48 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#49 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #241 ) ;
|
||||
#50 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#51 = CYLINDRICAL_SURFACE ( 'NONE', #274, 0.5939999999999999700 ) ;
|
||||
#52 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #90, #126, ( #248 ) ) ;
|
||||
#53 = ORIENTED_EDGE ( 'NONE', *, *, #349, .F. ) ;
|
||||
#54 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #73, 'distance_accuracy_value', 'NONE');
|
||||
#55 = CARTESIAN_POINT ( 'NONE', ( 0.3200000000000000100, 3.918869757271530800E-017, 0.01599999999999998300 ) ) ;
|
||||
#56 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#57 = ORGANIZATION ( 'UNSPECIFIED', 'UNSPECIFIED', '' ) ;
|
||||
#58 = ORIENTED_EDGE ( 'NONE', *, *, #93, .F. ) ;
|
||||
#59 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#60 = DATE_AND_TIME ( #36, #7 ) ;
|
||||
#61 = EDGE_CURVE ( 'NONE', #34, #14, #235, .T. ) ;
|
||||
#62 = EDGE_LOOP ( 'NONE', ( #282, #38, #82, #141 ) ) ;
|
||||
#63 = VERTEX_POINT ( 'NONE', #320 ) ;
|
||||
#64 = APPROVAL_PERSON_ORGANIZATION ( #281, #114, #75 ) ;
|
||||
#65 = ORIENTED_EDGE ( 'NONE', *, *, #313, .F. ) ;
|
||||
#66 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#67 = EDGE_CURVE ( 'NONE', #63, #315, #342, .T. ) ;
|
||||
#68 = CIRCLE ( 'NONE', #256, 0.3271554175279990400 ) ;
|
||||
#69 = DATE_TIME_ROLE ( 'creation_date' ) ;
|
||||
#70 = TOROIDAL_SURFACE ( 'NONE', #138, 0.5868445824720007800, 0.009600000000000000900 ) ;
|
||||
#71 = CLOSED_SHELL ( 'NONE', ( #155, #292, #326, #295, #42, #247, #101, #179, #344, #97 ) ) ;
|
||||
#72 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#73 =( CONVERSION_BASED_UNIT ( 'INCH', #333 ) LENGTH_UNIT ( ) NAMED_UNIT ( #262 ) );
|
||||
#74 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#75 = APPROVAL_ROLE ( '' ) ;
|
||||
#76 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #186, #285 ) ;
|
||||
#77 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#78 = CYLINDRICAL_SURFACE ( 'NONE', #26, 0.5939999999999999700 ) ;
|
||||
#79 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01600000000000001800 ) ) ;
|
||||
#80 = CIRCLE ( 'NONE', #219, 0.009600000000000000900 ) ;
|
||||
#81 = APPROVAL ( #294, 'UNSPECIFIED' ) ;
|
||||
#82 = ORIENTED_EDGE ( 'NONE', *, *, #31, .F. ) ;
|
||||
#83 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#84 = PRODUCT ( '98017A257_18-8 Stainless Steel Mil. Spec. Washer', '98017A257_18-8 Stainless Steel Mil. Spec. Washer', '', ( #100 ) ) ;
|
||||
#85 = LOCAL_TIME ( 8, 39, 25.00000000000000000, #15 ) ;
|
||||
#86 = CIRCLE ( 'NONE', #17, 0.009600000000000014800 ) ;
|
||||
#87 = SHAPE_DEFINITION_REPRESENTATION ( #206, #345 ) ;
|
||||
#88 = CIRCLE ( 'NONE', #193, 0.5939999999999999700 ) ;
|
||||
#89 = EDGE_LOOP ( 'NONE', ( #58, #183, #174, #287 ) ) ;
|
||||
#90 = DATE_AND_TIME ( #113, #261 ) ;
|
||||
#91 = APPROVAL_DATE_TIME ( #196, #6 ) ;
|
||||
#92 = FACE_OUTER_BOUND ( 'NONE', #252, .T. ) ;
|
||||
#93 = EDGE_CURVE ( 'NONE', #296, #40, #228, .T. ) ;
|
||||
#94 = CIRCLE ( 'NONE', #172, 0.3271554175279990400 ) ;
|
||||
#95 = CARTESIAN_POINT ( 'NONE', ( -0.5939999999999999700, 0.0000000000000000000, 0.01280000000000013800 ) ) ;
|
||||
#96 = ORIENTED_EDGE ( 'NONE', *, *, #154, .F. ) ;
|
||||
#97 = ADVANCED_FACE ( 'NONE', ( #311 ), #70, .T. ) ;
|
||||
#98 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
|
||||
#99 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #103, #297, ( #76 ) ) ;
|
||||
#100 = MECHANICAL_CONTEXT ( 'NONE', #241, 'mechanical' ) ;
|
||||
#101 = ADVANCED_FACE ( 'NONE', ( #236 ), #51, .T. ) ;
|
||||
#102 = EDGE_CURVE ( 'NONE', #173, #10, #304, .T. ) ;
|
||||
#103 = PERSON_AND_ORGANIZATION ( #203, #57 ) ;
|
||||
#104 = ORIENTED_EDGE ( 'NONE', *, *, #341, .F. ) ;
|
||||
#105 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#106 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#107 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#108 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#109 = ORIENTED_EDGE ( 'NONE', *, *, #234, .T. ) ;
|
||||
#110 = AXIS2_PLACEMENT_3D ( 'NONE', #240, #276, #356 ) ;
|
||||
#111 = CARTESIAN_POINT ( 'NONE', ( -0.5868445824720007800, 0.0000000000000000000, 0.006399999999999983000 ) ) ;
|
||||
#112 = ORIENTED_EDGE ( 'NONE', *, *, #171, .F. ) ;
|
||||
#113 = CALENDAR_DATE ( 2023, 12, 9 ) ;
|
||||
#114 = APPROVAL ( #4, 'UNSPECIFIED' ) ;
|
||||
#115 = EDGE_CURVE ( 'NONE', #135, #34, #153, .T. ) ;
|
||||
#116 = VECTOR ( 'NONE', #288, 39.37007874015748100 ) ;
|
||||
#117 = EDGE_LOOP ( 'NONE', ( #216, #337 ) ) ;
|
||||
#118 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#119 = PERSON_AND_ORGANIZATION ( #203, #57 ) ;
|
||||
#120 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#121 = AXIS2_PLACEMENT_3D ( 'NONE', #267, #124, #218 ) ;
|
||||
#122 = AXIS2_PLACEMENT_3D ( 'NONE', #300, #217, #72 ) ;
|
||||
#123 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#124 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#125 = LOCAL_TIME ( 8, 39, 25.00000000000000000, #347 ) ;
|
||||
#126 = DATE_TIME_ROLE ( 'classification_date' ) ;
|
||||
#127 = EDGE_LOOP ( 'NONE', ( #104, #317, #157, #96 ) ) ;
|
||||
#128 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#129 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#130 = CARTESIAN_POINT ( 'NONE', ( -0.3271554175279990400, 4.006498348993799500E-017, 0.006399999999999983000 ) ) ;
|
||||
#131 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#132 = CC_DESIGN_APPROVAL ( #114, ( #76 ) ) ;
|
||||
#133 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#134 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ;
|
||||
#135 = VERTEX_POINT ( 'NONE', #162 ) ;
|
||||
#136 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#137 = EDGE_LOOP ( 'NONE', ( #245, #145 ) ) ;
|
||||
#138 = AXIS2_PLACEMENT_3D ( 'NONE', #178, #352, #310 ) ;
|
||||
#139 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #314, #69, ( #76 ) ) ;
|
||||
#140 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01600000000000001800 ) ) ;
|
||||
#141 = ORIENTED_EDGE ( 'NONE', *, *, #212, .F. ) ;
|
||||
#142 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#143 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#144 = ORIENTED_EDGE ( 'NONE', *, *, #188, .F. ) ;
|
||||
#145 = ORIENTED_EDGE ( 'NONE', *, *, #67, .T. ) ;
|
||||
#146 = APPROVAL_DATE_TIME ( #60, #81 ) ;
|
||||
#147 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#148 = EDGE_CURVE ( 'NONE', #135, #10, #231, .T. ) ;
|
||||
#149 = CIRCLE ( 'NONE', #338, 0.3200000000000000100 ) ;
|
||||
#150 = ORIENTED_EDGE ( 'NONE', *, *, #93, .T. ) ;
|
||||
#151 = CARTESIAN_POINT ( 'NONE', ( 0.5939999999999999700, 7.274401986935278000E-017, 0.01599999999999998300 ) ) ;
|
||||
#152 = APPROVAL_DATE_TIME ( #207, #114 ) ;
|
||||
#153 = LINE ( 'NONE', #8, #170 ) ;
|
||||
#154 = EDGE_CURVE ( 'NONE', #296, #223, #191, .T. ) ;
|
||||
#155 = ADVANCED_FACE ( 'NONE', ( #225 ), #283, .T. ) ;
|
||||
#156 = AXIS2_PLACEMENT_3D ( 'NONE', #190, #249, #77 ) ;
|
||||
#157 = ORIENTED_EDGE ( 'NONE', *, *, #212, .T. ) ;
|
||||
#158 = ORIENTED_EDGE ( 'NONE', *, *, #308, .F. ) ;
|
||||
#159 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #194, #350, ( #248 ) ) ;
|
||||
#160 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#161 = CARTESIAN_POINT ( 'NONE', ( -0.5939999999999999700, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#162 = CARTESIAN_POINT ( 'NONE', ( -0.3200000000000000100, 0.0000000000000000000, 0.01280000000000027500 ) ) ;
|
||||
#163 = DIRECTION ( 'NONE', ( -1.224646799147353200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#164 = LINE ( 'NONE', #55, #167 ) ;
|
||||
#165 = CARTESIAN_POINT ( 'NONE', ( -0.5868445824720007800, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#166 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01280000000000013800 ) ) ;
|
||||
#167 = VECTOR ( 'NONE', #105, 39.37007874015748100 ) ;
|
||||
#168 = ORIENTED_EDGE ( 'NONE', *, *, #115, .F. ) ;
|
||||
#169 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#170 = VECTOR ( 'NONE', #302, 39.37007874015748100 ) ;
|
||||
#171 = EDGE_CURVE ( 'NONE', #173, #211, #94, .T. ) ;
|
||||
#172 = AXIS2_PLACEMENT_3D ( 'NONE', #136, #327, #279 ) ;
|
||||
#173 = VERTEX_POINT ( 'NONE', #301 ) ;
|
||||
#174 = ORIENTED_EDGE ( 'NONE', *, *, #46, .T. ) ;
|
||||
#175 = AXIS2_PLACEMENT_3D ( 'NONE', #143, #59, #229 ) ;
|
||||
#176 = PERSON_AND_ORGANIZATION ( #203, #57 ) ;
|
||||
#177 = EDGE_LOOP ( 'NONE', ( #144, #109, #343, #158 ) ) ;
|
||||
#178 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.006399999999999983000 ) ) ;
|
||||
#179 = ADVANCED_FACE ( 'NONE', ( #293 ), #12, .F. ) ;
|
||||
#180 = FACE_OUTER_BOUND ( 'NONE', #202, .T. ) ;
|
||||
#181 = AXIS2_PLACEMENT_3D ( 'NONE', #50, #222, #246 ) ;
|
||||
#182 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#183 = ORIENTED_EDGE ( 'NONE', *, *, #154, .T. ) ;
|
||||
#184 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#185 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ;
|
||||
#186 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #84, .NOT_KNOWN. ) ;
|
||||
#187 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#188 = EDGE_CURVE ( 'NONE', #10, #14, #164, .T. ) ;
|
||||
#189 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.006399999999999983000 ) ) ;
|
||||
#190 = CARTESIAN_POINT ( 'NONE', ( 0.3271554175279990400, 0.0000000000000000000, 0.006399999999999983000 ) ) ;
|
||||
#191 = CIRCLE ( 'NONE', #284, 0.5939999999999999700 ) ;
|
||||
#192 = ORIENTED_EDGE ( 'NONE', *, *, #318, .T. ) ;
|
||||
#193 = AXIS2_PLACEMENT_3D ( 'NONE', #195, #30, #227 ) ;
|
||||
#194 = PERSON_AND_ORGANIZATION ( #203, #57 ) ;
|
||||
#195 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01600000000000001800 ) ) ;
|
||||
#196 = DATE_AND_TIME ( #269, #47 ) ;
|
||||
#197 = CARTESIAN_POINT ( 'NONE', ( -0.5939999999999999700, 0.0000000000000000000, -0.01600000000000001800 ) ) ;
|
||||
#198 = ORIENTED_EDGE ( 'NONE', *, *, #313, .T. ) ;
|
||||
#199 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#200 = AXIS2_PLACEMENT_3D ( 'NONE', #257, #128, #353 ) ;
|
||||
#201 = TOROIDAL_SURFACE ( 'NONE', #110, 0.3271554175279990400, 0.009600000000000000900 ) ;
|
||||
#202 = EDGE_LOOP ( 'NONE', ( #37, #53 ) ) ;
|
||||
#203 = PERSON ( 'UNSPECIFIED', 'UNSPECIFIED', 'UNSPECIFIED', ('UNSPECIFIED'), ('UNSPECIFIED'), ('UNSPECIFIED') ) ;
|
||||
#204 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01600000000000001800 ) ) ;
|
||||
#205 = AXIS2_PLACEMENT_3D ( 'NONE', #118, #233, #66 ) ;
|
||||
#206 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #76 ) ;
|
||||
#207 = DATE_AND_TIME ( #24, #85 ) ;
|
||||
#208 = ORIENTED_EDGE ( 'NONE', *, *, #318, .F. ) ;
|
||||
#209 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #119, #98, ( #186 ) ) ;
|
||||
#210 = CIRCLE ( 'NONE', #175, 0.5868445824720007800 ) ;
|
||||
#211 = VERTEX_POINT ( 'NONE', #291 ) ;
|
||||
#212 = EDGE_CURVE ( 'NONE', #315, #223, #80, .T. ) ;
|
||||
#213 = VECTOR ( 'NONE', #270, 39.37007874015748100 ) ;
|
||||
#214 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) );
|
||||
#215 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #273, #185, ( #186 ) ) ;
|
||||
#216 = ORIENTED_EDGE ( 'NONE', *, *, #61, .T. ) ;
|
||||
#217 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#218 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ;
|
||||
#219 = AXIS2_PLACEMENT_3D ( 'NONE', #111, #305, #199 ) ;
|
||||
#220 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#221 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ;
|
||||
#222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#223 = VERTEX_POINT ( 'NONE', #95 ) ;
|
||||
#224 = ORIENTED_EDGE ( 'NONE', *, *, #148, .T. ) ;
|
||||
#225 = FACE_OUTER_BOUND ( 'NONE', #62, .T. ) ;
|
||||
#226 = EDGE_LOOP ( 'NONE', ( #258, #192 ) ) ;
|
||||
#227 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#228 = LINE ( 'NONE', #151, #116 ) ;
|
||||
#229 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#230 = EDGE_CURVE ( 'NONE', #271, #40, #88, .T. ) ;
|
||||
#231 = CIRCLE ( 'NONE', #265, 0.3200000000000000100 ) ;
|
||||
#232 = CC_DESIGN_SECURITY_CLASSIFICATION ( #248, ( #186 ) ) ;
|
||||
#233 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#234 = EDGE_CURVE ( 'NONE', #10, #135, #9, .T. ) ;
|
||||
#235 = CIRCLE ( 'NONE', #322, 0.3200000000000000100 ) ;
|
||||
#236 = FACE_OUTER_BOUND ( 'NONE', #89, .T. ) ;
|
||||
#237 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
|
||||
#238 = PLANE ( 'NONE', #121 ) ;
|
||||
#239 = AXIS2_PLACEMENT_3D ( 'NONE', #324, #163, #45 ) ;
|
||||
#240 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.006399999999999983000 ) ) ;
|
||||
#241 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
|
||||
#242 = PERSON_AND_ORGANIZATION ( #203, #57 ) ;
|
||||
#243 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#244 = CC_DESIGN_APPROVAL ( #6, ( #186 ) ) ;
|
||||
#245 = ORIENTED_EDGE ( 'NONE', *, *, #289, .T. ) ;
|
||||
#246 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#247 = ADVANCED_FACE ( 'NONE', ( #180, #299 ), #332, .F. ) ;
|
||||
#248 = SECURITY_CLASSIFICATION ( '', '', #221 ) ;
|
||||
#249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#250 = AXIS2_PLACEMENT_3D ( 'NONE', #44, #74, #355 ) ;
|
||||
#251 = ORIENTED_EDGE ( 'NONE', *, *, #148, .F. ) ;
|
||||
#252 = EDGE_LOOP ( 'NONE', ( #16, #150, #340, #263 ) ) ;
|
||||
#253 = CARTESIAN_POINT ( 'NONE', ( 0.5939999999999999700, 7.274401986935278000E-017, 0.01280000000000013800 ) ) ;
|
||||
#254 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01280000000000027500 ) ) ;
|
||||
#255 = ORIENTED_EDGE ( 'NONE', *, *, #102, .T. ) ;
|
||||
#256 = AXIS2_PLACEMENT_3D ( 'NONE', #19, #187, #325 ) ;
|
||||
#257 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.006399999999999983000 ) ) ;
|
||||
#258 = ORIENTED_EDGE ( 'NONE', *, *, #171, .T. ) ;
|
||||
#259 = CC_DESIGN_APPROVAL ( #81, ( #248 ) ) ;
|
||||
#260 = AXIS2_PLACEMENT_3D ( 'NONE', #254, #56, #142 ) ;
|
||||
#261 = LOCAL_TIME ( 8, 39, 25.00000000000000000, #335 ) ;
|
||||
#262 = DIMENSIONAL_EXPONENTS ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ;
|
||||
#263 = ORIENTED_EDGE ( 'NONE', *, *, #46, .F. ) ;
|
||||
#264 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#265 = AXIS2_PLACEMENT_3D ( 'NONE', #3, #243, #107 ) ;
|
||||
#266 = APPROVAL_ROLE ( '' ) ;
|
||||
#267 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#268 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) );
|
||||
#269 = CALENDAR_DATE ( 2023, 12, 9 ) ;
|
||||
#270 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#271 = VERTEX_POINT ( 'NONE', #197 ) ;
|
||||
#272 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.224646799147348300E-016, 0.0000000000000000000 ) ) ;
|
||||
#273 = PERSON_AND_ORGANIZATION ( #203, #57 ) ;
|
||||
#274 = AXIS2_PLACEMENT_3D ( 'NONE', #160, #264, #129 ) ;
|
||||
#275 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#276 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#277 = FACE_OUTER_BOUND ( 'NONE', #278, .T. ) ;
|
||||
#278 = EDGE_LOOP ( 'NONE', ( #65, #112, #255, #251 ) ) ;
|
||||
#279 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#280 = AXIS2_PLACEMENT_3D ( 'NONE', #140, #330, #32 ) ;
|
||||
#281 = PERSON_AND_ORGANIZATION ( #203, #57 ) ;
|
||||
#282 = ORIENTED_EDGE ( 'NONE', *, *, #67, .F. ) ;
|
||||
#283 = TOROIDAL_SURFACE ( 'NONE', #303, 0.5868445824720007800, 0.009600000000000000900 ) ;
|
||||
#284 = AXIS2_PLACEMENT_3D ( 'NONE', #166, #106, #184 ) ;
|
||||
#285 = DESIGN_CONTEXT ( 'detailed design', #237, 'design' ) ;
|
||||
#286 = LINE ( 'NONE', #161, #213 ) ;
|
||||
#287 = ORIENTED_EDGE ( 'NONE', *, *, #230, .T. ) ;
|
||||
#288 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#289 = EDGE_CURVE ( 'NONE', #315, #63, #210, .T. ) ;
|
||||
#290 = FACE_OUTER_BOUND ( 'NONE', #348, .T. ) ;
|
||||
#291 = CARTESIAN_POINT ( 'NONE', ( -0.3271554175279990400, 4.006498348993799500E-017, 0.01599999999999998300 ) ) ;
|
||||
#292 = ADVANCED_FACE ( 'NONE', ( #13 ), #43, .T. ) ;
|
||||
#293 = FACE_OUTER_BOUND ( 'NONE', #177, .T. ) ;
|
||||
#294 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#295 = ADVANCED_FACE ( 'NONE', ( #92 ), #78, .T. ) ;
|
||||
#296 = VERTEX_POINT ( 'NONE', #253 ) ;
|
||||
#297 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
|
||||
#298 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( $, .METRE. ) );
|
||||
#299 = FACE_BOUND ( 'NONE', #117, .T. ) ;
|
||||
#300 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.01600000000000001800 ) ) ;
|
||||
#301 = CARTESIAN_POINT ( 'NONE', ( 0.3271554175279990400, 0.0000000000000000000, 0.01599999999999998300 ) ) ;
|
||||
#302 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#303 = AXIS2_PLACEMENT_3D ( 'NONE', #189, #28, #48 ) ;
|
||||
#304 = CIRCLE ( 'NONE', #156, 0.009600000000000000900 ) ;
|
||||
#305 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#306 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#307 = MANIFOLD_SOLID_BREP ( 'Fillet1', #71 ) ;
|
||||
#308 = EDGE_CURVE ( 'NONE', #14, #34, #149, .T. ) ;
|
||||
#309 = CYLINDRICAL_SURFACE ( 'NONE', #39, 0.3200000000000000100 ) ;
|
||||
#310 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#311 = FACE_OUTER_BOUND ( 'NONE', #127, .T. ) ;
|
||||
#312 = EDGE_LOOP ( 'NONE', ( #208, #198, #329, #316 ) ) ;
|
||||
#313 = EDGE_CURVE ( 'NONE', #211, #135, #86, .T. ) ;
|
||||
#314 = DATE_AND_TIME ( #33, #125 ) ;
|
||||
#315 = VERTEX_POINT ( 'NONE', #165 ) ;
|
||||
#316 = ORIENTED_EDGE ( 'NONE', *, *, #102, .F. ) ;
|
||||
#317 = ORIENTED_EDGE ( 'NONE', *, *, #289, .F. ) ;
|
||||
#318 = EDGE_CURVE ( 'NONE', #211, #173, #68, .T. ) ;
|
||||
#319 = APPROVAL_ROLE ( '' ) ;
|
||||
#320 = CARTESIAN_POINT ( 'NONE', ( 0.5868445824720007800, 7.230587691074144000E-017, 0.01599999999999998300 ) ) ;
|
||||
#321 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #237 ) ;
|
||||
#322 = AXIS2_PLACEMENT_3D ( 'NONE', #79, #323, #2 ) ;
|
||||
#323 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#324 = CARTESIAN_POINT ( 'NONE', ( 0.5868445824720007800, 7.186773395213007500E-017, 0.006399999999999983000 ) ) ;
|
||||
#325 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#326 = ADVANCED_FACE ( 'NONE', ( #290 ), #309, .F. ) ;
|
||||
#327 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#328 = CIRCLE ( 'NONE', #239, 0.009600000000000014800 ) ;
|
||||
#329 = ORIENTED_EDGE ( 'NONE', *, *, #234, .F. ) ;
|
||||
#330 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ;
|
||||
#331 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #176, #134, ( #84 ) ) ;
|
||||
#332 = PLANE ( 'NONE', #280 ) ;
|
||||
#333 = LENGTH_MEASURE_WITH_UNIT ( LENGTH_MEASURE( 0.02539999999999999900 ), #298 );
|
||||
#334 = ORIENTED_EDGE ( 'NONE', *, *, #61, .F. ) ;
|
||||
#335 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#336 = CIRCLE ( 'NONE', #122, 0.5939999999999999700 ) ;
|
||||
#337 = ORIENTED_EDGE ( 'NONE', *, *, #308, .T. ) ;
|
||||
#338 = AXIS2_PLACEMENT_3D ( 'NONE', #204, #133, #83 ) ;
|
||||
#339 = APPROVAL_PERSON_ORGANIZATION ( #242, #6, #266 ) ;
|
||||
#340 = ORIENTED_EDGE ( 'NONE', *, *, #349, .T. ) ;
|
||||
#341 = EDGE_CURVE ( 'NONE', #63, #296, #328, .T. ) ;
|
||||
#342 = CIRCLE ( 'NONE', #205, 0.5868445824720007800 ) ;
|
||||
#343 = ORIENTED_EDGE ( 'NONE', *, *, #115, .T. ) ;
|
||||
#344 = ADVANCED_FACE ( 'NONE', ( #277 ), #201, .T. ) ;
|
||||
#345 = ADVANCED_BREP_SHAPE_REPRESENTATION ( '98017A257_18-8 Stainless Steel Mil. Spec. Washer', ( #307, #181 ), #41 ) ;
|
||||
#346 = CARTESIAN_POINT ( 'NONE', ( 0.5939999999999999700, 7.274401986935278000E-017, -0.01600000000000001800 ) ) ;
|
||||
#347 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 6, 0, .BEHIND. ) ;
|
||||
#348 = EDGE_LOOP ( 'NONE', ( #224, #18, #334, #168 ) ) ;
|
||||
#349 = EDGE_CURVE ( 'NONE', #40, #271, #336, .T. ) ;
|
||||
#350 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ;
|
||||
#351 = APPROVAL_PERSON_ORGANIZATION ( #35, #81, #319 ) ;
|
||||
#352 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ;
|
||||
#353 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#354 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
|
||||
#355 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
#356 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ;
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
@ -1,6 +1,7 @@
|
||||
// Pipe with bend
|
||||
// A tubular section or hollow cylinder, usually but not necessarily of circular cross-section, used mainly to convey substances that can flow.
|
||||
|
||||
|
||||
// Set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
@ -14,22 +15,14 @@ bendAngle = 90
|
||||
sketch000 = startSketchOn("XZ")
|
||||
|
||||
// create a profile for the outer diameter
|
||||
outerProfile = circle(
|
||||
sketch000,
|
||||
center = [bendRadius, 0],
|
||||
radius = outerDiameter / 2
|
||||
)
|
||||
outerProfile = circle(sketch000, center = [bendRadius, 0], radius = outerDiameter / 2)
|
||||
|
||||
// create a profile for the inner diameter
|
||||
innerProfile = circle(
|
||||
sketch000,
|
||||
center = [bendRadius, 0],
|
||||
radius = innerDiameter / 2
|
||||
)
|
||||
innerProfile = circle(sketch000, center = [bendRadius, 0], radius = innerDiameter / 2)
|
||||
|
||||
// create the profile of the pipe
|
||||
pipeProfile = outerProfile
|
||||
|> hole(innerProfile, %)
|
||||
|
||||
// revolve the pipe profile at the desired angle
|
||||
pipe = revolve(pipeProfile, axis = "Y", angle = bendAngle)
|
||||
pipe = revolve(pipeProfile, axis = 'Y', angle = bendAngle)
|
||||
|
@ -1,9 +1,11 @@
|
||||
// Poopy Shoe
|
||||
// poop shute for bambu labs printer - optimized for printing.
|
||||
|
||||
|
||||
// Set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
|
||||
wallThickness = 0.125
|
||||
wallsWidth = 3
|
||||
height = 5.125
|
||||
@ -30,8 +32,7 @@ sketch001 = startSketchOn("-YZ")
|
||||
|> yLine(endAbsolute = segEndY(seg01))
|
||||
|> angledLineToY({ angle = 180 - 60, to = 0 }, %)
|
||||
|> close()
|
||||
part001 = revolve(
|
||||
sketch001,
|
||||
part001 = revolve(sketch001,
|
||||
angle = 90,
|
||||
axis = {
|
||||
custom = {
|
||||
|
BIN
public/kcl-samples/screenshots/keyboard.png
Normal file
After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
@ -1,68 +1,64 @@
|
||||
// Socket Head Cap Screw
|
||||
// This is for a #10-24 screw that is 1.00 inches long. A socket head cap screw is a type of fastener that is widely used in a variety of applications requiring a high strength fastening solution. It is characterized by its cylindrical head and internal hexagonal drive, which allows for tightening with an Allen wrench or hex key.
|
||||
|
||||
// Set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in, defaultAngleUnit = deg)
|
||||
|
||||
// Define constants
|
||||
screwLength = 1.0
|
||||
screwDiameter = .190
|
||||
headDiameter = .313
|
||||
headLength = screwDiameter
|
||||
hexWallToWall = 5 / 32
|
||||
capRatio = screwDiameter / headDiameter
|
||||
hexRatio = hexWallToWall / headDiameter
|
||||
hexWallLength = hexWallToWall / 2 * 1 / cos(toRadians(30))
|
||||
hexStartingAngle = 210 // first angle of hex pattern
|
||||
hexInteriorAngle = 120
|
||||
hexChangeAngle = 180 - hexInteriorAngle
|
||||
export boltDiameter = 0.190
|
||||
export boltLength = 1.00
|
||||
export boltHeadLength = boltDiameter
|
||||
export boltHeadDiameter = 0.313
|
||||
export boltHexDrive = 5/32
|
||||
export boltHexFlatLength = boltHexDrive / (2 * cos(toRadians(30)))
|
||||
|
||||
// Write a function that defines the Socket Head Cap Screw
|
||||
fn capScrew(start, length, dia, capHeadLength) {
|
||||
export fn bolt () {
|
||||
|
||||
// Create the head of the cap screw
|
||||
screwHeadSketch = startSketchOn('XZ')
|
||||
boltHead = startSketchOn('XZ')
|
||||
|> circle(
|
||||
center = [start[0], start[1]],
|
||||
radius = dia / capRatio / 2
|
||||
center = [0, 0],
|
||||
radius = boltHeadDiameter / 2,
|
||||
tag = $topEdge
|
||||
)
|
||||
|
||||
// Extrude the screw head sketch
|
||||
screwHead = extrude(screwHeadSketch, length = capHeadLength)
|
||||
|
||||
|> extrude(length = -boltHeadLength)
|
||||
|> fillet(radius = 0.020, tags = [topEdge, getOppositeEdge(topEdge)])
|
||||
|
||||
// Define the sketch of the hex pattern on the screw head
|
||||
hexPatternSketch = startSketchOn(screwHead, 'end')
|
||||
|> startProfileAt([hexWallToWall / 2, 0], %)
|
||||
|> yLine(length = -hexWallLength / 2)
|
||||
hexPatternSketch = startSketchOn(boltHead, 'start')
|
||||
|> startProfileAt([
|
||||
boltHexDrive / 2,
|
||||
boltHexFlatLength / 2
|
||||
], %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle,
|
||||
length = hexWallLength
|
||||
angle = 270,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle - hexChangeAngle,
|
||||
length = hexWallLength
|
||||
angle = 210,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle - (2 * hexChangeAngle),
|
||||
length = hexWallLength
|
||||
angle = 150,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle - (3 * hexChangeAngle),
|
||||
length = hexWallLength
|
||||
angle = 90,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> angledLine({
|
||||
angle = hexStartingAngle - (4 * hexChangeAngle),
|
||||
length = hexWallLength
|
||||
angle = 30,
|
||||
length = boltHexFlatLength
|
||||
}, %)
|
||||
|> close()
|
||||
hexPattern = extrude(hexPatternSketch, length = -headLength * 0.75)
|
||||
|> extrude(length = -boltHeadLength * 0.75)
|
||||
|
||||
boltBody = startSketchOn(boltHead, 'end')
|
||||
|> circle(center = [0, 0], radius = boltDiameter / 2, tag = $filletEdge)
|
||||
|> extrude(length = boltLength)
|
||||
|> fillet(radius = .020, tags = [getOppositeEdge(filletEdge)])
|
||||
|> appearance(color = "#4dd043", metalness = 90, roughness = 90)
|
||||
|
||||
screwBodySketch = startSketchOn(screwHead, "start")
|
||||
|> circle(
|
||||
center = [start[0], start[1]],
|
||||
radius = dia / 2
|
||||
)
|
||||
screwBody = extrude(screwBodySketch, length = length)
|
||||
return screwBody
|
||||
return boltBody
|
||||
}
|
||||
|
||||
capScrew([0, 0], screwLength, screwDiameter, screwDiameter)
|
||||
bolt()
|
||||
|
@ -1,50 +1,37 @@
|
||||
// Antenna
|
||||
|
||||
|
||||
// import constants
|
||||
import antennaLength, antennaBaseWidth, antennaBaseHeight, antennaTopWidth, antennaTopHeight from "globals.kcl"
|
||||
|
||||
// Set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
|
||||
// import constants
|
||||
import height, width, antennaBaseWidth, antennaBaseHeight, antennaTopWidth, antennaTopHeight from "globals.kcl"
|
||||
|
||||
// Calculate the origin
|
||||
origin = [-width / 2 + .45, -0.10]
|
||||
|
||||
// Create the antenna
|
||||
antennaX = origin[0]
|
||||
antennaY = origin[1]
|
||||
|
||||
antennaPlane = {
|
||||
plane = {
|
||||
origin = { x = 0, y = 0, z = height / 2 },
|
||||
xAxis = { x = 1, y = 0, z = 0 },
|
||||
yAxis = { x = 0, y = 1, z = 0 },
|
||||
zAxis = { x = 0, y = 0, z = 1 }
|
||||
}
|
||||
export fn antenna () {
|
||||
// Create the antenna base sketch
|
||||
sketch001 = startSketchOn('XY')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [antennaBaseWidth, 0])
|
||||
|> line(end = [0, -antennaBaseHeight])
|
||||
|> line(end = [-antennaBaseWidth, 0])
|
||||
|> close()
|
||||
|
||||
// Create the antenna top sketch
|
||||
loftPlane = offsetPlane('XY', offset = antennaLength)
|
||||
|
||||
sketch002 = startSketchOn(loftPlane)
|
||||
|> startProfileAt([
|
||||
(antennaBaseWidth - antennaTopWidth) / 2,
|
||||
(antennaBaseHeight - antennaTopHeight) / 2
|
||||
], %)
|
||||
|> xLine(length = antennaTopWidth)
|
||||
|> yLine(length = -antennaTopHeight)
|
||||
|> xLine(length = -antennaTopWidth)
|
||||
|> close()
|
||||
|
||||
// Create the antenna using a loft
|
||||
antenna = loft([sketch001, sketch002])
|
||||
|> appearance(color = "#000000")
|
||||
return antenna
|
||||
|
||||
}
|
||||
|
||||
// Create the antenna base sketch
|
||||
sketch001 = startSketchOn(antennaPlane)
|
||||
|> startProfileAt([origin[0], origin[1]], %)
|
||||
|> line(end = [antennaBaseWidth, 0])
|
||||
|> line(end = [0, -antennaBaseHeight])
|
||||
|> line(end = [-antennaBaseWidth, 0])
|
||||
|> close()
|
||||
|
||||
// Create the antenna top sketch
|
||||
loftPlane = offsetPlane('XY', offset = height / 2 + 3)
|
||||
|
||||
sketch002 = startSketchOn(loftPlane)
|
||||
|> startProfileAt([
|
||||
origin[0] + (antennaBaseWidth - antennaTopWidth) / 2,
|
||||
origin[1] - ((antennaBaseHeight - antennaTopHeight) / 2)
|
||||
], %)
|
||||
|> xLine(length = antennaTopWidth)
|
||||
|> yLine(length = -antennaTopHeight)
|
||||
|> xLine(length = -antennaTopWidth)
|
||||
|> close()
|
||||
|
||||
// Create the antenna using a loft
|
||||
loft([sketch001, sketch002])
|
||||
|> appearance(color = "#000000")
|
||||
|
@ -1,80 +1,86 @@
|
||||
// Walkie talkie body
|
||||
|
||||
|
||||
// Set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
|
||||
// Import constants
|
||||
// import constants
|
||||
import height, width, thickness, chamferLength, offset, screenWidth, screenHeight, screenYPosition, screenDepth, speakerBoxWidth, speakerBoxHeight from "globals.kcl"
|
||||
|
||||
bodySketch = startSketchOn('XZ')
|
||||
|> startProfileAt([-width / 2, height / 2], %)
|
||||
|> xLine(length = width, tag = $chamfer1)
|
||||
|> yLine(length = -height, tag = $chamfer2)
|
||||
|> xLine(length = -width, tag = $chamfer3)
|
||||
|> close(tag = $chamfer4)
|
||||
bodyExtrude = extrude(bodySketch, length = thickness)
|
||||
|> chamfer(
|
||||
length = chamferLength,
|
||||
tags = [
|
||||
getNextAdjacentEdge(chamfer1),
|
||||
getNextAdjacentEdge(chamfer2),
|
||||
getNextAdjacentEdge(chamfer3),
|
||||
getNextAdjacentEdge(chamfer4)
|
||||
]
|
||||
)
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// Define the offset for the indentation
|
||||
sketch002 = startSketchOn(bodyExtrude, 'END')
|
||||
|> startProfileAt([
|
||||
-width / 2 + offset,
|
||||
height / 2 - (chamferLength + offset / 2 * cos(toRadians(45)))
|
||||
], %)
|
||||
|> angledLineToY({ angle = 45, to = height / 2 - offset }, %)
|
||||
|> line(endAbsolute = [
|
||||
width / 2 - (chamferLength + offset / 2 * cos(toRadians(45))),
|
||||
height / 2 - offset
|
||||
])
|
||||
|> angledLineToX({ angle = -45, to = width / 2 - offset }, %)
|
||||
|> line(endAbsolute = [
|
||||
width / 2 - offset,
|
||||
-(height / 2 - (chamferLength + offset / 2 * cos(toRadians(45))))
|
||||
])
|
||||
|> angledLineToY({
|
||||
angle = -135,
|
||||
to = -height / 2 + offset
|
||||
}, %)
|
||||
|> line(endAbsolute = [
|
||||
-(width / 2 - (chamferLength + offset / 2 * cos(toRadians(45)))),
|
||||
-height / 2 + offset
|
||||
])
|
||||
|> angledLineToX({
|
||||
angle = -225,
|
||||
to = -width / 2 + offset
|
||||
}, %)
|
||||
|> close()
|
||||
extrude002 = extrude(sketch002, length = -0.0625)
|
||||
// create a function to define the body
|
||||
export fn body () {
|
||||
|
||||
// Create the pocket for the screen
|
||||
sketch003 = startSketchOn(extrude002, 'start')
|
||||
|> startProfileAt([-screenWidth / 2, screenYPosition], %)
|
||||
|> xLine(length = screenWidth, tag = $seg01)
|
||||
|> yLine(length = -screenHeight)
|
||||
|> xLine(length = -segLen(seg01))
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude003 = extrude(sketch003, length = screenDepth)
|
||||
// sketch and extrude the body of the walkie talkie
|
||||
bodySketch = startSketchOn('XZ')
|
||||
|> startProfileAt([-width / 2, height / 2], %)
|
||||
|> xLine(length = width, tag = $chamfer1)
|
||||
|> yLine(length = -height, tag = $chamfer2)
|
||||
|> xLine(length = -width, tag = $chamfer3)
|
||||
|> close(tag = $chamfer4)
|
||||
bodyExtrude = extrude(bodySketch, length = thickness)
|
||||
|> chamfer(
|
||||
length = chamferLength,
|
||||
tags = [
|
||||
getNextAdjacentEdge(chamfer1),
|
||||
getNextAdjacentEdge(chamfer2),
|
||||
getNextAdjacentEdge(chamfer3),
|
||||
getNextAdjacentEdge(chamfer4)
|
||||
]
|
||||
)
|
||||
|
||||
// Create the speaker box
|
||||
sketch004 = startSketchOn(extrude002, 'start')
|
||||
|> startProfileAt([-1.25 / 2, -.125], %)
|
||||
|> xLine(length = speakerBoxWidth)
|
||||
|> yLine(length = -speakerBoxHeight)
|
||||
|> xLine(length = -speakerBoxWidth)
|
||||
|> close()
|
||||
extrude(sketch004, length = -.5)
|
||||
|> appearance(
|
||||
color = "#277bb0",
|
||||
)
|
||||
// cut out the indentation for the case
|
||||
sketch002 = startSketchOn(bodyExtrude, 'END')
|
||||
|> startProfileAt([
|
||||
-width / 2 + offset,
|
||||
height / 2 - (chamferLength + offset / 2 * cos(toRadians(45)))
|
||||
], %)
|
||||
|> angledLineToY({ angle = 45, to = height / 2 - offset }, %)
|
||||
|> line(endAbsolute = [
|
||||
width / 2 - (chamferLength + offset / 2 * cos(toRadians(45))),
|
||||
height / 2 - offset
|
||||
])
|
||||
|> angledLineToX({ angle = -45, to = width / 2 - offset }, %)
|
||||
|> line(endAbsolute = [
|
||||
width / 2 - offset,
|
||||
-(height / 2 - (chamferLength + offset / 2 * cos(toRadians(45))))
|
||||
])
|
||||
|> angledLineToY({
|
||||
angle = -135,
|
||||
to = -height / 2 + offset
|
||||
}, %)
|
||||
|> line(endAbsolute = [
|
||||
-(width / 2 - (chamferLength + offset / 2 * cos(toRadians(45)))),
|
||||
-height / 2 + offset
|
||||
])
|
||||
|> angledLineToX({
|
||||
angle = -225,
|
||||
to = -width / 2 + offset
|
||||
}, %)
|
||||
|> close()
|
||||
extrude002 = extrude(sketch002, length = -0.0625)
|
||||
|
||||
// Create the pocket for the screen
|
||||
sketch003 = startSketchOn(extrude002, 'start')
|
||||
|> startProfileAt([-screenWidth / 2, screenYPosition], %)
|
||||
|> xLine(length = screenWidth, tag = $seg01)
|
||||
|> yLine(length = -screenHeight)
|
||||
|> xLine(length = -segLen(seg01))
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude003 = extrude(sketch003, length = screenDepth)
|
||||
|
||||
// Create the speaker box
|
||||
sketch004 = startSketchOn(extrude002, 'start')
|
||||
|> startProfileAt([-1.25 / 2, -.125], %)
|
||||
|> xLine(length = speakerBoxWidth)
|
||||
|> yLine(length = -speakerBoxHeight)
|
||||
|> xLine(length = -speakerBoxWidth)
|
||||
|> close()
|
||||
|
||||
body = extrude(sketch004, length = -.5)
|
||||
|> appearance(
|
||||
color = "#277bb0",
|
||||
)
|
||||
return body
|
||||
}
|
||||
|
||||
body()
|
||||
|
@ -1,26 +1,27 @@
|
||||
// Walkie Talkie button
|
||||
|
||||
// Set units
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// Import constants
|
||||
import screenHeight, buttonWidth, tolerance, buttonHeight, buttonThickness from 'globals.kcl'
|
||||
// import constants
|
||||
import buttonWidth, buttonHeight, buttonThickness from 'globals.kcl'
|
||||
|
||||
// create a function to define the button
|
||||
export fn button() {
|
||||
|
||||
// Create a function for the button
|
||||
export fn button(origin, rotation, plane) {
|
||||
buttonSketch = startSketchOn(plane)
|
||||
|> startProfileAt([origin[0], origin[1]], %)
|
||||
// sketch the button profile and extrude
|
||||
buttonSketch = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> angledLine({
|
||||
angle = 180 + rotation,
|
||||
angle = 180,
|
||||
length = buttonWidth
|
||||
}, %, $tag1)
|
||||
|> angledLine({
|
||||
angle = 270 + rotation,
|
||||
angle = 270,
|
||||
length = buttonHeight
|
||||
}, %, $tag2)
|
||||
|> angledLine({
|
||||
angle = 0 + rotation,
|
||||
angle = 0,
|
||||
length = buttonWidth
|
||||
}, %)
|
||||
|> close()
|
||||
@ -35,4 +36,4 @@ export fn button(origin, rotation, plane) {
|
||||
|> appearance(color = "#ff0000")
|
||||
|
||||
return buttonExtrude
|
||||
}
|
||||
}
|
@ -1,85 +1,90 @@
|
||||
// Walkie talkie case
|
||||
|
||||
|
||||
// Set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
|
||||
// Import constants and Zoo logo
|
||||
// import constants and Zoo logo
|
||||
import width, height, chamferLength, offset, screenWidth, screenHeight, screenYPosition, screenDepth, speakerBoxWidth, speakerBoxHeight, squareHoleSideLength, caseTolerance from "globals.kcl"
|
||||
import zLogo, oLogo, oLogo2 from "zoo-logo.kcl"
|
||||
|
||||
plane = offsetPlane("XZ", offset = 1)
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
fn screenHole(sketchStart) {
|
||||
sketch006 = startSketchOn(sketchStart)
|
||||
// create a function to define the case
|
||||
export fn case () {
|
||||
|
||||
// sketch the profile of the screen
|
||||
sketch006 = startSketchOn(startSketchOn('XZ'))
|
||||
|> startProfileAt([-screenWidth / 2, screenYPosition], %)
|
||||
|> xLine(length = screenWidth)
|
||||
|> yLine(length = -screenHeight)
|
||||
|> xLine(length = -screenWidth)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
return sketch006
|
||||
}
|
||||
|
||||
fn squareHolePattern(plane, x, y) {
|
||||
|
||||
// create transform functions for the speaker grid pattern
|
||||
fn transformX(i) {
|
||||
return { translate = [.125 * i, 0] }
|
||||
}
|
||||
fn transformY(i) {
|
||||
return { translate = [0, -.125 * i] }
|
||||
}
|
||||
squareHolePatternSketch = startSketchOn(plane)
|
||||
|> startProfileAt([-x, -y], %)
|
||||
|
||||
// sketch the square hole grid pattern
|
||||
squareHolePatternSketch = startSketchOn(startSketchOn('XZ'))
|
||||
|> startProfileAt([-screenWidth / 2 + .100, 0], %)
|
||||
|> line(end = [squareHoleSideLength / 2, 0])
|
||||
|> line(end = [0, -squareHoleSideLength / 2])
|
||||
|> line(end = [-squareHoleSideLength / 2, 0])
|
||||
|> close()
|
||||
|> patternTransform2d(instances = 13, transform = transformX)
|
||||
|> patternTransform2d(instances = 11, transform = transformY)
|
||||
return squareHolePatternSketch
|
||||
}
|
||||
sketch005 = startSketchOn(offsetPlane("XZ", offset = 1))
|
||||
|> startProfileAt([
|
||||
-width / 2 + offset + caseTolerance,
|
||||
height / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45)))
|
||||
], %)
|
||||
|> angledLineToY({
|
||||
angle = 45,
|
||||
to = height / 2 - (offset + caseTolerance)
|
||||
}, %)
|
||||
|> line(endAbsolute = [
|
||||
width / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45))),
|
||||
height / 2 - (offset + caseTolerance)
|
||||
])
|
||||
|> angledLineToX({
|
||||
angle = -45,
|
||||
to = width / 2 - (offset + caseTolerance)
|
||||
}, %)
|
||||
|> line(endAbsolute = [
|
||||
width / 2 - (offset + caseTolerance),
|
||||
-(height / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45))))
|
||||
])
|
||||
|> angledLineToY({
|
||||
angle = -135,
|
||||
to = -height / 2 + offset + caseTolerance
|
||||
}, %)
|
||||
|> line(endAbsolute = [
|
||||
-(width / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45)))),
|
||||
-height / 2 + offset + caseTolerance
|
||||
])
|
||||
|> angledLineToX({
|
||||
angle = -225,
|
||||
to = -width / 2 + offset + caseTolerance
|
||||
}, %)
|
||||
|> close()
|
||||
|> hole(screenHole(plane), %)
|
||||
|> hole(squareHolePattern(plane, .75, .125), %)
|
||||
|> hole(zLogo(plane, [-.30, -1.825], .20), %)
|
||||
|> hole(oLogo(plane, [-.075, -1.825], .20), %)
|
||||
|> hole(oLogo2(plane, [-.075, -1.825], .20), %)
|
||||
|> hole(oLogo(plane, [.175, -1.825], .20), %)
|
||||
|> hole(oLogo2(plane, [.175, -1.825], .20), %)
|
||||
|
||||
extrude(sketch005, length = -0.0625)
|
||||
|> appearance(color = '#D0FF01', metalness = 0, roughness = 50)
|
||||
// sketch the outer profile of the case and extrude with holes using the previously made profiles
|
||||
sketch005 = startSketchOn(startSketchOn('XZ'))
|
||||
|> startProfileAt([
|
||||
-width / 2 + offset + caseTolerance,
|
||||
height / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45)))
|
||||
], %)
|
||||
|> angledLineToY({
|
||||
angle = 45,
|
||||
to = height / 2 - (offset + caseTolerance)
|
||||
}, %)
|
||||
|> line(endAbsolute = [
|
||||
width / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45))),
|
||||
height / 2 - (offset + caseTolerance)
|
||||
])
|
||||
|> angledLineToX({
|
||||
angle = -45,
|
||||
to = width / 2 - (offset + caseTolerance)
|
||||
}, %)
|
||||
|> line(endAbsolute = [
|
||||
width / 2 - (offset + caseTolerance),
|
||||
-(height / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45))))
|
||||
])
|
||||
|> angledLineToY({
|
||||
angle = -135,
|
||||
to = -height / 2 + offset + caseTolerance
|
||||
}, %)
|
||||
|> line(endAbsolute = [
|
||||
-(width / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45)))),
|
||||
-height / 2 + offset + caseTolerance
|
||||
])
|
||||
|> angledLineToX({
|
||||
angle = -225,
|
||||
to = -width / 2 + offset + caseTolerance
|
||||
}, %)
|
||||
|> close()
|
||||
|> hole(sketch006, %)
|
||||
|> hole(squareHolePatternSketch, %)
|
||||
|
||||
// create the Zoo logo
|
||||
|> hole(zLogo(startSketchOn('XZ'), [-.30, -1.825], .20), %)
|
||||
|> hole(oLogo(startSketchOn('XZ'), [-.075, -1.825], .20), %)
|
||||
|> hole(oLogo2(startSketchOn('XZ'), [-.075, -1.825], .20), %)
|
||||
|> hole(oLogo(startSketchOn('XZ'), [.175, -1.825], .20), %)
|
||||
|> hole(oLogo2(startSketchOn('XZ'), [.175, -1.825], .20), %)
|
||||
|
||||
case = extrude(sketch005, length = -0.0625)
|
||||
|> appearance(color = '#D0FF01', metalness = 0, roughness = 50)
|
||||
|
||||
return case
|
||||
}
|
@ -21,6 +21,7 @@ export antennaBaseWidth = .5
|
||||
export antennaBaseHeight = .25
|
||||
export antennaTopWidth = .30
|
||||
export antennaTopHeight = .05
|
||||
export antennaLength = 3
|
||||
|
||||
// button
|
||||
export buttonWidth = .15
|
||||
|
@ -1,29 +1,16 @@
|
||||
// Walkie talkie knob
|
||||
// Walkie Talkie Frequency Knob
|
||||
|
||||
|
||||
// Set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
|
||||
// Import constants
|
||||
// import constants
|
||||
import width, thickness, height, knobDiameter, knobHeight, knobRadius from "globals.kcl"
|
||||
|
||||
// Define the plane for the knob
|
||||
knobPlane = {
|
||||
plane = {
|
||||
origin = {
|
||||
x = width / 2 - 0.70,
|
||||
y = -thickness / 2,
|
||||
z = height / 2
|
||||
},
|
||||
xAxis = { x = 1, y = 0, z = 0 },
|
||||
yAxis = { x = 0, y = 0, z = 1 },
|
||||
zAxis = { x = 0, y = 1, z = 0 }
|
||||
}
|
||||
}
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// create a function to define the knob
|
||||
export fn knob () {
|
||||
|
||||
// Create the knob sketch and revolve
|
||||
startSketchOn(knobPlane)
|
||||
knob = startSketchOn('XZ')
|
||||
|> startProfileAt([0.0001, 0], %)
|
||||
|> xLine(length = knobDiameter / 2)
|
||||
|> yLine(length = knobHeight - 0.05)
|
||||
@ -34,5 +21,11 @@ startSketchOn(knobPlane)
|
||||
}, %)
|
||||
|> xLine(endAbsolute = 0.0001)
|
||||
|> close()
|
||||
|> revolve(axis = "Y")
|
||||
|> revolve(
|
||||
axis = "Y",
|
||||
)
|
||||
|> appearance(color = '#D0FF01', metalness = 90, roughness = 50)
|
||||
|
||||
return knob
|
||||
|
||||
}
|
@ -1,50 +1,47 @@
|
||||
// Walkie Talkie
|
||||
// A portable, handheld two-way radio device that allows users to communicate wirelessly over short to medium distances. It operates on specific radio frequencies and features a push-to-talk button for transmitting messages, making it ideal for quick and reliable communication in outdoor, work, or emergency settings.
|
||||
|
||||
// Set units
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// Import parts and constants
|
||||
import 'body.kcl'
|
||||
import 'antenna.kcl'
|
||||
import 'case.kcl'
|
||||
import 'talk-button.kcl' as talkButton
|
||||
import 'knob.kcl'
|
||||
// import constants
|
||||
import * from 'globals.kcl'
|
||||
|
||||
// import parts and constants
|
||||
import body from 'body.kcl'
|
||||
import case from 'case.kcl'
|
||||
import antenna from 'antenna.kcl'
|
||||
import talkButton from 'talk-button.kcl'
|
||||
import knob from 'knob.kcl'
|
||||
import button from "button.kcl"
|
||||
import width, height, thickness, screenWidth, screenHeight, screenYPosition, tolerance from "globals.kcl"
|
||||
|
||||
// Import the body
|
||||
body
|
||||
// import the body
|
||||
body()
|
||||
|
||||
// Import the case
|
||||
case
|
||||
// import the antenna
|
||||
antenna()
|
||||
|> translate(translate = [-width / 2 + .45, -0.10, height/2])
|
||||
|
||||
// Import the antenna
|
||||
antenna
|
||||
// import the case
|
||||
case()
|
||||
|> translate(translate = [0, -1, 0])
|
||||
|
||||
// Import the buttons
|
||||
button([
|
||||
-(screenWidth / 2 + tolerance),
|
||||
screenYPosition
|
||||
], 0, offsetPlane("XZ", offset = thickness))
|
||||
button([
|
||||
-(screenWidth / 2 + tolerance),
|
||||
screenYPosition - (screenHeight / 2)
|
||||
], 0, offsetPlane("XZ", offset = thickness))
|
||||
button([
|
||||
screenWidth / 2 + tolerance,
|
||||
screenYPosition - screenHeight
|
||||
], 180, offsetPlane("XZ", offset = thickness))
|
||||
button([
|
||||
screenWidth / 2 + tolerance,
|
||||
screenYPosition - (screenHeight / 2)
|
||||
], 180, offsetPlane("XZ", offset = thickness))
|
||||
|
||||
// Import the talk button
|
||||
talkButton
|
||||
|
||||
// Import the frequency knob
|
||||
knob
|
||||
|
||||
// import the talk button
|
||||
talkButton()
|
||||
|> translate(translate = [width / 2, -thickness / 2, .5])
|
||||
|
||||
// import the frequency knob
|
||||
knob()
|
||||
|> translate(translate = [width / 2 - 0.70, -thickness / 2, height / 2])
|
||||
|
||||
// import the buttons
|
||||
button()
|
||||
|> translate(translate = [-(screenWidth / 2 + tolerance), -1, screenYPosition])
|
||||
button()
|
||||
|> translate(translate = [-(screenWidth / 2 + tolerance), -1, screenYPosition - buttonHeight - tolerance*2])
|
||||
button()
|
||||
|> rotate(%, roll = 0, pitch = 180, yaw = 0)
|
||||
|> translate(translate = [screenWidth / 2 + tolerance, -1, screenYPosition - buttonHeight], global = true)
|
||||
button()
|
||||
|> rotate(%, roll = 0, pitch = 180, yaw = 0)
|
||||
|> translate(translate = [screenWidth / 2 + tolerance, -1, screenYPosition - buttonHeight*2 - tolerance * 2], global = true)
|
@ -1,46 +1,37 @@
|
||||
// Walkie talkie talk button
|
||||
|
||||
|
||||
// Set units
|
||||
// set units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
|
||||
// Import constants
|
||||
// import constants
|
||||
import width, thickness, talkButtonSideLength, talkButtonHeight from "globals.kcl"
|
||||
|
||||
talkButtonPlane = {
|
||||
plane = {
|
||||
origin = {
|
||||
x = width / 2,
|
||||
y = -thickness / 2,
|
||||
z = .5
|
||||
},
|
||||
xAxis = { x = 0, y = 1, z = 0 },
|
||||
yAxis = { x = 0, y = 0, z = 1 },
|
||||
zAxis = { x = 1, y = 0, z = 0 }
|
||||
}
|
||||
export fn talkButton() {
|
||||
|
||||
// create the talk button sketch
|
||||
talkButtonSketch = startSketchOn('YZ')
|
||||
|> startProfileAt([
|
||||
-talkButtonSideLength / 2,
|
||||
talkButtonSideLength / 2
|
||||
], %)
|
||||
|> xLine(length = talkButtonSideLength, tag = $tag1)
|
||||
|> yLine(length = -talkButtonSideLength, tag = $tag2)
|
||||
|> xLine(length = -talkButtonSideLength, tag = $tag3)
|
||||
|> close(tag = $tag4)
|
||||
|
||||
// create the talk button and apply fillets
|
||||
talkButton = extrude(talkButtonSketch, length = talkButtonHeight)
|
||||
|> fillet(
|
||||
radius = 0.050,
|
||||
tags = [
|
||||
getNextAdjacentEdge(tag1),
|
||||
getNextAdjacentEdge(tag2),
|
||||
getNextAdjacentEdge(tag3),
|
||||
getNextAdjacentEdge(tag4)
|
||||
]
|
||||
)
|
||||
|> appearance(color = '#D0FF01', metalness = 90, roughness = 90)
|
||||
|
||||
return talkButton
|
||||
}
|
||||
|
||||
// Create the talk button sketch
|
||||
talkButtonSketch = startSketchOn(talkButtonPlane)
|
||||
|> startProfileAt([
|
||||
-talkButtonSideLength / 2,
|
||||
talkButtonSideLength / 2
|
||||
], %)
|
||||
|> xLine(length = talkButtonSideLength, tag = $tag1)
|
||||
|> yLine(length = -talkButtonSideLength, tag = $tag2)
|
||||
|> xLine(length = -talkButtonSideLength, tag = $tag3)
|
||||
|> close(tag = $tag4)
|
||||
|
||||
// Create the talk button and apply fillets
|
||||
extrude(talkButtonSketch, length = talkButtonHeight)
|
||||
|> fillet(
|
||||
radius = 0.050,
|
||||
tags = [
|
||||
getNextAdjacentEdge(tag1),
|
||||
getNextAdjacentEdge(tag2),
|
||||
getNextAdjacentEdge(tag3),
|
||||
getNextAdjacentEdge(tag4)
|
||||
]
|
||||
)
|
||||
|> appearance(color = '#D0FF01', metalness = 90, roughness = 90)
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Zoo logo
|
||||
|
||||
// Define a function to draw the ZOO "Z"
|
||||
// define a function to draw the ZOO "Z"
|
||||
export fn zLogo(surface, origin, scale) {
|
||||
zSketch = surface
|
||||
|> startProfileAt([
|
||||
@ -39,7 +39,7 @@ export fn zLogo(surface, origin, scale) {
|
||||
return zSketch
|
||||
}
|
||||
|
||||
// Define a function to draw the ZOO "O"
|
||||
// define a function to draw the ZOO "O"
|
||||
export fn oLogo(surface, origin, scale) {
|
||||
oSketch001 = surface
|
||||
|> startProfileAt([
|
||||
|
20
rust/Cargo.lock
generated
@ -1780,7 +1780,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-bumper"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1791,7 +1791,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-derive-docs"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
dependencies = [
|
||||
"Inflector",
|
||||
"anyhow",
|
||||
@ -1810,7 +1810,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-directory-test-macro"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -1819,7 +1819,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-language-server"
|
||||
version = "0.2.51"
|
||||
version = "0.2.52"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1840,7 +1840,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-language-server-release"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1860,7 +1860,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-lib"
|
||||
version = "0.2.51"
|
||||
version = "0.2.52"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"approx 0.5.1",
|
||||
@ -1928,7 +1928,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-python-bindings"
|
||||
version = "0.3.51"
|
||||
version = "0.3.52"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"kcl-lib",
|
||||
@ -1943,7 +1943,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-test-server"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"hyper 0.14.32",
|
||||
@ -1956,7 +1956,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-to-core"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1970,7 +1970,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-wasm-lib"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
dependencies = [
|
||||
"bson",
|
||||
"console_error_panic_hook",
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
[package]
|
||||
name = "kcl-bumper"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/KittyCAD/modeling-api"
|
||||
rust-version = "1.76"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-derive-docs"
|
||||
description = "A tool for generating documentation from Rust derive macros"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-directory-test-macro"
|
||||
description = "A tool for generating tests from a directory of kcl files"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "kcl-language-server-release"
|
||||
version = "0.1.51"
|
||||
version = "0.1.52"
|
||||
edition = "2021"
|
||||
authors = ["KittyCAD Inc <kcl@kittycad.io>"]
|
||||
publish = false
|
||||
|
@ -2,7 +2,7 @@
|
||||
name = "kcl-language-server"
|
||||
description = "A language server for KCL."
|
||||
authors = ["KittyCAD Inc <kcl@kittycad.io>"]
|
||||
version = "0.2.51"
|
||||
version = "0.2.52"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
@ -133,14 +133,14 @@
|
||||
"@tsconfig/strictest": "^2.0.5",
|
||||
"@types/glob": "^8.1.0",
|
||||
"@types/mocha": "^10.0.10",
|
||||
"@types/node": "^22.13.9",
|
||||
"@types/node": "^22.13.10",
|
||||
"@types/vscode": "^1.97.0",
|
||||
"@typescript-eslint/eslint-plugin": "^6.6.0",
|
||||
"@typescript-eslint/parser": "^6.6.0",
|
||||
"@vscode/test-electron": "^2.4.1",
|
||||
"@vscode/vsce": "^2.30.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"esbuild": "^0.25.0",
|
||||
"esbuild": "^0.25.1",
|
||||
"glob": "^10.4.3",
|
||||
"mocha": "^11.1.0",
|
||||
"typescript": "^5.8.2"
|
||||
|
@ -120,130 +120,130 @@
|
||||
jsonwebtoken "^9.0.0"
|
||||
uuid "^8.3.0"
|
||||
|
||||
"@esbuild/aix-ppc64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz#499600c5e1757a524990d5d92601f0ac3ce87f64"
|
||||
integrity sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==
|
||||
"@esbuild/aix-ppc64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz#c33cf6bbee34975626b01b80451cbb72b4c6c91d"
|
||||
integrity sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==
|
||||
|
||||
"@esbuild/android-arm64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz#b9b8231561a1dfb94eb31f4ee056b92a985c324f"
|
||||
integrity sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==
|
||||
"@esbuild/android-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz#ea766015c7d2655164f22100d33d7f0308a28d6d"
|
||||
integrity sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==
|
||||
|
||||
"@esbuild/android-arm@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.0.tgz#ca6e7888942505f13e88ac9f5f7d2a72f9facd2b"
|
||||
integrity sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==
|
||||
"@esbuild/android-arm@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.1.tgz#e84d2bf2fe2e6177a0facda3a575b2139fd3cb9c"
|
||||
integrity sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==
|
||||
|
||||
"@esbuild/android-x64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.0.tgz#e765ea753bac442dfc9cb53652ce8bd39d33e163"
|
||||
integrity sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==
|
||||
"@esbuild/android-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.1.tgz#58337bee3bc6d78d10425e5500bd11370cfdfbed"
|
||||
integrity sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==
|
||||
|
||||
"@esbuild/darwin-arm64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz#fa394164b0d89d4fdc3a8a21989af70ef579fa2c"
|
||||
integrity sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==
|
||||
"@esbuild/darwin-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz#a46805c1c585d451aa83be72500bd6e8495dd591"
|
||||
integrity sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==
|
||||
|
||||
"@esbuild/darwin-x64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz#91979d98d30ba6e7d69b22c617cc82bdad60e47a"
|
||||
integrity sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==
|
||||
"@esbuild/darwin-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz#0643e003bb238c63fc93ddbee7d26a003be3cd98"
|
||||
integrity sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==
|
||||
|
||||
"@esbuild/freebsd-arm64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz#b97e97073310736b430a07b099d837084b85e9ce"
|
||||
integrity sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==
|
||||
"@esbuild/freebsd-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz#cff18da5469c09986b93e87979de5d6872fe8f8e"
|
||||
integrity sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==
|
||||
|
||||
"@esbuild/freebsd-x64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz#f3b694d0da61d9910ec7deff794d444cfbf3b6e7"
|
||||
integrity sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==
|
||||
"@esbuild/freebsd-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz#362fc09c2de14987621c1878af19203c46365dde"
|
||||
integrity sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==
|
||||
|
||||
"@esbuild/linux-arm64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz#f921f699f162f332036d5657cad9036f7a993f73"
|
||||
integrity sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==
|
||||
"@esbuild/linux-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz#aa90d5b02efc97a271e124e6d1cea490634f7498"
|
||||
integrity sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==
|
||||
|
||||
"@esbuild/linux-arm@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz#cc49305b3c6da317c900688995a4050e6cc91ca3"
|
||||
integrity sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==
|
||||
"@esbuild/linux-arm@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz#dfcefcbac60a20918b19569b4b657844d39db35a"
|
||||
integrity sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==
|
||||
|
||||
"@esbuild/linux-ia32@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz#3e0736fcfab16cff042dec806247e2c76e109e19"
|
||||
integrity sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==
|
||||
"@esbuild/linux-ia32@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz#6f9527077ccb7953ed2af02e013d4bac69f13754"
|
||||
integrity sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==
|
||||
|
||||
"@esbuild/linux-loong64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz#ea2bf730883cddb9dfb85124232b5a875b8020c7"
|
||||
integrity sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==
|
||||
"@esbuild/linux-loong64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz#287d2412a5456e5860c2839d42a4b51284d1697c"
|
||||
integrity sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==
|
||||
|
||||
"@esbuild/linux-mips64el@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz#4cababb14eede09248980a2d2d8b966464294ff1"
|
||||
integrity sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==
|
||||
"@esbuild/linux-mips64el@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz#530574b9e1bc5d20f7a4f44c5f045e26f3783d57"
|
||||
integrity sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==
|
||||
|
||||
"@esbuild/linux-ppc64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz#8860a4609914c065373a77242e985179658e1951"
|
||||
integrity sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==
|
||||
"@esbuild/linux-ppc64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz#5d7e6b283a0b321ea42c6bc0abeb9eb99c1f5589"
|
||||
integrity sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==
|
||||
|
||||
"@esbuild/linux-riscv64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz#baf26e20bb2d38cfb86ee282dff840c04f4ed987"
|
||||
integrity sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==
|
||||
"@esbuild/linux-riscv64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz#14fa0cd073c26b4ee2465d18cd1e18eea7859fa8"
|
||||
integrity sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==
|
||||
|
||||
"@esbuild/linux-s390x@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz#8323afc0d6cb1b6dc6e9fd21efd9e1542c3640a4"
|
||||
integrity sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==
|
||||
"@esbuild/linux-s390x@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz#e677b4b9d1b384098752266ccaa0d52a420dc1aa"
|
||||
integrity sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==
|
||||
|
||||
"@esbuild/linux-x64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz#08fcf60cb400ed2382e9f8e0f5590bac8810469a"
|
||||
integrity sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==
|
||||
"@esbuild/linux-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz#f1c796b78fff5ce393658313e8c58613198d9954"
|
||||
integrity sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==
|
||||
|
||||
"@esbuild/netbsd-arm64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz#935c6c74e20f7224918fbe2e6c6fe865b6c6ea5b"
|
||||
integrity sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==
|
||||
"@esbuild/netbsd-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz#0d280b7dfe3973f111b02d5fe9f3063b92796d29"
|
||||
integrity sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==
|
||||
|
||||
"@esbuild/netbsd-x64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz#414677cef66d16c5a4d210751eb2881bb9c1b62b"
|
||||
integrity sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==
|
||||
"@esbuild/netbsd-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz#be663893931a4bb3f3a009c5cc24fa9681cc71c0"
|
||||
integrity sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==
|
||||
|
||||
"@esbuild/openbsd-arm64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz#8fd55a4d08d25cdc572844f13c88d678c84d13f7"
|
||||
integrity sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==
|
||||
"@esbuild/openbsd-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz#d9021b884233673a05dc1cc26de0bf325d824217"
|
||||
integrity sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==
|
||||
|
||||
"@esbuild/openbsd-x64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz#0c48ddb1494bbc2d6bcbaa1429a7f465fa1dedde"
|
||||
integrity sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==
|
||||
"@esbuild/openbsd-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz#9f1dc1786ed2e2938c404b06bcc48be9a13250de"
|
||||
integrity sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==
|
||||
|
||||
"@esbuild/sunos-x64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz#86ff9075d77962b60dd26203d7352f92684c8c92"
|
||||
integrity sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==
|
||||
"@esbuild/sunos-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz#89aac24a4b4115959b3f790192cf130396696c27"
|
||||
integrity sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==
|
||||
|
||||
"@esbuild/win32-arm64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz#849c62327c3229467f5b5cd681bf50588442e96c"
|
||||
integrity sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==
|
||||
"@esbuild/win32-arm64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz#354358647a6ea98ea6d243bf48bdd7a434999582"
|
||||
integrity sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==
|
||||
|
||||
"@esbuild/win32-ia32@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz#f62eb480cd7cca088cb65bb46a6db25b725dc079"
|
||||
integrity sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==
|
||||
"@esbuild/win32-ia32@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz#8cea7340f2647eba951a041dc95651e3908cd4cb"
|
||||
integrity sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==
|
||||
|
||||
"@esbuild/win32-x64@0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz#c8e119a30a7c8d60b9d2e22d2073722dde3b710b"
|
||||
integrity sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==
|
||||
"@esbuild/win32-x64@0.25.1":
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz#7d79922cb2d88f9048f06393dbf62d2e4accb584"
|
||||
integrity sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==
|
||||
|
||||
"@eslint-community/eslint-utils@^4.4.0":
|
||||
version "4.4.1"
|
||||
@ -323,10 +323,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0"
|
||||
integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==
|
||||
|
||||
"@types/node@*", "@types/node@^22.13.9":
|
||||
version "22.13.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.9.tgz#5d9a8f7a975a5bd3ef267352deb96fb13ec02eca"
|
||||
integrity sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==
|
||||
"@types/node@*", "@types/node@^22.13.10":
|
||||
version "22.13.10"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4"
|
||||
integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==
|
||||
dependencies:
|
||||
undici-types "~6.20.0"
|
||||
|
||||
@ -1025,36 +1025,36 @@ es-errors@^1.3.0:
|
||||
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
||||
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
|
||||
|
||||
esbuild@^0.25.0:
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.0.tgz#0de1787a77206c5a79eeb634a623d39b5006ce92"
|
||||
integrity sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==
|
||||
esbuild@^0.25.1:
|
||||
version "0.25.1"
|
||||
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.1.tgz#a16b8d070b6ad4871935277bda6ccfe852e3fa2f"
|
||||
integrity sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==
|
||||
optionalDependencies:
|
||||
"@esbuild/aix-ppc64" "0.25.0"
|
||||
"@esbuild/android-arm" "0.25.0"
|
||||
"@esbuild/android-arm64" "0.25.0"
|
||||
"@esbuild/android-x64" "0.25.0"
|
||||
"@esbuild/darwin-arm64" "0.25.0"
|
||||
"@esbuild/darwin-x64" "0.25.0"
|
||||
"@esbuild/freebsd-arm64" "0.25.0"
|
||||
"@esbuild/freebsd-x64" "0.25.0"
|
||||
"@esbuild/linux-arm" "0.25.0"
|
||||
"@esbuild/linux-arm64" "0.25.0"
|
||||
"@esbuild/linux-ia32" "0.25.0"
|
||||
"@esbuild/linux-loong64" "0.25.0"
|
||||
"@esbuild/linux-mips64el" "0.25.0"
|
||||
"@esbuild/linux-ppc64" "0.25.0"
|
||||
"@esbuild/linux-riscv64" "0.25.0"
|
||||
"@esbuild/linux-s390x" "0.25.0"
|
||||
"@esbuild/linux-x64" "0.25.0"
|
||||
"@esbuild/netbsd-arm64" "0.25.0"
|
||||
"@esbuild/netbsd-x64" "0.25.0"
|
||||
"@esbuild/openbsd-arm64" "0.25.0"
|
||||
"@esbuild/openbsd-x64" "0.25.0"
|
||||
"@esbuild/sunos-x64" "0.25.0"
|
||||
"@esbuild/win32-arm64" "0.25.0"
|
||||
"@esbuild/win32-ia32" "0.25.0"
|
||||
"@esbuild/win32-x64" "0.25.0"
|
||||
"@esbuild/aix-ppc64" "0.25.1"
|
||||
"@esbuild/android-arm" "0.25.1"
|
||||
"@esbuild/android-arm64" "0.25.1"
|
||||
"@esbuild/android-x64" "0.25.1"
|
||||
"@esbuild/darwin-arm64" "0.25.1"
|
||||
"@esbuild/darwin-x64" "0.25.1"
|
||||
"@esbuild/freebsd-arm64" "0.25.1"
|
||||
"@esbuild/freebsd-x64" "0.25.1"
|
||||
"@esbuild/linux-arm" "0.25.1"
|
||||
"@esbuild/linux-arm64" "0.25.1"
|
||||
"@esbuild/linux-ia32" "0.25.1"
|
||||
"@esbuild/linux-loong64" "0.25.1"
|
||||
"@esbuild/linux-mips64el" "0.25.1"
|
||||
"@esbuild/linux-ppc64" "0.25.1"
|
||||
"@esbuild/linux-riscv64" "0.25.1"
|
||||
"@esbuild/linux-s390x" "0.25.1"
|
||||
"@esbuild/linux-x64" "0.25.1"
|
||||
"@esbuild/netbsd-arm64" "0.25.1"
|
||||
"@esbuild/netbsd-x64" "0.25.1"
|
||||
"@esbuild/openbsd-arm64" "0.25.1"
|
||||
"@esbuild/openbsd-x64" "0.25.1"
|
||||
"@esbuild/sunos-x64" "0.25.1"
|
||||
"@esbuild/win32-arm64" "0.25.1"
|
||||
"@esbuild/win32-ia32" "0.25.1"
|
||||
"@esbuild/win32-x64" "0.25.1"
|
||||
|
||||
escalade@^3.1.1:
|
||||
version "3.1.2"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-lib"
|
||||
description = "KittyCAD Language implementation and tools"
|
||||
version = "0.2.51"
|
||||
version = "0.2.52"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
|
@ -23,7 +23,9 @@ use crate::{
|
||||
const TYPES_DIR: &str = "../../docs/kcl/types";
|
||||
const LANG_TOPICS: [&str; 5] = ["Types", "Modules", "Settings", "Known Issues", "Constants"];
|
||||
// These types are declared in std.
|
||||
const DECLARED_TYPES: [&str; 7] = ["number", "string", "tag", "bool", "Sketch", "Solid", "Plane"];
|
||||
const DECLARED_TYPES: [&str; 11] = [
|
||||
"number", "string", "tag", "bool", "Sketch", "Solid", "Plane", "Helix", "Face", "Point2d", "Point3d",
|
||||
];
|
||||
|
||||
fn init_handlebars() -> Result<handlebars::Handlebars<'static>> {
|
||||
let mut hbs = handlebars::Handlebars::new();
|
||||
@ -457,6 +459,7 @@ fn generate_type_from_kcl(ty: &TyData, file_name: String, example_name: String)
|
||||
|
||||
let data = json!({
|
||||
"name": ty.qual_name(),
|
||||
"definition": ty.alias.as_ref().map(|t| format!("type {} = {t}", ty.name)),
|
||||
"summary": ty.summary,
|
||||
"description": ty.description,
|
||||
"deprecated": ty.properties.deprecated,
|
||||
|