From 6ff41b1887f29ed1ab3e60876c05d7edeacfc5db Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Mon, 15 Sep 2025 17:49:41 +0300 Subject: [PATCH 01/10] update --- docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md b/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md index bf19e11f..2b46a9ca 100644 --- a/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md +++ b/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md @@ -105,7 +105,7 @@ Here's a glimpse of how the Viewer Editor looks within the "3D Bits" app environ While our Viewer Editor is the recommended way to create and manage the Scene Config JSON, you can also edit the JSON directly using any text editor. For a better editing experience with features like syntax highlighting and autocompletion (intellisense), we provide a JSON schema. -* **JSON Schema:** You can find the schema [here](https://ik.imagekit.io/bitbybit/app/assets/start/shopify/viewer-scene-config-schema-0-20-5.json). (Note: This schema link points to version `0.20.6`. The schema may be updated in the future, so ensure you refer to the latest version compatible with your "3D Bits" app version.) +* **JSON Schema:** You can find the schema [here](https://ik.imagekit.io/bitbybit/app/assets/start/shopify/viewer-scene-config-schema-0-20-6.json). (Note: This schema link points to version `0.20.6`. The schema may be updated in the future, so ensure you refer to the latest version compatible with your "3D Bits" app version.) Many modern code editors (like VS Code) can use this schema to provide validation and autocompletion as you edit the JSON. ## Video Tutorial: BITBYBIT VIEWER Block Setup From 990c4a60c055e1756d65c11ed7f155a5696f98a1 Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Wed, 17 Sep 2025 11:34:37 +0300 Subject: [PATCH 02/10] update 3d bits info on plans, adjusted for standard plan --- docs/learn/3d-bits/faq.md | 7 +- docs/learn/3d-bits/intro.mdx | 81 +++++---- .../learn/3d-bits/plans/subscription-plans.md | 162 +++++++++--------- .../theme-app-extensions/bitbybit-apps.md | 8 +- .../theme-app-extensions/bitbybit-preview.md | 4 +- .../theme-app-extensions/bitbybit-runner.md | 2 +- .../theme-app-extensions/bitbybit-viewer.md | 19 +- 7 files changed, 154 insertions(+), 129 deletions(-) diff --git a/docs/learn/3d-bits/faq.md b/docs/learn/3d-bits/faq.md index b4c9cee4..28b2f2f5 100644 --- a/docs/learn/3d-bits/faq.md +++ b/docs/learn/3d-bits/faq.md @@ -24,7 +24,7 @@ As 3D Bits makes its way into Shopify stores, we’ve started getting some recur **Yes, absolutely!** If you can click buttons and copy-paste, you’re good to go for basic 3D model display. **Here's the simple process:** -1. Install 3D Bits app, subscribe to Annual Base plan to begin your trial and pin the app. +1. Install 3D Bits app, subscribe to Base plan to begin your trial and pin the app. 2. Go to Metafields sections within the app admin page and hit create button. 3. Upload your 3D models to Shopify via **Content > Files**. 4. Copy the link to your uploaded 3D model. @@ -76,7 +76,7 @@ For more complex configurators (e.g., where parts change dynamically beyond pre- You have a couple of flexible paths, depending on your needs and your team's skills: - **Want to do it yourself?** - Our Base plan includes No-Code and Low-Code editors, so you can create 3D product experiences and even basic configurators without writing any code. If you’re comfortable with simple setup steps, you can get started on your own. + Our plans include No-Code and Low-Code editors, so you can create 3D product experiences and even basic configurators without writing any code. If you’re comfortable with simple setup steps, you can get started on your own. - **Have a developer team?** If your developers are comfortable with coding, they’ll get the most out of our Pro plan. It unlocks advanced features and tools designed for building fully custom 3D experiences. @@ -92,6 +92,7 @@ While you *could* build your own 3D integration from scratch (handling WebGL vie **3D Bits takes care of the essentials:** * Simple 3D model embedding. +* No-Code solutions that your clients will appreciate. * Seamless Shopify metafield integration for 3D assets. * Easy mapping between product variants and 3D models. * The Runner block, which lets you run your own JavaScript/TypeScript to control the 3D scene and respond to store events. @@ -154,7 +155,7 @@ This is where our **Pro** plan really shines, but you can also use the **BITBYBI ### Does 3D Bits offer fancy UI controls for product pages (like custom sliders, color swatches, etc.)? -**In general - no. 3D Bits is not here to reinvent the dropdown or the color swatch.** +**In general - no. 3D Bits is not here to reinvent the dropdown or the color swatch. But we do provide fancy 3D linked UI elements that improve product experience, such as points of interest - when users click on them camera flies to pre-defined position in fluid cinematic motion.** There are many excellent Shopify apps and theme development techniques dedicated to creating sophisticated UI controls for product options. Having said that Pro plan does have the ability to use frameworks such as React, Angular or others to create UI elements. However keep in mind that we do not offer any special technologies to alter the prices. If you need such functionality you'll need to build it yourself. diff --git a/docs/learn/3d-bits/intro.mdx b/docs/learn/3d-bits/intro.mdx index cff1b675..e3a5bef1 100644 --- a/docs/learn/3d-bits/intro.mdx +++ b/docs/learn/3d-bits/intro.mdx @@ -10,24 +10,25 @@ tags: [shopify, 3d-bits] ## What is 3D Bits? -**3D Bits** is a Shopify app that lets you add interactive 3D product configurators and visualizations to your online store. With 3D Bits, your customers can see and customize products in real-time 3D, making shopping more engaging and helping them understand exactly what they’re buying. +**3D Bits** is a Shopify app that empowers you to add interactive 3D product configurators and visualizations directly to your online store. Imagine your customers exploring and customizing products in real-time 3D – that's the immersive shopping experience 3D Bits delivers, helping them understand exactly what they're buying. -**Try it out:** +**Ready to try it out?** * Visit our **[Demo Store](https://bitbybit-dev-3d-configurators.myshopify.com)** * Use password: `3d-bits-demo`

- Install 3D Bits from Shopify App Store + Install 3D Bits from the Shopify App Store

-## Why Use 3D Bits? +## Why Choose 3D Bits? -Traditional online stores use static images, but modern shoppers want to see products from every angle and try out different options. 3D Bits makes this possible by letting you build interactive 3D experiences for your products—no advanced coding required. +Traditional online shopping relies on static images, but today's customers demand more. They want to see products from every angle and visualize different options. 3D Bits makes this possible, allowing you to create dynamic 3D experiences for your products without needing advanced coding skills. +Here's a quick look at 3D Bits in action:
-## What Our Customers Say +## Hear From Our Customers
@@ -64,44 +65,64 @@ Traditional online stores use static images, but modern shoppers want to see pro
- ## How Does 3D Bits Work? -3D Bits is built on the [bitbybit.dev](https://bitbybit.dev) platform, which provides powerful 3D and CAD tools for both beginners and professionals. You can: +3D Bits is powered by the [bitbybit.dev](https://bitbybit.dev) platform, offering robust 3D and CAD tools for all skill levels: + +* **No-Code:** Quickly set up interactive 3D product pages. +* **Low-Code:** Use visual programming for more detailed control. +* **TypeScript:** Write custom code for advanced functionalities. +* **Developer-Friendly:** Integrate with popular 3D engines and professional tools like VSCode. + +## Our Plans + +We offer three subscription plans: `Base`, `Standard`, and `Pro`, designed to fit various needs and complexities. -- Use **No-Code** configurators to quickly set up 3D product pages. -- Try **Low-Code** visual programming for more control. -- Write custom logic with **TypeScript** if you want advanced features. -- For developers, connect with popular 3D engines and use professional tools like VSCode. +### Base Plan -## Plans +Ideal for beginner merchants, the Base plan provides No-Code and Low-Code solutions to build dynamic 3D experiences. Whether you're using static 3D assets or implementing more complex parametric designs, this plan simplifies 3D product presentation. -Currently, we offer 2 subscription plans: `Basic` and `Pro`. +* Create interactive 3D scenes with No-Code and Low-Code tools. +* Write short scripts for custom behaviors. +* Supports the BabylonJS game engine. -### Basic Plan +### Standard Plan -The Basic plan is designed for most merchants and offers a lot of No-Code and Low-Code solutions for building 3D experiences on your Shopify storefront. You can easily configure static and dynamic 3D scenes, and use visual or TypeScript code snippets for extra logic. This plan is ideal if you want to present configurable products in 3D and only need to handle some, but not huge amounts, of logic and complexity. Most technically-minded merchants will find the Basic plan covers common use-cases for 3D product pages. +The Standard plan expands on the Base features, perfect for merchants seeking enhanced visual effects and dedicated support. -- Use No-Code and Low-Code tools to create interactive 3D scenes. -- Add short scripts for custom behaviors. -- Built to simplify 3D product presentation, but flexible enough for moderate customization. -- Supports the BabylonJS game engine. +* Includes all `Base` plan features. +* Utilize advanced navigation, such as 3D points of interest in No-Code editors. +* Benefit from Standard support, including expert consultations to optimize performance. ### Pro Plan -The Pro plan is for merchants with professional development teams or those who hire programmers. Some 3D experiences can become very complex, and even our Low-Code editors or built-in TypeScript environment may not be enough. If you want to set up projects inside game engines such as ThreeJS, BabylonJS, or PlayCanvas, or if your team wants to host code on their own GitHub repositories, use VSCode, or write unit tests, the Pro plan is for you. We provide access to pre-built Vite TypeScript templates and support for advanced workflows. +Designed for professional development teams or merchants requiring premium support, the Pro plan offers flexibility and power. + +* Includes all `Standard` plan features. +* Build complex 3D experiences with your preferred engine (e.g., ThreeJS, BabylonJS, PlayCanvas). +* Use your own codebase, GitHub repositories, and professional development tools like VSCode. +* Access pre-built Vite TypeScript templates for advanced workflows. +* Receive premium support, including assistance in building your first No-Code configurator. + +#### [Learn More](/learn/3d-bits/plans/subscription-plans) + +### Choosing Your Plan -- Build complex 3D experiences with your choice of engine or framework. -- Use your own codebase, GitHub, and professional tools. -- Ideal for custom solutions, advanced logic, or large-scale projects. -- Access to Vite TypeScript templates and more. +**By Support Level:** +* **Base:** Self-learners who need guidance to tutorials and documentation. +* **Standard:** Teams looking for expert advice tailored to their product. +* **Pro:** Those who want our direct help in building their first No-Code configurator. -**How to choose?** +**By No-Code Features:** +* **Base:** For products that switch & control static 3D assets based on user options. +* **Standard:** To add beautiful 3D effects that make your products stand out. -It depends on your needs and preferences. As a guideline: if your configurators start reaching 5000 lines of code, managing them with simple inline scripts becomes difficult—consider moving to the Pro plan. Also, if you want to use a custom game engine or install different NPM packages, you'll need Pro. The Basic plan is built on BabylonJS; for other technologies, go Pro. +**By Configurator Complexity:** +* **Base:** For configurators with custom logic that can be handled by low-code visual scripting or short TypeScript programs. +* **Pro:** For complex configurators (e.g., over 5000 lines of TypeScript code), custom game engines, or the need to install different NPM packages. ## Why Shopify? -Shopify is one of the world’s most popular e-commerce platforms. It’s easy to use, flexible, and has a huge ecosystem of apps and developers. That’s why we chose Shopify as the home for 3D Bits—so you can easily add cutting-edge 3D experiences to your store and stand out from the competition. +Shopify is a leading e-commerce platform, renowned for its ease of use, flexibility, and vast ecosystem. We chose Shopify for 3D Bits to ensure you can effortlessly integrate cutting-edge 3D experiences, helping your store captivate customers and stand out in the competitive online market. -We’re excited to help you create amazing, interactive product pages with 3D Bits! \ No newline at end of file +We're excited to help you create amazing, interactive product pages with 3D Bits! \ No newline at end of file diff --git a/docs/learn/3d-bits/plans/subscription-plans.md b/docs/learn/3d-bits/plans/subscription-plans.md index c6991b2e..bfe3dc1c 100644 --- a/docs/learn/3d-bits/plans/subscription-plans.md +++ b/docs/learn/3d-bits/plans/subscription-plans.md @@ -10,88 +10,86 @@ tags: [shopify, 3d-bits] ## Plan Comparison -| Feature | Annual Base | Annual Pro | -|---------|-------------|------------| -| **Price** | 142$ yearly | 900$ yearly | -| **Trial** | 14 days | 21 days | -| **Target Audience** | Store owners, small teams | Professional development teams | -| **Setup Complexity** | Easy, no coding required (optional scripting) | Advanced, requires development skills | -| **Custom Development** | Optional | Mandatory | - -## Annual Base Plan - -Perfect for store owners who want to add 3D capabilities to their products without complex development work. - -### Core 3D Features -- ✅ Add 3D models to unlimited products -- ✅ Upload and display 3D files (GLTF format) -- ✅ Show realistic 3D product scans (Splat format) -- ✅ Let customers customize products in 3D -- ✅ Mobile-friendly 3D viewing -- ✅ Fast loading and smooth performance - -### Product Configurators -- ✅ Create simple product configurators without coding -- ✅ Build configurators with [bitbybit.dev](https://bitbybit.dev) visual programming tools -- ✅ Build advanced configurators with dedicated [bitbybit.dev](https://bitbybit.dev) TypeScript editor -- ✅ Create interactive 3D experiences -- ✅ Add realistic physics to product demos -- ✅ Design parametric and custom shapes - -### User Experience -- ✅ View products in full screen mode -- ✅ Show loading animations during processing -- ✅ Connect with pricing and UI apps - -:::tip Who is this for? -Annual Base is ideal for merchants who want to enhance their product pages with 3D models and simple configurators without needing a development team. -::: - -## Annual Pro Plan - -Designed for professional development teams who need complete control and advanced customization capabilities. - -### Everything in Annual Base, Plus: - -### Professional Development Tools -- ✅ Develop professional Single Page Applications (SPA) for product pages -- ✅ Embed SPA apps to product page via Theme App Extension block -- ✅ Use ThreeJS, BabylonJS, PlayCanvas or other web 3D engines -- ✅ Write custom Vite based TypeScript apps for 3D & 2D product presentations - -### Development Workflow -- ✅ Use the tools & editors that your team loves - VSCode, GitHub, etc. -- ✅ Ensure quality of your apps via unit tests -- ✅ Use configured local host development environment -- ✅ Emulate production environment in preview mode -- ✅ Easily embed build output via single JavaScript file to product page - -### Exclusive Access -- ✅ Access & clone opinionated example templates from our private GitHub repository -- ✅ Access private `bits-pro` NPM package allowing communication between product page inputs & your app logic - -:::warning Development Skills Required -Annual Pro requires technical expertise in JavaScript/TypeScript, 3D web development, and modern web development workflows. This plan is designed for development teams, not end users. -::: - -## Getting Started - -### Annual Base -1. Subscribe to the plan -2. Start adding 3D models immediately -3. Use our visual tools to create configurators -4. Publish to your store - -### Annual Pro -1. Subscribe to the plan -2. **Wait 24 hours** for access tokens to be sent to your email -3. Access our private GitHub repository and NPM package -4. Follow our [BITBYBIT APPS Pro guide](/learn/3d-bits/theme-app-extensions/bitbybit-apps) -5. Start developing custom 3D applications - -:::info Access Token Delivery -Pro plan subscribers will receive access tokens within 24 hours of subscription. If you don't receive them, contact us at [info@bitbybit.dev](mailto:info@bitbybit.dev) and we'll extend your trial period by 3 days. -::: +| Feature | Base | Standard | Pro | +|---------|-------------|------------|------------| +| **Annual Price** | **$142** / year | **$530** / year | **$900** / year | +| **Monthly Price** | **$25** / month | **$75** / month | **$120** / month | +| **Savings - Annual** | **53%** | **41%** | **38%** | +| **Trial** | 7 days | 14 days | 21 days | +| **Target Audience** | Beginners setting up shops | Merchants running existing business | Pro 3D development teams | +| **Theme App Extensions** | VIEWER, RUNNER, PREVIEW | VIEWER, RUNNER, PREVIEW | VIEWER, RUNNER, PREVIEW, APPS | +| **Nr Products** | Unlimited | Unlimited | Unlimited | +| **Support** | Fundamental | Standard | Premium | +| **How We Help** | We help mostly by providing links to documentation and tutorials | We actively guide your team by explaining how to set 3D products | We become part of your team and help set up first no-code configurator with your 3D assets | + + +## Plan Differences Per Shopify Theme App Extension + +### BITBYBIT VIEWER (No-Code) + +BITBYBIT VIEWER theme app extension supports building 3D configurators without writing code. It provides advanced editor user friendly editor that helps you load 3D models, configure loading indicators, scene, lights, camera settings and link 3D models or materials to product options. + +| Feature | Base | Standard | Pro | +|---------|-------------|------------|------------| +| **Nr 3D Models** | Unlimited | Unlimited | Unlimited | +| **3D Model Variants** | ✅ | ✅ | ✅ | +| **Skybox** | ✅ | ✅ | ✅ | +| **Camera Settings** | ✅ | ✅ | ✅ | +| **Background Color** | ✅ | ✅ | ✅ | +| **Loading Progress Indicator** | ✅ | ✅ | ✅ | +| **Custom Loading Logo** | ✅ | ✅ | ✅ | +| **Directional Lights** | ✅ | ✅ | ✅ | +| **File Size Validations** | ✅ | ✅ | ✅ | +| **GLTF (File Format)** | ✅ | ✅ | ✅ | +| **3DGS (File Format 3D Scans)** | ✅ | ✅ | ✅ | +| **KHR Material Variants (GLTF)** | ✅ | ✅ | ✅ | +| **GLTF Parsing** | ✅ | ✅ | ✅ | +| **GLTF Node Variants** | ✅ | ✅ | ✅ | +| **Points of interest** | x | ✅ | ✅ | +| **Points of interest variants** | x | ✅ | ✅ | + +Features in `Standard` and `Pro` plans are expected to grow, so remember to check this list for potential updates in the future. + +[Learn More](/learn/3d-bits/theme-app-extensions/bitbybit-viewer) + +### BITBYBIT RUNNER (Low-Code & Pro-Code) + +BITBYBIT RUNNER theme app extension supports building 3D configurators by composing visual scripts or writing short TypeScript programs. + +| Feature | Base | Standard | Pro | +|---------|-------------|------------|------------| +| **Bitbybit Rete Editor** | ✅ | ✅ | ✅ | +| **Bitbybit Blockly Editor** | ✅ | ✅ | ✅ | +| **Bitbybit TypeScript Editor (Monaco)** | ✅ | ✅ | ✅ | + +[Learn More](/learn/3d-bits/theme-app-extensions/bitbybit-runner) + +### BITBYBIT APPS (Pro-Code) + +BITBYBIT APPS theme app extension supports building 3D configurators by writing full 3D SPA applications in the editors that your team prefers. + +| Feature | Base | Standard | Pro | +|---------|-------------|------------|------------| +| **Vite template examples** | x | x | ✅ | +| **Bits-pro NPM package** | x | x | ✅ | +| **Supports local dev environment** | x | x | ✅ | +| **Unit Tests** | x | x | ✅ | +| **Git** | x | x | ✅ | +| **BabylonJS game engine** | x | x | ✅ | +| **ThreeJS game engine** | x | x | ✅ | +| **PlayCanvas game engine** | x | x | ✅ | + +[Learn More](/learn/3d-bits/theme-app-extensions/bitbybit-apps) + +### BITBYBIT PREVIEW (Low-Code & Pro-Code) + +BITBYBIT PREVIEW theme app extension allows you to embed published bitbybit.dev scripts as your products. + +| Feature | Base | Standard | Pro | +|---------|-------------|------------|------------| +| **Embed public Bitbybit scripts** | ✅ | ✅ | ✅ | + +[Learn More](/learn/3d-bits/theme-app-extensions/bitbybit-preview) ## Support diff --git a/docs/learn/3d-bits/theme-app-extensions/bitbybit-apps.md b/docs/learn/3d-bits/theme-app-extensions/bitbybit-apps.md index 579dc27d..abd5f6c5 100644 --- a/docs/learn/3d-bits/theme-app-extensions/bitbybit-apps.md +++ b/docs/learn/3d-bits/theme-app-extensions/bitbybit-apps.md @@ -1,7 +1,7 @@ --- sidebar_position: 4 title: "BITBYBIT APPS Block for Shopify's '3D Bits' App" -sidebar_label: BITBYBIT APPS (PRO) +sidebar_label: BITBYBIT APPS description: Learn how to use the BITBYBIT APPS theme app extension block to develop and deploy professional 3D & 2D product presentations on Shopify tags: [shopify, 3d-bits, typescript] --- @@ -173,7 +173,7 @@ It's crucial to understand what this setup provides and its inherent limitations ### What This Setup Does NOT Provide Out-of-the-Box: ❌ **Server-Side Rendering (SSR)**: Applications are client-side rendered. ❌ **Backend API Solutions**: No built-in backend for custom server logic or databases. -❌ **Direct Shopify Admin API Integration**: While technically possible to call Shopify APIs from the frontend with appropriate authentication, our templates don't include examples for this, and it requires careful security consideration. +❌ **Direct Shopify Admin API Integration**: While technically possible to call Shopify APIs from the frontend with appropriate authentication, our templates don't include examples for this, and it requires careful security consideration. ❌ **Database or Persistence Layer**: User-specific data persistence needs a separate backend solution. ❌ **Built-in Secure Pricing Validation**: Price calculations affecting the cart must be validated server-side. @@ -185,7 +185,7 @@ If your project demands features like Server-Side Rendering, custom backend APIs Embark on your journey to creating stunning product experiences. ### Prerequisites -- An active **Annual Pro subscription** to the "3D Bits" Shopify app. +- An active **Pro subscription** to the "3D Bits" Shopify app. - **Access tokens** to our private GitHub repository (provided with the Pro plan). - Solid knowledge of **TypeScript** and modern web development principles. - A good understanding of Shopify theme structure and development concepts. @@ -215,4 +215,4 @@ Embark on your journey to creating stunning product experiences. --- -*The BITBYBIT APPS block and associated professional development features are available exclusively with the Annual Pro subscription plan for "3D Bits".* \ No newline at end of file +*The BITBYBIT APPS block and associated professional development features are available exclusively with the Pro subscription plan for "3D Bits".* \ No newline at end of file diff --git a/docs/learn/3d-bits/theme-app-extensions/bitbybit-preview.md b/docs/learn/3d-bits/theme-app-extensions/bitbybit-preview.md index 7cb8e401..029e34e0 100644 --- a/docs/learn/3d-bits/theme-app-extensions/bitbybit-preview.md +++ b/docs/learn/3d-bits/theme-app-extensions/bitbybit-preview.md @@ -1,7 +1,7 @@ --- -sidebar_position: 1 +sidebar_position: 3 title: "BITBYBIT PREVIEW Block for Shopify's '3D Bits' App" -sidebar_label: BITBYBIT PREVIEW (BASIC) +sidebar_label: BITBYBIT PREVIEW description: Learn how to use the BITBYBIT PREVIEW theme app extension block in Shopify's "3D Bits" app to embed publicly available Bitbybit project scripts into your product pages. tags: [shopify, 3d-bits] --- diff --git a/docs/learn/3d-bits/theme-app-extensions/bitbybit-runner.md b/docs/learn/3d-bits/theme-app-extensions/bitbybit-runner.md index ca78be4f..096436bb 100644 --- a/docs/learn/3d-bits/theme-app-extensions/bitbybit-runner.md +++ b/docs/learn/3d-bits/theme-app-extensions/bitbybit-runner.md @@ -1,7 +1,7 @@ --- sidebar_position: 2 title: "BITBYBIT RUNNER Block for Shopify's '3D Bits' App" -sidebar_label: BITBYBIT RUNNER (BASIC) +sidebar_label: BITBYBIT RUNNER description: Learn how to use the BITBYBIT RUNNER theme app extension block in Shopify's "3D Bits" app to integrate parametric 3D models and interactive scripts from Bitbybit into your product pages. tags: [shopify, 3d-bits] --- diff --git a/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md b/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md index 2b46a9ca..6d4b4e02 100644 --- a/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md +++ b/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md @@ -1,16 +1,16 @@ --- -sidebar_position: 3 +sidebar_position: 1 title: "BITBYBIT VIEWER Block for Shopify's '3D Bits' App" -sidebar_label: BITBYBIT VIEWER (BASIC) +sidebar_label: BITBYBIT VIEWER description: Learn how to use the BITBYBIT VIEWER theme app extension block in Shopify's "3D Bits" app to display static 3D models and configure complex scenes on your product pages without coding. tags: [shopify, 3d-bits] --- -# The "BITBYBIT VIEWER" Block for Shopify +# The "BITBYBIT VIEWER" Block for Shopify (No-Code) -The **BITBYBIT VIEWER** is a theme app extension block provided by our "3D Bits" Shopify app. It offers the simplest way to present static 3D models on your product pages **without needing to interact with the Bitbybit editors or write any code.** +The **BITBYBIT VIEWER** is a theme app extension block provided by `3D Bits` app for Shopify. It offers the simplest way to create 3D model configurators from static assets on your product pages **without needing to interact with the Bitbybit coding editors.** -You can upload your 3D models to the Shopify CDN or any other publicly accessible cloud storage, and then use the URL of the file to display it directly on your product page using this block. For more advanced scenarios, the VIEWER block also allows you to load and configure multiple 3D models at once using a special JSON configuration, which can be easily created with our new **Viewer Editor tool**. +You can upload your 3D models to the Shopify CDN or any other publicly accessible cloud storage, and then use the URL of the file to display it directly on your product page using this block. For more advanced scenarios, the VIEWER block also allows you to load and configure multiple 3D models at once using a special JSON configuration, which can be easily created with our new **Viewer Editor tool**. These files can be linked to product options, such as size or color. You can also parse files such as GLTF to use material variants. ![A Shopify product page showcasing a 3D model using the BITBYBIT VIEWER block.](https://ik.imagekit.io/bitbybit/app/assets/start/shopify/bitbybit-viewer-theme-app-extension-block-shopify-3d-bits.jpeg "Demo store product using the BITBYBIT VIEWER block") *Demo store product that uses the BITBYBIT VIEWER block.* @@ -54,14 +54,15 @@ Currently, the BITBYBIT VIEWER block supports the following 3D model formats: After completing these steps and previewing your product page, you should see the 3D model displayed. -## Building More Complex 3D Experiences with Scene Config JSON +## Building More Complex 3D Experiences with Viewer Editor Sometimes, simply loading a single 3D model isn't enough. You might want to: * Customize camera settings (initial position, target, field of view). * Set up specific lighting (types, intensity, color, position). * Enable a skybox for realistic environment reflections. * Load multiple 3D models into the same scene. -* Even make different models or their properties react to changing Shopify product variants (e.g., show a red chair model when the "Red" variant is selected, and a blue one for "Blue"). +* Make different 3D models or their properties react to changing Shopify product variants (e.g., show a red chair model when the "Red" variant is selected, and a blue one for "Blue"). +* Define points of interest This is where the **Scene Config JSON** functionality comes in. We have recently released a new **Viewer Editor tool** within the "3D Bits" app that allows you to create this JSON configuration through a simple, visual user interface. With this editor, you can load multiple 3D models, adjust camera settings, enable skyboxes, configure lighting, add shadows, and more, all without writing code. @@ -101,6 +102,10 @@ Here's a glimpse of how the Viewer Editor looks within the "3D Bits" app environ ![A Shopify product page showing a 3D model of vases rendered with custom lighting and shadows, configured via Scene Config JSON using the BITBYBIT VIEWER block.](https://ik.imagekit.io/bitbybit/app/assets/start/shopify/product-page-viewer-serenity-swirl-shopify.jpeg "Product page using VIEWER block and Scene Config JSON") *Demo store product that uses the BITBYBIT VIEWER block and Scene Configuration metafield.* +### What if JSON is too large for the metafield? + +Save your JSON configurator as a file, upload it to Shopify CDN as a file. Copy URL and paste it into the metafield, this will inform 3D Bits app to load the contents of the file. + ### Editing the Scene Config JSON While our Viewer Editor is the recommended way to create and manage the Scene Config JSON, you can also edit the JSON directly using any text editor. For a better editing experience with features like syntax highlighting and autocompletion (intellisense), we provide a JSON schema. From 241ebd22238299db6b12092556a0037472fc631a Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Sat, 20 Sep 2025 20:06:17 +0300 Subject: [PATCH 03/10] label rotation parameter introduced for linear dimension --- packages/dev/occt/lib/api/inputs/occ-inputs.ts | 11 ++++++++++- .../dev/occt/lib/services/base/dimensions.service.ts | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/dev/occt/lib/api/inputs/occ-inputs.ts b/packages/dev/occt/lib/api/inputs/occ-inputs.ts index 5f311afd..e2090e2d 100644 --- a/packages/dev/occt/lib/api/inputs/occ-inputs.ts +++ b/packages/dev/occt/lib/api/inputs/occ-inputs.ts @@ -6445,7 +6445,7 @@ export namespace OCCT { direction: Base.Vector3 = [0, 1, 0]; } export class SimpleLinearLengthDimensionDto { - constructor(start?: Base.Point3, end?: Base.Point3, direction?: Base.Vector3, offsetFromPoints?: number, crossingSize?: number, labelSuffix?: string, labelSize?: number, labelOffset?: number) { + constructor(start?: Base.Point3, end?: Base.Point3, direction?: Base.Vector3, offsetFromPoints?: number, crossingSize?: number, labelSuffix?: string, labelSize?: number, labelOffset?: number, labelRotation?: number) { if (start !== undefined) { this.start = start; } if (end !== undefined) { this.end = end; } if (direction !== undefined) { this.direction = direction; } @@ -6454,6 +6454,7 @@ export namespace OCCT { if (labelSuffix !== undefined) { this.labelSuffix = labelSuffix; } if (labelSize !== undefined) { this.labelSize = labelSize; } if (labelOffset !== undefined) { this.labelOffset = labelOffset; } + if (labelRotation !== undefined) { this.labelRotation = labelRotation; } } /** * The start point for dimension @@ -6515,6 +6516,14 @@ export namespace OCCT { * @step 0.1 */ labelOffset? = 0.3; + /** + * The dimension label rotation + * @default 0 + * @minimum -360 + * @maximum 360 + * @step 1 + */ + labelRotation? = 0; } export class SimpleAngularDimensionDto { constructor(direction1?: Base.Point3, direction2?: Base.Point3, center?: Base.Point3, radius?: number, offsetFromCenter?: number, crossingSize?: number, radians?: boolean, labelSuffix?: string, labelSize?: number, labelOffset?: number) { diff --git a/packages/dev/occt/lib/services/base/dimensions.service.ts b/packages/dev/occt/lib/services/base/dimensions.service.ts index e03b71de..d9470388 100644 --- a/packages/dev/occt/lib/services/base/dimensions.service.ts +++ b/packages/dev/occt/lib/services/base/dimensions.service.ts @@ -89,7 +89,7 @@ export class DimensionsService { const rotated = this.transformsService.rotate({ shape: txt.compound, - angle: -90, + angle: -90 + (inputs.labelRotation || 0), axis: [0, 1, 0], }); From 493080f26bd749fa472bb8cf52b0dcf31148cbea Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Sun, 21 Sep 2025 15:41:19 +0300 Subject: [PATCH 04/10] few new learning tutorials with examples on operations --- .../occt/operations/offset-operations.md | 205 ++++++++++++++++++ .../common/occt/operations/thick-solids.md | 115 ++++++++++ 2 files changed, 320 insertions(+) create mode 100644 docs/learn/code/common/occt/operations/offset-operations.md create mode 100644 docs/learn/code/common/occt/operations/thick-solids.md diff --git a/docs/learn/code/common/occt/operations/offset-operations.md b/docs/learn/code/common/occt/operations/offset-operations.md new file mode 100644 index 00000000..3bb90de3 --- /dev/null +++ b/docs/learn/code/common/occt/operations/offset-operations.md @@ -0,0 +1,205 @@ +--- +sidebar_position: 2 +title: Offset Operations +sidebar_label: Offset Operations +description: Learn how to create offset shapes using various offset operations in OCCT - from simple wire and face offsets to advanced thick solids. +tags: [code, occt, rete, blockly, typescript] +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import BitByBitRenderCanvas from '@site/src/components/BitByBitRenderCanvas'; + +OCCT category icon with a stylized logo representation + +## Understanding Offset Operations + +Offset operations are essential tools in 3D modeling that allow you to create new shapes by expanding or contracting existing ones by a specified distance. Think of it like inflating or deflating a balloon - the shape maintains its general form but becomes larger or smaller. These operations are particularly useful for creating wall thicknesses, generating borders, or preparing shapes for manufacturing processes where material thickness is crucial. + +In OCCT (OpenCascade Technology), there are several types of offset operations, each suited for different scenarios: + +* **Basic Offset**: Simple expansion or contraction of wires, edges, and faces +* **Advanced Offset**: Provides additional control over corner treatments and edge handling +* **3D Wire Offset**: Creates offset paths in 3D space along a specified direction +* **Thick Solid Creation**: Transforms shells and faces into volumetric solids with specified wall thickness + +Understanding these operations will give you powerful tools for creating complex geometries from simple profiles. + +## Basic Wire Offset + +The most common offset operation involves creating an offset version of a 2D wire (a closed or open curve). This operation moves all points of the wire outward (positive offset) or inward (negative offset) by the specified distance, maintaining the original shape's topology. + +Key parameters for wire offset include: + +* **Shape**: The wire or edge to be offset +* **Distance**: How far to offset (positive = outward, negative = inward) +* **Tolerance**: Precision for the offset calculation +* **Face** (optional): A reference face to define the offset plane + + + + + + + hexagonoffsetDistanceoffsetShapehexagon00001046offsetDistance1.2offsetShapehexagonoffsetDistance0.1hexagon#00ff004offsetShape#ff00004","version":"0.20.6","type":"blockly"}} + title="Basic Wire Offset Operation" + /> + + + {\n\n // Define the offset distance - positive values expand the shape, negative values contract it\n const offsetDistance = 1.2;\n\n // Create a new NGonWireDto instance to configure a hexagonal wire\n const hexagonOpt = new Bit.Inputs.OCCT.NGonWireDto();\n // Set the center point of the polygon\n hexagonOpt.center = [0, 0, 0];\n // Set the direction vector (normal to the plane of the polygon)\n hexagonOpt.direction = [0, 1, 0];\n // Set the radius from center to vertices\n hexagonOpt.radius = 4;\n // Set the number of corners (6 for hexagon)\n hexagonOpt.nrCorners = 6;\n \n // Create the hexagonal wire\n const hexagon = await wire.createNGonWire(hexagonOpt);\n\n // Create a new OffsetDto instance to configure the offset operation\n const offsetOpt = new OffsetDto();\n // Set the shape to be offset\n offsetOpt.shape = hexagon;\n // Set the offset distance (positive = outward, negative = inward)\n offsetOpt.distance = offsetDistance;\n // Set the tolerance for the offset calculation\n offsetOpt.tolerance = 0.1;\n \n // Perform the offset operation\n const offsetShape = await operations.offset(offsetOpt);\n\n // Draw both the original and offset shapes with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: hexagon, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offsetShape, options: offsetOptions });\n\n}\n\n// Call the 'start' function to execute the script\nstart();","version":"0.20.6","type":"typescript"}} + title="Basic Wire Offset Operation" + /> + + + +## Advanced Offset with Join Types + +The advanced offset operation provides additional control over how corners and edges are handled during the offset process. This is particularly important when dealing with complex shapes where the default offset behavior might not produce the desired results. + +Advanced offset parameters include: + +* **Join Type**: Controls how corners are treated (arc, intersection, or tangent) +* **Remove Internal Edges**: Option to clean up internal edges in the result +* **All basic offset parameters**: Shape, distance, tolerance, and optional face + +The join types available are: +- **Arc**: Creates rounded corners (default) +- **Intersection**: Creates sharp corners by extending edges until they intersect +- **Tangent**: Creates beveled corners with tangent transitions + + + + + + + starWireoffsetDistanceoffsetShapestarWire000010531.50FALSEoffsetDistance0.8offsetShapestarWireoffsetDistance0.1intersectionFALSEstarWire#00ff004offsetShape#ff00004","version":"0.20.6","type":"blockly"}} + title="Advanced Offset with Join Type Control" + /> + + + {\n\n // Define the offset distance\n const offsetDistance = 0.8;\n\n // Create a star-shaped wire for demonstration\n const starOpt = new StarDto();\n starOpt.center = [0, 0, 0];\n starOpt.direction = [0, 1, 0];\n starOpt.numRays = 5;\n starOpt.outerRadius = 3;\n starOpt.innerRadius = 1.5;\n \n const starWire = await wire.createStarWire(starOpt);\n\n // Create an advanced offset with specific join type\n const offsetAdvOpt = new OffsetAdvancedDto();\n offsetAdvOpt.shape = starWire;\n offsetAdvOpt.distance = offsetDistance;\n offsetAdvOpt.tolerance = 0.1;\n // Set join type to 'intersection' for sharp corners\n // Other options: 'arc' (rounded), 'tangent' (beveled)\n offsetAdvOpt.joinType = Bit.Inputs.OCCT.joinTypeEnum.intersection;\n offsetAdvOpt.removeIntEdges = false;\n \n const offsetShape = await operations.offsetAdv(offsetAdvOpt);\n\n // Draw both shapes with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: starWire, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offsetShape, options: offsetOptions });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + title="Advanced Offset with Join Type Control" + /> + + + +## Creating Thick Solids + +One of the most practical applications of offset operations is creating thick solids from shells or faces. This operation is commonly used in manufacturing and architectural modeling where you need to give thickness to what would otherwise be infinitely thin surfaces. + +The thick solid operation takes a shell (collection of connected faces) or a face and creates a volumetric solid by offsetting the surface inward or outward by a specified distance. This is particularly useful for: + +- Creating wall thicknesses in architectural models +- Adding material thickness to sheet metal parts +- Converting surface models to solid models for 3D printing + + + + + + + circleWirecircularFacethicknessthickSolidcircleWire0000103circularFacecircleWireTRUEthickness0.5thickSolidcircularFacethicknesstranslatedSolidthickSolid010circularFace#00ff004translatedSolid#ff00004","version":"0.20.6","type":"blockly"}} + title="Creating Thick Solid from Face" + /> + + + {\n\n // Define the thickness for the solid\n const thickness = 0.5;\n\n // Step 1: Create a circular wire\n const circleOpt = new CircleDto();\n circleOpt.center = [0, 0, 0];\n circleOpt.direction = [0, 1, 0];\n circleOpt.radius = 3;\n \n const circleWire = await wire.createCircleWire(circleOpt);\n\n // Step 2: Convert the wire to a face\n const faceOpt = new FaceFromWireDto();\n faceOpt.shape = circleWire;\n faceOpt.planar = true;\n \n const circularFace = await face.createFaceFromWire(faceOpt);\n\n // Step 3: Create a thick solid from the face\n const thickSolidOpt = new ThisckSolidSimpleDto();\n thickSolidOpt.shape = circularFace;\n // Positive offset creates thickness in the direction of the face normal\n thickSolidOpt.offset = thickness;\n \n const thickSolid = await operations.makeThickSolidSimple(thickSolidOpt);\n\n // Step 4: Translate the thick solid upwards to make the original face visible\n const translationOpt = new TranslateDto();\n translationOpt.shape = thickSolid;\n translationOpt.translation = [0, 1, 0]; // Move up by 1 unit\n \n const translatedSolid = await transforms.translate(translationOpt);\n\n // Draw both the original face and resulting thick solid with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const thickSolidOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n thickSolidOptions.edgeWidth = 4;\n thickSolidOptions.edgeColour = \"#ff0000\"; // Red for thick solid\n \n bitbybit.draw.drawAnyAsync({ entity: circularFace, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: translatedSolid, options: thickSolidOptions });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + title="Creating Thick Solid from Face" + /> + + + +## 3D Wire Offset + +The 3D wire offset operation is useful when you need to create an offset path in three-dimensional space along a specific direction. This operation is particularly valuable for creating toolpaths, creating parallel curves in 3D space, or generating support structures. + +This operation works by: +1. Extruding the input wire in the specified direction +2. Creating a thick solid from the extrusion +3. Extracting the offset edges from specific faces of the thick solid +4. Combining these edges back into a wire or returning them as individual edges + + + + + + + curvedWireoffsetDistanceextrusionDirectionoffset3DWirecurvedWire0002124-11623FALSEoffsetDistance0.5extrusionDirection010offset3DWirecurvedWireextrusionDirectionoffsetDistancecurvedWire#00ff004offset3DWire#ff00004","version":"0.20.6","type":"blockly"}} + title="3D Wire Offset Operation" + /> + + + {\n\n // Define parameters for the 3D offset\n const offsetDistance = 0.5;\n const extrusionDirection = [0, 1, 0]; // Y-axis direction\n\n // Step 1: Create a curved 3D wire using B-spline\n const curveOpt = new BSplineDto();\n // Define control points for a truly 3D curve with varying Y coordinates\n curveOpt.points = [\n [0, 0, 0], // Start point\n [2, 1, 2], // First control point (elevated in Y)\n [4, -1, 1], // Second control point (lowered in Y)\n [6, 2, 3] // End point (elevated in Y and Z)\n ];\n curveOpt.closed = false;\n \n const curvedWire = await wire.createBSpline(curveOpt);\n\n // Step 2: Create 3D offset of the wire\n const offset3DOpt = new Offset3DWireDto();\n offset3DOpt.shape = curvedWire;\n // Direction for the temporary extrusion used in the offset calculation\n offset3DOpt.direction = extrusionDirection as Bit.Inputs.Base.Point3;\n // Distance to offset the wire\n offset3DOpt.offset = offsetDistance;\n \n const offset3DWire = await operations.offset3DWire(offset3DOpt);\n\n // Draw both the original and offset wires with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: curvedWire, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offset3DWire, options: offsetOptions });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + title="3D Wire Offset Operation" + /> + + + +## Practical Applications and Tips + +Offset operations are incredibly versatile and have numerous practical applications: + +### Manufacturing and Design +- **Wall Thickness**: Creating walls with specific thickness for 3D printing or manufacturing +- **Clearance Gaps**: Adding clearance around parts for assembly +- **Tool Paths**: Generating machining paths at specific distances from part edges + +### Architecture and Construction +- **Building Walls**: Converting floor plan outlines into walls with thickness +- **Insulation Layers**: Adding insulation thickness to building components +- **Structural Elements**: Creating beams and columns with proper cross-sections + +### Important Considerations + +When working with offset operations, keep these points in mind: + +1. **Tolerance Settings**: Use appropriate tolerance values based on your model scale and precision requirements +2. **Join Types**: Choose the right join type for your application - arc for smooth corners, intersection for sharp edges +3. **Self-Intersections**: Complex shapes may create self-intersections when offset; consider using smaller offset distances or simplifying the geometry +4. **Performance**: Large offset distances on complex geometries can be computationally expensive +5. **Direction Matters**: For thick solids, positive offsets typically go in the direction of the surface normal + +### Best Practices + +- Start with simple shapes to understand the behavior before applying to complex geometries +- Use visualization to verify results, especially with complex corner treatments +- Consider the manufacturing constraints when setting offset distances +- Test different join types to achieve the desired aesthetic and functional results + +With these offset operations, you now have powerful tools for creating sophisticated 3D models with proper thickness and spacing considerations. These operations form the foundation for many advanced modeling workflows in mechanical design, architecture, and manufacturing. diff --git a/docs/learn/code/common/occt/operations/thick-solids.md b/docs/learn/code/common/occt/operations/thick-solids.md new file mode 100644 index 00000000..dcfa5466 --- /dev/null +++ b/docs/learn/code/common/occt/operations/thick-solids.md @@ -0,0 +1,115 @@ +--- +sidebar_position: 3 +title: Thick Solids from Complex Faces +sidebar_label: Thick Solids +description: Learn how to create thick solids from complex lofted surfaces using OCCT operations - from curved wire interpolation to volumetric solid creation. +tags: [code, occt, rete, blockly, typescript] +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import BitByBitRenderCanvas from '@site/src/components/BitByBitRenderCanvas'; + +OCCT category icon with a stylized logo representation + +# Thick Solids from Complex Faces + +Thick solids are powerful 3D modeling features that create volumetric objects by adding thickness to planar or curved faces. While simple circular or rectangular faces are common starting points, thick solids truly shine when working with complex, curved surfaces created through advanced operations like lofting. + +## Understanding Thick Solids + +A thick solid operation takes a face (planar or curved) and extrudes it in the direction of its surface normal(s) to create a solid with the specified thickness. This operation is particularly useful for: + +- **Shell structures**: Creating hollow objects with consistent wall thickness +- **Architectural elements**: Building walls, roofs, and structural components +- **Mechanical parts**: Designing brackets, housings, and enclosures +- **Organic shapes**: Creating complex curved objects with controlled thickness + +## Complex Face Creation Through Lofting + +To demonstrate the versatility of thick solids, we'll create a complex curved face using the **loft operation**. Lofting creates a smooth surface between multiple cross-sectional curves, allowing us to build sophisticated organic shapes. + +### The Process + +1. **Create Multiple Curved Cross-Sections**: Use interpolation algorithms to create smooth curves through defined points +2. **Loft Between Curves**: Generate a complex surface that smoothly transitions between the cross-sections +3. **Apply Thick Solid**: Add uniform thickness to create a 3D solid + +### Convex vs Concave Considerations + +Thick solid operations work on both: +- **Convex faces**: Outward-curving surfaces (like the outside of a sphere) +- **Concave faces**: Inward-curving surfaces (like the inside of a bowl) + +The algorithm automatically determines the correct direction for thickness application based on the face normals. + +## Practical Applications + +This technique is invaluable for: +- **Product Design**: Creating ergonomic handles, grips, and curved components +- **Architecture**: Designing complex roof structures and curved walls +- **Art and Sculpture**: Building organic, flowing forms +- **Engineering**: Developing aerodynamic shapes and fluid-flow components + +## Interactive Examples + +The following examples demonstrate creating thick solids from complex lofted surfaces, showing how sophisticated 3D geometry can emerge from simple point-based definitions. + + + + + + + bottomPointsmiddlePointstopPointsbottomWiremiddleWiretopWirewireListloftSurfacethickSolidtranslatedSolidthicknessoffsetVectorsurfaceOptionssolidOptionsbottomPoints-30-2-10000110030-2middlePoints-22-1-0.521.50220.521.522-1topPoints-1.540-0.540.50410.540.51.540bottomWirebottomPointsFALSE0.1middleWiremiddlePointsFALSE0.1topWiretopPointsFALSE0.1wireListbottomWiremiddleWiretopWireloftSurfacewireListFALSEthickness0.1thickSolidloftSurfacethicknessoffsetVector003translatedSolidthickSolidoffsetVectorsurfaceOptions0.01TRUE#00ff00TRUE#ffffff2solidOptions0.01TRUE#ff6600TRUE#ffffff2loftSurfacesurfaceOptionstranslatedSolidsolidOptions","version":"0.20.6","type":"blockly"}} + title="Thick Solid from Lofted Surface (Blockly)" + /> + + + {\n\n // Define points for bottom curve (wave-like pattern)\n const bottomPoints = [\n [-3, 0, -2],\n [-1, 0, 0],\n [0, 0, 1],\n [1, 0, 0],\n [3, 0, -2]\n ] as Point3[];\n\n // Define points for middle curve (elevated and more curved)\n const middlePoints = [\n [-2, 2, -1],\n [-0.5, 2, 1.5],\n [0, 2, 2],\n [0.5, 2, 1.5],\n [2, 2, -1]\n ] as Point3[];\n\n // Define points for top curve (simpler, less curved)\n const topPoints = [\n [-1.5, 4, 0],\n [-0.5, 4, 0.5],\n [0, 4, 1],\n [0.5, 4, 0.5],\n [1.5, 4, 0]\n ] as Point3[];\n\n // Create interpolated wires from points\n const bottomWireOpt = new InterpolationDto();\n bottomWireOpt.points = bottomPoints;\n bottomWireOpt.periodic = false;\n bottomWireOpt.tolerance = 0.1;\n const bottomWire = await wire.interpolatePoints(bottomWireOpt);\n\n const middleWireOpt = new InterpolationDto();\n middleWireOpt.points = middlePoints;\n middleWireOpt.periodic = false;\n middleWireOpt.tolerance = 0.1;\n const middleWire = await wire.interpolatePoints(middleWireOpt);\n\n const topWireOpt = new InterpolationDto();\n topWireOpt.points = topPoints;\n topWireOpt.periodic = false;\n topWireOpt.tolerance = 0.1;\n const topWire = await wire.interpolatePoints(topWireOpt);\n\n // Create lofted surface from the three wires\n const loftOpt = new LoftDto();\n loftOpt.shapes = [bottomWire, middleWire, topWire];\n loftOpt.makeSolid = false;\n const loftSurface = await operations.loft(loftOpt);\n\n // Create thick solid from the lofted surface\n const thickness = 0.1;\n const thickSolidOpt = new ThisckSolidSimpleDto();\n thickSolidOpt.shape = loftSurface;\n thickSolidOpt.offset = thickness;\n const thickSolid = await operations.makeThickSolidSimple(thickSolidOpt);\n\n // Translate the thick solid for better visualization\n const offsetVector = [0, 0, 3] as Vector3;\n const translateOpt = new TranslateDto();\n translateOpt.shape = thickSolid;\n translateOpt.translation = offsetVector;\n const translatedSolid = await transforms.translate(translateOpt);\n\n // Create drawing options for the original surface (green)\n const surfaceOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n surfaceOptions.precision = 0.01;\n surfaceOptions.drawFaces = true;\n surfaceOptions.faceColour = \"#00ff00\";\n surfaceOptions.drawEdges = true;\n surfaceOptions.edgeColour = \"#ffffff\";\n surfaceOptions.edgeWidth = 2;\n\n // Create drawing options for the thick solid (orange)\n const solidOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n solidOptions.precision = 0.01;\n solidOptions.drawFaces = true;\n solidOptions.faceColour = \"#ff6600\";\n solidOptions.drawEdges = true;\n solidOptions.edgeColour = \"#ffffff\";\n solidOptions.edgeWidth = 2;\n\n // Draw both the original lofted surface and the thick solid\n bitbybit.draw.drawAnyAsync({ entity: loftSurface, options: surfaceOptions });\n bitbybit.draw.drawAnyAsync({ entity: translatedSolid, options: solidOptions });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + title="Thick Solid from Lofted Surface" + /> + + + +## Key Learning Points + +### Design Considerations + +When working with thick solids from complex faces: + +1. **Surface Continuity**: Ensure your lofted surface has smooth transitions to avoid artifacts in the thick solid +2. **Thickness Distribution**: The algorithm maintains consistent thickness perpendicular to the surface +3. **Self-Intersections**: Complex shapes may create self-intersecting geometry; consider your design carefully +4. **Normal Direction**: The thickness direction is determined automatically by face normals + +### Advanced Techniques + +- **Multi-Surface Lofting**: Create even more complex shapes by lofting between numerous cross-sections +- **Hybrid Operations**: Combine with other OCCT operations like fillets, chamfers, or boolean operations + +### Performance Tips + +- **Point Density**: Balance curve smoothness with computational efficiency +- **Surface Complexity**: More complex lofted surfaces require more processing time +- **Memory Usage**: Large thick solids can consume significant memory resources + +## Summary + +Thick solids from complex lofted faces represent one of the most powerful techniques in 3D modeling. By combining: +- **Interpolated curves** for smooth cross-sections +- **Loft operations** for complex surface generation +- **Thick solid operations** for volumetric creation + +You can create sophisticated 3D geometry that would be difficult or impossible to achieve through simple primitive operations. This approach bridges the gap between mathematical precision and organic design freedom. From c807c036ca15a2740bd93722e9ae6ef6a11305d6 Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Wed, 24 Sep 2025 10:41:51 +0300 Subject: [PATCH 05/10] fixed rete script node positions in documention --- .../occt/operations/offset-operations.md | 8 +-- .../common/occt/operations/thick-solids.md | 2 +- .../occt/operations/wire-offset-multiple.md | 62 +++++++++++++++++++ 3 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 docs/learn/code/common/occt/operations/wire-offset-multiple.md diff --git a/docs/learn/code/common/occt/operations/offset-operations.md b/docs/learn/code/common/occt/operations/offset-operations.md index 3bb90de3..f2ae6684 100644 --- a/docs/learn/code/common/occt/operations/offset-operations.md +++ b/docs/learn/code/common/occt/operations/offset-operations.md @@ -44,7 +44,7 @@ Key parameters for wire offset include: @@ -83,7 +83,7 @@ The join types available are: @@ -117,7 +117,7 @@ The thick solid operation takes a shell (collection of connected faces) or a fac @@ -151,7 +151,7 @@ This operation works by: diff --git a/docs/learn/code/common/occt/operations/thick-solids.md b/docs/learn/code/common/occt/operations/thick-solids.md index dcfa5466..00cbb321 100644 --- a/docs/learn/code/common/occt/operations/thick-solids.md +++ b/docs/learn/code/common/occt/operations/thick-solids.md @@ -63,7 +63,7 @@ The following examples demonstrate creating thick solids from complex lofted sur diff --git a/docs/learn/code/common/occt/operations/wire-offset-multiple.md b/docs/learn/code/common/occt/operations/wire-offset-multiple.md new file mode 100644 index 00000000..3aa69de6 --- /dev/null +++ b/docs/learn/code/common/occt/operations/wire-offset-multiple.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 4 +title: Multiple Wire Offsets +sidebar_label: Wire Offset Multiple +description: Learn how to create multiple parallel offsets from a single open wire using OCCT operations for various design and manufacturing applications. +tags: [code, occt, rete, blockly, typescript] +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import BitByBitRenderCanvas from '@site/src/components/BitByBitRenderCanvas'; + +OCCT category icon with a stylized logo representation + +# Multiple Wire Offsets + +Multiple wire offsetting creates a series of parallel curves at specified distances from an original open wire. This technique generates multiple paths that maintain the same general shape as the original while being displaced perpendicular to the wire direction. The operation is useful for various applications including toolpath generation, pattern creation, and design iterations where you need parallel geometric elements. + +The process involves creating an initial open wire through point interpolation, then systematically generating offset curves at incrementally increasing distances. Each offset curve preserves the original wire's character while providing controlled spacing for your specific application needs. + +## Interactive Example + +The following example demonstrates creating multiple offset curves from a single interpolated wire, showing how a simple reference path can generate a family of parallel curves. + + + + + + + + +controlPointsbaseWirestepoverDistanceoffset1offset2offset3baseStyleoffset1Styleoffset2Styleoffset3StylecontrolPoints-40-2-202001203400stepoverDistance0.5baseWirecontrolPointsFALSE0.01offset1baseWirestepoverDistance0.01offset2baseWireMULTIPLYstepoverDistance20.01offset3baseWireMULTIPLYstepoverDistance30.01baseStyle0.01FALSETRUE#00ff004offset1Style0.01FALSETRUE#ff99003offset2Style0.01FALSETRUE#ff66003offset3Style0.01FALSETRUE#ff33003baseWirebaseStyleoffset1offset1Styleoffset2offset2Styleoffset3offset3Style","version":"0.20.6","type":"blockly"}} + title="Multiple Wire Offsets" + /> + + + + {\n\n // Define the stepover distance for CNC toolpaths\n const stepoverDistance = 0.5;\n\n // Step 1: Define control points for the base toolpath\n const points = [\n [-4, 0, -2],\n [-2, 0, 2],\n [0, 0, 1],\n [2, 0, 3],\n [4, 0, 0]\n ] as Point3[];\n\n // Step 2: Create base wire through interpolation\n const interpolationOpt = new InterpolationDto();\n interpolationOpt.points = points;\n interpolationOpt.periodic = false;\n interpolationOpt.tolerance = 0.01;\n \n const baseWire = await wire.interpolatePoints(interpolationOpt);\n\n // Step 3: Create multiple offset toolpaths\n // First offset\n const offset1Opt = new OffsetDto();\n offset1Opt.shape = baseWire;\n offset1Opt.distance = stepoverDistance;\n offset1Opt.tolerance = 0.01;\n \n const offset1 = await operations.offset(offset1Opt);\n\n // Second offset\n const offset2Opt = new OffsetDto();\n offset2Opt.shape = baseWire;\n offset2Opt.distance = stepoverDistance * 2;\n offset2Opt.tolerance = 0.01;\n \n const offset2 = await operations.offset(offset2Opt);\n\n // Third offset\n const offset3Opt = new OffsetDto();\n offset3Opt.shape = baseWire;\n offset3Opt.distance = stepoverDistance * 3;\n offset3Opt.tolerance = 0.01;\n \n const offset3 = await operations.offset(offset3Opt);\n\n // Step 4: Visualize all toolpaths with different colors\n // Base wire (green - reference path)\n const baseOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n baseOptions.edgeWidth = 4;\n baseOptions.edgeColour = \"#00ff00\"; // Green\n baseOptions.drawFaces = false;\n \n // Offset 1 (orange)\n const offset1Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset1Options.edgeWidth = 3;\n offset1Options.edgeColour = \"#ff9900\"; // Orange\n offset1Options.drawFaces = false;\n \n // Offset 2 (red-orange)\n const offset2Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset2Options.edgeWidth = 3;\n offset2Options.edgeColour = \"#ff6600\"; // Red-orange\n offset2Options.drawFaces = false;\n \n // Offset 3 (red)\n const offset3Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset3Options.edgeWidth = 3;\n offset3Options.edgeColour = \"#ff3300\"; // Red\n offset3Options.drawFaces = false;\n \n // Draw all toolpaths\n bitbybit.draw.drawAnyAsync({ entity: baseWire, options: baseOptions });\n bitbybit.draw.drawAnyAsync({ entity: offset1, options: offset1Options });\n bitbybit.draw.drawAnyAsync({ entity: offset2, options: offset2Options });\n bitbybit.draw.drawAnyAsync({ entity: offset3, options: offset3Options });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + title="Multiple Wire Offsets" + /> + + + +## Understanding the Workflow + +The multiple wire offset workflow demonstrates a practical approach to generating parallel curves. You start by defining control points that establish the desired path geometry, then create a smooth interpolated wire that serves as your reference curve. Each offset operation takes this base wire and creates a new curve at a specified distance, with the distance typically calculated as multiples of a base offset value. + +The stepover distance parameter controls the spacing between parallel curves and can be adjusted based on your specific requirements. In the example, we use multiples of 0.5 units to create three additional curves, each progressively further from the original. The visualization uses different colors to clearly distinguish between the base curve and its offsets, making it easy to understand the relationship between all generated elements. + +This technique provides a foundation for various applications where parallel geometric elements are needed, from manufacturing processes to architectural design patterns. The consistent spacing and predictable geometric relationships make it particularly valuable for systematic design approaches where precision and repeatability are important. From 4b28b2b04dacc178c22494d34b1e7fd18e517219 Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Sat, 27 Sep 2025 13:32:03 +0300 Subject: [PATCH 06/10] added gradients and background image --- .../lib/api/bitbybit/babylon/scene.ts | 166 ++++++++++++++- .../babylonjs/lib/api/inputs/base-inputs.ts | 60 ++++++ .../babylonjs/lib/api/inputs/scene-inputs.ts | 200 ++++++++++++++++++ 3 files changed, 415 insertions(+), 11 deletions(-) diff --git a/packages/dev/babylonjs/lib/api/bitbybit/babylon/scene.ts b/packages/dev/babylonjs/lib/api/bitbybit/babylon/scene.ts index a9b72d60..0ebd4ef6 100644 --- a/packages/dev/babylonjs/lib/api/bitbybit/babylon/scene.ts +++ b/packages/dev/babylonjs/lib/api/bitbybit/babylon/scene.ts @@ -1,4 +1,3 @@ - import { Context } from "../../context"; import * as BABYLON from "@babylonjs/core"; import * as GUI from "@babylonjs/gui"; @@ -32,16 +31,6 @@ export class BabylonScene { return this.context.scene = inputs.scene; } - /** - * Changes the scene background colour for 3D space - * @param inputs Describes the colour of the scene background - * @group environment - * @shortname colour - */ - backgroundColour(inputs: Inputs.BabylonScene.SceneBackgroundColourDto): void { - this.context.scene.clearColor = BABYLON.Color4.FromColor3(BABYLON.Color3.FromHexString(inputs.colour)); - } - /** * Activate camera by overwriting currently active camera * @param inputs Activates the camera @@ -447,6 +436,161 @@ export class BabylonScene { this.context.scene.enablePhysics(new BABYLON.Vector3(inputs.vector[0], inputs.vector[1], inputs.vector[2]), this.context.havokPlugin); } + /** + * Changes the scene background to a css background image for 3D space + * @param inputs Describes the css of the scene background or image + * @group background + * @shortname css background image + */ + canvasCSSBackgroundImage(inputs: Inputs.BabylonScene.SceneCanvasCSSBackgroundImageDto): { backgroundImage: string } { + this.context.scene.clearColor = new BABYLON.Color4(0, 0, 0, 0); + const canvas = this.context.scene.getEngine().getRenderingCanvas(); + const styleObject = { backgroundImage: inputs.cssBackgroundImage }; + if (canvas) { + canvas.style.backgroundImage = inputs.cssBackgroundImage; + } + return styleObject; + } + + /** + * Creates a two-color linear gradient background for 3D space + * @param inputs Describes the two-color linear gradient parameters + * @group background + * @shortname two color linear gradient + */ + twoColorLinearGradient(inputs: Inputs.BabylonScene.SceneTwoColorLinearGradientDto): { backgroundImage: string } { + this.context.scene.clearColor = new BABYLON.Color4(0, 0, 0, 0); + const canvas = this.context.scene.getEngine().getRenderingCanvas(); + const gradient = `linear-gradient(${inputs.direction}, ${inputs.colorFrom} ${inputs.stopFrom}%, ${inputs.colorTo} ${inputs.stopTo}%)`; + const styleObject = { backgroundImage: gradient }; + if (canvas) { + canvas.style.backgroundImage = gradient; + } + return styleObject; + } + + /** + * Creates a two-color radial gradient background for 3D space + * @param inputs Describes the two-color radial gradient parameters + * @group background + * @shortname two color radial gradient + */ + twoColorRadialGradient(inputs: Inputs.BabylonScene.SceneTwoColorRadialGradientDto): { backgroundImage: string } { + this.context.scene.clearColor = new BABYLON.Color4(0, 0, 0, 0); + const canvas = this.context.scene.getEngine().getRenderingCanvas(); + const gradient = `radial-gradient(${inputs.shape} at ${inputs.position}, ${inputs.colorFrom} ${inputs.stopFrom}%, ${inputs.colorTo} ${inputs.stopTo}%)`; + const styleObject = { backgroundImage: gradient }; + if (canvas) { + canvas.style.backgroundImage = gradient; + } + return styleObject; + } + + /** + * Creates a multi-color linear gradient background for 3D space + * @param inputs Describes the multi-color linear gradient parameters + * @group background + * @shortname multi color linear gradient + */ + multiColorLinearGradient(inputs: Inputs.BabylonScene.SceneMultiColorLinearGradientDto): { backgroundImage: string } | { error: string } { + this.context.scene.clearColor = new BABYLON.Color4(0, 0, 0, 0); + const canvas = this.context.scene.getEngine().getRenderingCanvas(); + if (inputs.colors.length !== inputs.stops.length) { + const errorObj = { error: "Colors and stops arrays must have the same length" }; + console.warn(errorObj.error); + return errorObj; + } + const colorStops = inputs.colors.map((color, index) => `${color} ${inputs.stops[index]}%`).join(", "); + const gradient = `linear-gradient(${inputs.direction}, ${colorStops})`; + const styleObject = { backgroundImage: gradient }; + if (canvas) { + canvas.style.backgroundImage = gradient; + } + return styleObject; + } + + /** + * Creates a multi-color radial gradient background for 3D space + * @param inputs Describes the multi-color radial gradient parameters + * @group background + * @shortname multi color radial gradient + */ + multiColorRadialGradient(inputs: Inputs.BabylonScene.SceneMultiColorRadialGradientDto): { backgroundImage: string } | { error: string } { + this.context.scene.clearColor = new BABYLON.Color4(0, 0, 0, 0); + const canvas = this.context.scene.getEngine().getRenderingCanvas(); + if (inputs.colors.length !== inputs.stops.length) { + const errorObj = { error: "Colors and stops arrays must have the same length" }; + console.warn(errorObj.error); + return errorObj; + } + const colorStops = inputs.colors.map((color, index) => `${color} ${inputs.stops[index]}%`).join(", "); + const gradient = `radial-gradient(${inputs.shape} at ${inputs.position}, ${colorStops})`; + const styleObject = { backgroundImage: gradient }; + if (canvas) { + canvas.style.backgroundImage = gradient; + } + return styleObject; + } + + /** + * Sets a background image with various customization options for 3D space + * @param inputs Describes the background image parameters + * @group background + * @shortname background image + */ + canvasBackgroundImage(inputs: Inputs.BabylonScene.SceneCanvasBackgroundImageDto): { + backgroundImage: string; + backgroundRepeat: string; + backgroundSize: string; + backgroundPosition: string; + backgroundAttachment: string; + backgroundOrigin: string; + backgroundClip: string; + } { + this.context.scene.clearColor = new BABYLON.Color4(0, 0, 0, 0); + const canvas = this.context.scene.getEngine().getRenderingCanvas(); + const styleObject = { + backgroundImage: `url(${inputs.imageUrl})`, + backgroundRepeat: inputs.repeat, + backgroundSize: inputs.size, + backgroundPosition: inputs.position, + backgroundAttachment: inputs.attachment, + backgroundOrigin: inputs.origin, + backgroundClip: inputs.clip + }; + if (canvas) { + canvas.style.backgroundImage = styleObject.backgroundImage; + canvas.style.backgroundRepeat = styleObject.backgroundRepeat; + canvas.style.backgroundSize = styleObject.backgroundSize; + canvas.style.backgroundPosition = styleObject.backgroundPosition; + canvas.style.backgroundAttachment = styleObject.backgroundAttachment; + canvas.style.backgroundOrigin = styleObject.backgroundOrigin; + canvas.style.backgroundClip = styleObject.backgroundClip; + } + return styleObject; + } + + /** + * Changes the scene background colour for 3D space + * @param inputs Describes the colour of the scene background + * @group background + * @shortname colour + */ + backgroundColour(inputs: Inputs.BabylonScene.SceneBackgroundColourDto): void { + this.context.scene.clearColor = BABYLON.Color4.FromColor3(BABYLON.Color3.FromHexString(inputs.colour)); + const canvas = this.context.scene.getEngine().getRenderingCanvas(); + if (canvas) { + // Reset all background properties to ensure no conflicts with gradients/images + canvas.style.backgroundImage = "none"; + canvas.style.backgroundRepeat = "repeat"; + canvas.style.backgroundSize = "auto"; + canvas.style.backgroundPosition = "0% 0%"; + canvas.style.backgroundAttachment = "scroll"; + canvas.style.backgroundOrigin = "padding-box"; + canvas.style.backgroundClip = "border-box"; + } + } + private getRadians(degrees: number): number { let angle = BABYLON.Angle.FromDegrees(degrees).radians(); if (degrees < 0) { diff --git a/packages/dev/babylonjs/lib/api/inputs/base-inputs.ts b/packages/dev/babylonjs/lib/api/inputs/base-inputs.ts index dcce866f..786a2618 100644 --- a/packages/dev/babylonjs/lib/api/inputs/base-inputs.ts +++ b/packages/dev/babylonjs/lib/api/inputs/base-inputs.ts @@ -12,6 +12,66 @@ export namespace Base { exponentialSquared = "exponentialSquared", linear = "linear", } + export enum gradientDirectionEnum { + toTop = "to top", + toTopRight = "to top right", + toRight = "to right", + toBottomRight = "to bottom right", + toBottom = "to bottom", + toBottomLeft = "to bottom left", + toLeft = "to left", + toTopLeft = "to top left", + deg0 = "0deg", + deg45 = "45deg", + deg90 = "90deg", + deg135 = "135deg", + deg180 = "180deg", + deg225 = "225deg", + deg270 = "270deg", + deg315 = "315deg", + } + export enum gradientPositionEnum { + center = "center", + top = "top", + topLeft = "top left", + topRight = "top right", + bottom = "bottom", + bottomLeft = "bottom left", + bottomRight = "bottom right", + left = "left", + right = "right", + centerTop = "50% 0%", + centerBottom = "50% 100%", + leftCenter = "0% 50%", + rightCenter = "100% 50%", + } + export enum gradientShapeEnum { + circle = "circle", + ellipse = "ellipse", + } + export enum backgroundRepeatEnum { + repeat = "repeat", + repeatX = "repeat-x", + repeatY = "repeat-y", + noRepeat = "no-repeat", + space = "space", + round = "round", + } + export enum backgroundSizeEnum { + auto = "auto", + cover = "cover", + contain = "contain", + } + export enum backgroundAttachmentEnum { + scroll = "scroll", + fixed = "fixed", + local = "local", + } + export enum backgroundOriginClipEnum { + paddingBox = "padding-box", + borderBox = "border-box", + contentBox = "content-box", + } // Can't use BabylonJS types here as that crashes worker, which tries to include them export type Color = string; export type ColorRGB = { r: number, g: number, b: number }; diff --git a/packages/dev/babylonjs/lib/api/inputs/scene-inputs.ts b/packages/dev/babylonjs/lib/api/inputs/scene-inputs.ts index 0a65303e..46a57a63 100644 --- a/packages/dev/babylonjs/lib/api/inputs/scene-inputs.ts +++ b/packages/dev/babylonjs/lib/api/inputs/scene-inputs.ts @@ -542,4 +542,204 @@ export namespace BabylonScene { */ end: number; } + export class SceneCanvasCSSBackgroundImageDto { + /** + * Provide options without default values + */ + constructor(cssBackgroundImage?: string) { + if (cssBackgroundImage !== undefined) { this.cssBackgroundImage = cssBackgroundImage; } + } + /** + * CSS background image string + * @default linear-gradient(to top, #1a1c1f 0%, #93aacd 100%) + */ + cssBackgroundImage = "linear-gradient(to top, #1a1c1f 0%, #93aacd 100%)"; + } + + export class SceneTwoColorLinearGradientDto { + constructor(colorFrom?: Base.Color, colorTo?: Base.Color, direction?: Base.gradientDirectionEnum, stopFrom?: number, stopTo?: number) { + if (colorFrom !== undefined) { this.colorFrom = colorFrom; } + if (colorTo !== undefined) { this.colorTo = colorTo; } + if (direction !== undefined) { this.direction = direction; } + if (stopFrom !== undefined) { this.stopFrom = stopFrom; } + if (stopTo !== undefined) { this.stopTo = stopTo; } + } + /** + * Starting color in hex format + * @default #1a1c1f + */ + colorFrom: Base.Color = "#1a1c1f"; + /** + * Ending color in hex format + * @default #93aacd + */ + colorTo: Base.Color = "#93aacd"; + /** + * Gradient direction + * @default toBottom + */ + direction: Base.gradientDirectionEnum = Base.gradientDirectionEnum.toBottom; + /** + * Starting color stop percentage + * @default 0 + * @minimum 0 + * @maximum 100 + * @step 1 + */ + stopFrom = 0; + /** + * Ending color stop percentage + * @default 100 + * @minimum 0 + * @maximum 100 + * @step 1 + */ + stopTo = 100; + } + + export class SceneTwoColorRadialGradientDto { + constructor(colorFrom?: Base.Color, colorTo?: Base.Color, position?: Base.gradientPositionEnum, stopFrom?: number, stopTo?: number, shape?: Base.gradientShapeEnum) { + if (colorFrom !== undefined) { this.colorFrom = colorFrom; } + if (colorTo !== undefined) { this.colorTo = colorTo; } + if (position !== undefined) { this.position = position; } + if (stopFrom !== undefined) { this.stopFrom = stopFrom; } + if (stopTo !== undefined) { this.stopTo = stopTo; } + if (shape !== undefined) { this.shape = shape; } + } + /** + * Starting color in hex format + * @default #1a1c1f + */ + colorFrom: Base.Color = "#1a1c1f"; + /** + * Ending color in hex format + * @default #93aacd + */ + colorTo: Base.Color = "#93aacd"; + /** + * Gradient position + * @default center + */ + position: Base.gradientPositionEnum = Base.gradientPositionEnum.center; + /** + * Starting color stop percentage + * @default 0 + * @minimum 0 + * @maximum 100 + * @step 1 + */ + stopFrom = 0; + /** + * Ending color stop percentage + * @default 100 + * @minimum 0 + * @maximum 100 + * @step 1 + */ + stopTo = 100; + /** + * Gradient shape + * @default circle + */ + shape: Base.gradientShapeEnum = Base.gradientShapeEnum.circle; + } + + export class SceneMultiColorLinearGradientDto { + constructor(colors?: Base.Color[], stops?: number[], direction?: Base.gradientDirectionEnum) { + if (colors !== undefined) { this.colors = colors; } + if (stops !== undefined) { this.stops = stops; } + if (direction !== undefined) { this.direction = direction; } + } + /** + * Array of colors in hex format + * @default ["#1a1c1f", "#93aacd"] + */ + colors: Base.Color[] = ["#1a1c1f", "#93aacd"]; + /** + * Array of stop percentages for each color + * @default [0, 100] + */ + stops: number[] = [0, 100]; + /** + * Gradient direction + * @default toTop + */ + direction: Base.gradientDirectionEnum = Base.gradientDirectionEnum.toTop; + } + + export class SceneMultiColorRadialGradientDto { + constructor(colors?: Base.Color[], stops?: number[], position?: Base.gradientPositionEnum, shape?: Base.gradientShapeEnum) { + if (colors !== undefined) { this.colors = colors; } + if (stops !== undefined) { this.stops = stops; } + if (position !== undefined) { this.position = position; } + if (shape !== undefined) { this.shape = shape; } + } + /** + * Array of colors in hex format + * @default ["#1a1c1f", "#93aacd"] + */ + colors: Base.Color[] = ["#1a1c1f", "#93aacd"]; + /** + * Array of stop percentages for each color + * @default [0, 100] + */ + stops: number[] = [0, 100]; + /** + * Gradient position + * @default center + */ + position: Base.gradientPositionEnum = Base.gradientPositionEnum.center; + /** + * Gradient shape + * @default circle + */ + shape: Base.gradientShapeEnum = Base.gradientShapeEnum.circle; + } + + export class SceneCanvasBackgroundImageDto { + constructor(imageUrl?: string, repeat?: Base.backgroundRepeatEnum, size?: Base.backgroundSizeEnum, position?: Base.gradientPositionEnum, attachment?: Base.backgroundAttachmentEnum, origin?: Base.backgroundOriginClipEnum, clip?: Base.backgroundOriginClipEnum) { + if (imageUrl !== undefined) { this.imageUrl = imageUrl; } + if (repeat !== undefined) { this.repeat = repeat; } + if (size !== undefined) { this.size = size; } + if (position !== undefined) { this.position = position; } + if (attachment !== undefined) { this.attachment = attachment; } + if (origin !== undefined) { this.origin = origin; } + if (clip !== undefined) { this.clip = clip; } + } + /** + * URL of the background image + * @default undefined + */ + imageUrl?: string; + /** + * How the background image should repeat + * @default noRepeat + */ + repeat: Base.backgroundRepeatEnum = Base.backgroundRepeatEnum.noRepeat; + /** + * Size of the background image (enum values or specific values like '100px 50px') + * @default cover + */ + size: Base.backgroundSizeEnum = Base.backgroundSizeEnum.cover; + /** + * Position of the background image (enum values or specific values like '50% 50%') + * @default center + */ + position: Base.gradientPositionEnum = Base.gradientPositionEnum.center; + /** + * Background attachment + * @default scroll + */ + attachment: Base.backgroundAttachmentEnum = Base.backgroundAttachmentEnum.scroll; + /** + * Background origin + * @default paddingBox + */ + origin: Base.backgroundOriginClipEnum = Base.backgroundOriginClipEnum.paddingBox; + /** + * Background clip + * @default borderBox + */ + clip: Base.backgroundOriginClipEnum = Base.backgroundOriginClipEnum.borderBox; + } } From ebff6517aef50cbbbaa32c9e1c4fe458a23585b1 Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Sun, 28 Sep 2025 21:42:57 +0300 Subject: [PATCH 07/10] update entity properties --- packages/dev/babylonjs/lib/api/inputs/draw-inputs.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dev/babylonjs/lib/api/inputs/draw-inputs.ts b/packages/dev/babylonjs/lib/api/inputs/draw-inputs.ts index 1a27bfb5..4a488ba3 100644 --- a/packages/dev/babylonjs/lib/api/inputs/draw-inputs.ts +++ b/packages/dev/babylonjs/lib/api/inputs/draw-inputs.ts @@ -7,8 +7,8 @@ import { Base } from "./base-inputs"; export namespace Draw { export type DrawOptions = DrawBasicGeometryOptions | DrawManifoldOrCrossSectionOptions | DrawOcctShapeOptions | DrawOcctShapeSimpleOptions | DrawOcctShapeMaterialOptions | DrawNodeOptions; - export type Entity = Base.Point3 | Base.Vector3 | Base.Line3 | Base.Polyline3 | Base.VerbCurve | Base.VerbSurface | Inputs.OCCT.TopoDSShapePointer | Inputs.Tag.TagDto | { type: string, name: string } | - Base.Point3[] | Base.Vector3[] | Base.Line3[] | Base.Polyline3[] | Base.VerbCurve[] | Base.VerbSurface[] | Inputs.OCCT.TopoDSShapePointer[] | Inputs.Tag.TagDto[] | { type: string[], name: string }; + export type Entity = Base.Point3 | Base.Vector3 | Base.Line3 | Base.Polyline3 | Base.VerbCurve | Base.VerbSurface | Inputs.OCCT.TopoDSShapePointer | Inputs.Tag.TagDto | { type: string, name?: string, entityName?: string } | + Base.Point3[] | Base.Vector3[] | Base.Line3[] | Base.Polyline3[] | Base.VerbCurve[] | Base.VerbSurface[] | Inputs.OCCT.TopoDSShapePointer[] | Inputs.Tag.TagDto[] | { type: string[], name?: string, entityName?: string }; export class DrawAny { constructor(entity?: Entity, options?: DrawOptions, babylonMesh?: BABYLON.Mesh | BABYLON.LinesMesh) { From d9e1d0ef55c80b99f8885f377607203b52f631e1 Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Wed, 1 Oct 2025 11:03:48 +0300 Subject: [PATCH 08/10] translations updated --- languages/ar.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/bn.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/de.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/en.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/es.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/fr.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/hi.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/id.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/lt.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/pt.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/ru.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/uk.json | 87 +++++++++++++++++++++++++++++++++++++++++- languages/zh-hans.json | 87 +++++++++++++++++++++++++++++++++++++++++- 13 files changed, 1118 insertions(+), 13 deletions(-) diff --git a/languages/ar.json b/languages/ar.json index 47951bf3..d2211f79 100644 --- a/languages/ar.json +++ b/languages/ar.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "تبديل لوحة الرسم", "Local Assets": "الأصول المحلية", "Import": "استيراد", + "Copy to Clipboard": "نسخ إلى الحافظة", + "Paste from Clipboard": "لصق من الحافظة", "Export": "تصدير", "Export to runner": "تصدير إلى المشغّل", "Clean Cache": "تنظيف ذاكرة التخزين المؤقت", @@ -5406,5 +5408,88 @@ "textureSize": "حجم النسيج", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "تمكين نسيج مخصص لصندوق السماء", "enableSkyboxCustomTexture": "تمكين نسيج مخصص لصندوق السماء", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "تمكين صندوق السماء بنسيج مخصص" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "تمكين صندوق السماء بنسيج مخصص", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "صورة خلفية CSS للوحة", + "canvasCSSBackgroundImage": "صورة خلفية CSS للوحة", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "تغيير خلفية المشهد إلى صورة خلفية CSS للمساحة ثلاثية الأبعاد", + "cssBackgroundImage": "صورة خلفية CSS", + "bitbybit.babylon.scene.twoColorLinearGradient": "تدرج خطي بلونين", + "twoColorLinearGradient": "تدرج خطي بلونين", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "إنشاء خلفية تدرج خطي بلونين للمساحة ثلاثية الأبعاد", + "colorFrom": "لون من", + "colorTo": "لون إلى", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "توقف من", + "stopTo": "توقف إلى", + "bitbybit.babylon.scene.twoColorRadialGradient": "تدرج شعاعي بلونين", + "twoColorRadialGradient": "تدرج شعاعي بلونين", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "إنشاء خلفية تدرج شعاعي بلونين للمساحة ثلاثية الأبعاد", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "تدرج خطي متعدد الألوان", + "multiColorLinearGradient": "تدرج خطي متعدد الألوان", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "إنشاء خلفية تدرج خطي متعدد الألوان للمساحة ثلاثية الأبعاد", + "Base.Color[]": "Base.Color[]", + "stops": "نقاط التوقف", + "bitbybit.babylon.scene.multiColorRadialGradient": "تدرج شعاعي متعدد الألوان", + "multiColorRadialGradient": "تدرج شعاعي متعدد الألوان", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "إنشاء خلفية تدرج شعاعي متعدد الألوان للمساحة ثلاثية الأبعاد", + "bitbybit.babylon.scene.canvasBackgroundImage": "صورة خلفية اللوحة", + "canvasBackgroundImage": "صورة خلفية اللوحة", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "تعيين صورة خلفية مع خيارات تخصيص متنوعة للمساحة ثلاثية الأبعاد", + "imageUrl": "رابط الصورة", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "مرفق", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "قص", + "labelRotation": "دوران التسمية", + "bitbybit.advanced.dimensions.linearDimension": "البعد الخطي", + "linearDimension": "البعد الخطي", + "bitbybit.advanced.dimensions.linearDimension_description": "إنشاء البعد الخطي - خط قياس بين نقطتين مع خطوط التمديد وتسمية نصية. يُظهر البعد المسافة بين النقاط ويمكن تنسيقه باستخدام DimensionStyleDto.", + "linear dimension": "البعد الخطي", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "البعد الزاوي", + "angularDimension": "البعد الزاوي", + "bitbybit.advanced.dimensions.angularDimension_description": "إنشاء البعد الزاوي - قوس قياس بين متجهين اتجاهيين مع خطوط التمديد وتسمية نصية. يُظهر البعد الزاوية بين الاتجاهات ويمكن تنسيقه باستخدام DimensionStyleDto.", + "angular dimension": "البعد الزاوي", + "centerPoint": "النقطة المركزية", + "bitbybit.advanced.dimensions.dimensionStyle": "نمط البعد", + "dimensionStyle": "نمط البعد", + "bitbybit.advanced.dimensions.dimensionStyle_description": "إنشاء نمط البعد - يُستخدم لتنسيق خطوط الأبعاد والأسهم والنص في المساحة ثلاثية الأبعاد. يمكنك تخصيص ألوان الخطوط والسماكة وحجم النص وحجم السهم وألوان الخلفية.", + "dimension style": "نمط البعد", + "lineColor": "لون الخط", + "lineThickness": "سماكة الخط", + "extensionLineLength": "طول خط التمديد", + "textBackgroundColor": "لون خلفية النص", + "textBackgroundOpacity": "شفافية خلفية النص", + "arrowSize": "حجم السهم", + "arrowColor": "لون السهم", + "textRenderMode": "وضع عرض النص", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "لوحة النص", + "occlusionCheckInterval": "فترة فحص الانسداد", + "arrowTailLength": "طول ذيل السهم", + "showArrows": "إظهار الأسهم", + "labelOverwrite": "استبدال التسمية", + "bitbybit.advanced.dimensions.radialDimension": "البعد الشعاعي", + "radialDimension": "البعد الشعاعي", + "bitbybit.advanced.dimensions.radialDimension_description": "إنشاء البعد الشعاعي - خط قياس من المركز إلى المحيط يُظهر نصف القطر أو القطر. يُظهر بادئة 'R' لنصف القطر أو بادئة '⌀' للقطر مع علامة مركزية اختيارية.", + "radial dimension": "البعد الشعاعي", + "radiusPoint": "نقطة نصف القطر", + "showDiameter": "إظهار القطر", + "showCenterMark": "إظهار العلامة المركزية", + "bitbybit.advanced.dimensions.diametralDimension": "البعد القطري", + "diametralDimension": "البعد القطري", + "bitbybit.advanced.dimensions.diametralDimension_description": "إنشاء البعد القطري - خط قياس يمتد عبر القطر الكامل للمعالم الدائرية. يُظهر بادئة '⌀' مع علامة مركزية اختيارية وأسهم في كلا الطرفين.", + "diametral dimension": "البعد القطري", + "bitbybit.advanced.dimensions.ordinateDimension": "بعد الإحداثيات", + "ordinateDimension": "بعد الإحداثيات", + "bitbybit.advanced.dimensions.ordinateDimension_description": "إنشاء بعد الإحداثيات - يُظهر إحداثي X أو Y أو Z من نقطة مرجعية مع خط قائد. مفيد لتعليقات الإحداثيات ومراجع البيانات في الرسوم التقنية.", + "ordinate dimension": "بعد الإحداثيات", + "measurementPoint": "نقطة القياس", + "referencePoint": "النقطة المرجعية", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "إظهار الخط القائد" } \ No newline at end of file diff --git a/languages/bn.json b/languages/bn.json index b7092391..ec1d8a85 100644 --- a/languages/bn.json +++ b/languages/bn.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "ক্যানভাস অদলবদল", "Local Assets": "স্থানীয় সম্পদ", "Import": "আমদানি", + "Copy to Clipboard": "ক্লিপবোর্ডে অনুলিপি করুন", + "Paste from Clipboard": "ক্লিপবোর্ড থেকে পেস্ট করুন", "Export": "রপ্তানি", "Export to runner": "রানারে রপ্তানি", "Clean Cache": "ক্যাশে পরিষ্কার", @@ -5406,5 +5408,88 @@ "textureSize": "টেক্সচারের আকার", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "স্কাইবক্স কাস্টম টেক্সচার সক্রিয় করুন", "enableSkyboxCustomTexture": "স্কাইবক্স কাস্টম টেক্সচার সক্রিয় করুন", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "কাস্টম টেক্সচার সহ স্কাইবক্স সক্রিয় করে" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "কাস্টম টেক্সচার সহ স্কাইবক্স সক্রিয় করে", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "ক্যানভাস সিএসএস পৃষ্ঠভূমি ছবি", + "canvasCSSBackgroundImage": "ক্যানভাস সিএসএস পৃষ্ঠভূমি ছবি", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "3D স্থানের জন্য দৃশ্যের পৃষ্ঠভূমিকে সিএসএস পৃষ্ঠভূমি ছবিতে পরিবর্তন করে", + "cssBackgroundImage": "সিএসএস পৃষ্ঠভূমি ছবি", + "bitbybit.babylon.scene.twoColorLinearGradient": "দুই রঙের সরল গ্রেডিয়েন্ট", + "twoColorLinearGradient": "দুই রঙের সরল গ্রেডিয়েন্ট", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "3D স্থানের জন্য দুই রঙের সরল গ্রেডিয়েন্ট পৃষ্ঠভূমি তৈরি করে", + "colorFrom": "রঙ থেকে", + "colorTo": "রঙ পর্যন্ত", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "থামা থেকে", + "stopTo": "থামা পর্যন্ত", + "bitbybit.babylon.scene.twoColorRadialGradient": "দুই রঙের রেডিয়াল গ্রেডিয়েন্ট", + "twoColorRadialGradient": "দুই রঙের রেডিয়াল গ্রেডিয়েন্ট", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "3D স্থানের জন্য দুই রঙের রেডিয়াল গ্রেডিয়েন্ট পৃষ্ঠভূমি তৈরি করে", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "বহু রঙের সরল গ্রেডিয়েন্ট", + "multiColorLinearGradient": "বহু রঙের সরল গ্রেডিয়েন্ট", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "3D স্থানের জন্য বহু রঙের সরল গ্রেডিয়েন্ট পৃষ্ঠভূমি তৈরি করে", + "Base.Color[]": "Base.Color[]", + "stops": "থামার জায়গা", + "bitbybit.babylon.scene.multiColorRadialGradient": "বহু রঙের রেডিয়াল গ্রেডিয়েন্ট", + "multiColorRadialGradient": "বহু রঙের রেডিয়াল গ্রেডিয়েন্ট", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "3D স্থানের জন্য বহু রঙের রেডিয়াল গ্রেডিয়েন্ট পৃষ্ঠভূমি তৈরি করে", + "bitbybit.babylon.scene.canvasBackgroundImage": "ক্যানভাস পৃষ্ঠভূমি ছবি", + "canvasBackgroundImage": "ক্যানভাস পৃষ্ঠভূমি ছবি", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "3D স্থানের জন্য বিভিন্ন কাস্টমাইজেশন বিকল্প সহ একটি পৃষ্ঠভূমি ছবি সেট করে", + "imageUrl": "ছবির ইউআরএল", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "সংযুক্তি", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "ক্লিপ", + "labelRotation": "লেবেল ঘূর্ণন", + "bitbybit.advanced.dimensions.linearDimension": "সরলরৈখিক মাত্রা", + "linearDimension": "সরলরৈখিক মাত্রা", + "bitbybit.advanced.dimensions.linearDimension_description": "সরলরৈখিক মাত্রা তৈরি করে - দুটি বিন্দুর মধ্যে বিস্তার লাইন এবং টেক্সট লেবেল সহ একটি পরিমাপ লাইন। মাত্রা বিন্দুগুলির মধ্যে দূরত্ব দেখায় এবং DimensionStyleDto দিয়ে স্টাইল করা যায়।", + "linear dimension": "সরলরৈখিক মাত্রা", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "কোণীয় মাত্রা", + "angularDimension": "কোণীয় মাত্রা", + "bitbybit.advanced.dimensions.angularDimension_description": "কোণীয় মাত্রা তৈরি করে - দুটি দিক ভেক্টরের মধ্যে বিস্তার লাইন এবং টেক্সট লেবেল সহ একটি পরিমাপ ধনুক। মাত্রা দিকগুলির মধ্যে কোণ দেখায় এবং DimensionStyleDto দিয়ে স্টাইল করা যায়।", + "angular dimension": "কোণীয় মাত্রা", + "centerPoint": "কেন্দ্র বিন্দু", + "bitbybit.advanced.dimensions.dimensionStyle": "মাত্রার স্টাইল", + "dimensionStyle": "মাত্রার স্টাইল", + "bitbybit.advanced.dimensions.dimensionStyle_description": "মাত্রার স্টাইল তৈরি করুন - 3D স্থানে মাত্রার লাইন, তীর এবং টেক্সট স্টাইল করতে ব্যবহৃত হয়। আপনি লাইনের রঙ, পুরুত্ব, টেক্সটের আকার, তীরের আকার এবং পৃষ্ঠভূমির রঙ কাস্টমাইজ করতে পারেন।", + "dimension style": "মাত্রার স্টাইল", + "lineColor": "লাইনের রঙ", + "lineThickness": "লাইনের পুরুত্ব", + "extensionLineLength": "বিস্তার লাইনের দৈর্ঘ্য", + "textBackgroundColor": "টেক্সট পৃষ্ঠভূমির রঙ", + "textBackgroundOpacity": "টেক্সট পৃষ্ঠভূমির স্বচ্ছতা", + "arrowSize": "তীরের আকার", + "arrowColor": "তীরের রঙ", + "textRenderMode": "টেক্সট রেন্ডার মোড", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "টেক্সট বিলবোর্ড", + "occlusionCheckInterval": "অক্লুশন চেক ইন্টারভ্যাল", + "arrowTailLength": "তীরের লেজের দৈর্ঘ্য", + "showArrows": "তীর দেখান", + "labelOverwrite": "লেবেল ওভাররাইট", + "bitbybit.advanced.dimensions.radialDimension": "রেডিয়াল মাত্রা", + "radialDimension": "রেডিয়াল মাত্রা", + "bitbybit.advanced.dimensions.radialDimension_description": "রেডিয়াল মাত্রা তৈরি করে - কেন্দ্র থেকে পরিধি পর্যন্ত একটি পরিমাপ লাইন যা ব্যাসার্ধ বা ব্যাস দেখায়। ব্যাসার্ধের জন্য 'R' প্রিফিক্স বা ব্যাসের জন্য '⌀' প্রিফিক্স সহ ঘরের কেন্দ্র চিহ্ন দেখায়।", + "radial dimension": "রেডিয়াল মাত্রা", + "radiusPoint": "ব্যাসার্ধ বিন্দু", + "showDiameter": "ব্যাস দেখান", + "showCenterMark": "কেন্দ্র চিহ্ন দেখান", + "bitbybit.advanced.dimensions.diametralDimension": "ব্যাসীয় মাত্রা", + "diametralDimension": "ব্যাসীয় মাত্রা", + "bitbybit.advanced.dimensions.diametralDimension_description": "ব্যাসীয় মাত্রা তৈরি করে - একটি পরিমাপ লাইন যা বৃত্তাকার বৈশিষ্ট্যগুলির সম্পূর্ণ ব্যাস জুড়ে দেয়। ঘরের কেন্দ্র চিহ্ন এবং দুটি প্রান্তে তীর সহ '⌀' প্রিফিক্স দেখায়।", + "diametral dimension": "ব্যাসীয় মাত্রা", + "bitbybit.advanced.dimensions.ordinateDimension": "অর্ডিনেট মাত্রা", + "ordinateDimension": "অর্ডিনেট মাত্রা", + "bitbybit.advanced.dimensions.ordinateDimension_description": "অর্ডিনেট মাত্রা তৈরি করে - একটি রেফারেন্স পয়েন্ট থেকে লিডার লাইন সহ X, Y, বা Z অক্ষাংশ দেখায়। প্রযুক্তিগত চিত্রে অক্ষাংশ এনোটেশন এবং ডেটাম রেফারেন্সের জন্য উপকারী।", + "ordinate dimension": "অর্ডিনেট মাত্রা", + "measurementPoint": "পরিমাপ বিন্দু", + "referencePoint": "রেফারেন্স পয়েন্ট", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "লিডার লাইন দেখান" } \ No newline at end of file diff --git a/languages/de.json b/languages/de.json index 4bb74268..c99a1246 100644 --- a/languages/de.json +++ b/languages/de.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "Canvas tauschen", "Local Assets": "Lokale Assets", "Import": "Importieren", + "Copy to Clipboard": "In die Zwischenablage kopieren", + "Paste from Clipboard": "Aus der Zwischenablage einfügen", "Export": "Exportieren", "Export to runner": "Zum Runner exportieren", "Clean Cache": "Cache bereinigen", @@ -5406,5 +5408,88 @@ "textureSize": "Texturgröße", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "benutzerdefinierte Skybox-Textur aktivieren", "enableSkyboxCustomTexture": "benutzerdefinierte Skybox-Textur aktivieren", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Aktiviert die Skybox mit einer benutzerdefinierten Textur" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Aktiviert die Skybox mit einer benutzerdefinierten Textur", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "Canvas CSS Hintergrundbild", + "canvasCSSBackgroundImage": "Canvas CSS Hintergrundbild", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Ändert den Szenenhintergrund zu einem CSS-Hintergrundbild für den 3D-Raum", + "cssBackgroundImage": "CSS Hintergrundbild", + "bitbybit.babylon.scene.twoColorLinearGradient": "zweifarbiger linearer Gradient", + "twoColorLinearGradient": "zweifarbiger linearer Gradient", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Erstellt einen zweifarbigen linearen Gradientenhintergrund für den 3D-Raum", + "colorFrom": "Farbe von", + "colorTo": "Farbe zu", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "Stopp von", + "stopTo": "Stopp zu", + "bitbybit.babylon.scene.twoColorRadialGradient": "zweifarbiger radialer Gradient", + "twoColorRadialGradient": "zweifarbiger radialer Gradient", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Erstellt einen zweifarbigen radialen Gradientenhintergrund für den 3D-Raum", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "mehrfarbiger linearer Gradient", + "multiColorLinearGradient": "mehrfarbiger linearer Gradient", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Erstellt einen mehrfarbigen linearen Gradientenhintergrund für den 3D-Raum", + "Base.Color[]": "Base.Color[]", + "stops": "Stopps", + "bitbybit.babylon.scene.multiColorRadialGradient": "mehrfarbiger radialer Gradient", + "multiColorRadialGradient": "mehrfarbiger radialer Gradient", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Erstellt einen mehrfarbigen radialen Gradientenhintergrund für den 3D-Raum", + "bitbybit.babylon.scene.canvasBackgroundImage": "Canvas Hintergrundbild", + "canvasBackgroundImage": "Canvas Hintergrundbild", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Setzt ein Hintergrundbild mit verschiedenen Anpassungsoptionen für den 3D-Raum", + "imageUrl": "Bild URL", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "Anhang", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "Ausschneiden", + "labelRotation": "Beschriftungsrotation", + "bitbybit.advanced.dimensions.linearDimension": "lineare Bemaßung", + "linearDimension": "lineare Bemaßung", + "bitbybit.advanced.dimensions.linearDimension_description": "Erstellt eine lineare Bemaßung - eine Messlinie zwischen zwei Punkten mit Hilfslinien und Textbeschriftung. Die Bemaßung zeigt den Abstand zwischen den Punkten und kann mit DimensionStyleDto gestaltet werden.", + "linear dimension": "lineare Bemaßung", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "Winkelbemaßung", + "angularDimension": "Winkelbemaßung", + "bitbybit.advanced.dimensions.angularDimension_description": "Erstellt eine Winkelbemaßung - einen Messbogen zwischen zwei Richtungsvektoren mit Hilfslinien und Textbeschriftung. Die Bemaßung zeigt den Winkel zwischen den Richtungen und kann mit DimensionStyleDto gestaltet werden.", + "angular dimension": "Winkelbemaßung", + "centerPoint": "Mittelpunkt", + "bitbybit.advanced.dimensions.dimensionStyle": "Bemaßungsstil", + "dimensionStyle": "Bemaßungsstil", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Erstellt einen Bemaßungsstil - wird verwendet, um Bemaßungslinien, Pfeile und Text im 3D-Raum zu gestalten. Sie können Linienfarben, Dicke, Textgröße, Pfeilgröße und Hintergrundfarben anpassen.", + "dimension style": "Bemaßungsstil", + "lineColor": "Linienfarbe", + "lineThickness": "Liniendicke", + "extensionLineLength": "Hilfslinienlänge", + "textBackgroundColor": "Text-Hintergrundfarbe", + "textBackgroundOpacity": "Text-Hintergrundtransparenz", + "arrowSize": "Pfeilgröße", + "arrowColor": "Pfeilfarbe", + "textRenderMode": "Text-Rendermodus", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "Text-Billboard", + "occlusionCheckInterval": "Verdeckungsüberprüfungsintervall", + "arrowTailLength": "Pfeilschwanzlänge", + "showArrows": "Pfeile anzeigen", + "labelOverwrite": "Beschriftung überschreiben", + "bitbybit.advanced.dimensions.radialDimension": "Radialbemaßung", + "radialDimension": "Radialbemaßung", + "bitbybit.advanced.dimensions.radialDimension_description": "Erstellt eine Radialbemaßung - eine Messlinie vom Zentrum zum Umfang, die Radius oder Durchmesser zeigt. Zeigt 'R'-Präfix für Radius oder '⌀'-Präfix für Durchmesser mit optionaler Mittelmarkierung.", + "radial dimension": "Radialbemaßung", + "radiusPoint": "Radiuspunkt", + "showDiameter": "Durchmesser anzeigen", + "showCenterMark": "Mittelmarkierung anzeigen", + "bitbybit.advanced.dimensions.diametralDimension": "Durchmesserbemaßung", + "diametralDimension": "Durchmesserbemaßung", + "bitbybit.advanced.dimensions.diametralDimension_description": "Erstellt eine Durchmesserbemaßung - eine Messlinie, die den vollen Durchmesser kreisförmiger Merkmale umfasst. Zeigt '⌀'-Präfix mit optionaler Mittelmarkierung und Pfeilen an beiden Enden.", + "diametral dimension": "Durchmesserbemaßung", + "bitbybit.advanced.dimensions.ordinateDimension": "Koordinatenbemaßung", + "ordinateDimension": "Koordinatenbemaßung", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Erstellt eine Koordinatenbemaßung - zeigt X-, Y- oder Z-Koordinate von einem Referenzpunkt mit Führungslinie. Nützlich für Koordinatenannotationen und Bezugsbezüge in technischen Zeichnungen.", + "ordinate dimension": "Koordinatenbemaßung", + "measurementPoint": "Messpunkt", + "referencePoint": "Referenzpunkt", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "Führungslinie anzeigen" } \ No newline at end of file diff --git a/languages/en.json b/languages/en.json index 3b167349..a6ab9630 100644 --- a/languages/en.json +++ b/languages/en.json @@ -4919,6 +4919,8 @@ "Local Assets": "Local Assets", "Import": "Import", "Export": "Export", + "Copy to Clipboard": "Copy to Clipboard", + "Paste from Clipboard": "Paste from Clipboard", "Export to runner": "Export to runner", "Clean Cache": "Clean Cache", "Community": "Community", @@ -5406,5 +5408,88 @@ "textureSize": "texture size", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "enable skybox custom texture", "enableSkyboxCustomTexture": "enable skybox custom texture", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Enables skybox with custom texture" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Enables skybox with custom texture", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "canvas css background image", + "canvasCSSBackgroundImage": "canvas css background image", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Changes the scene background to a css background image for 3D space", + "cssBackgroundImage": "css background image", + "bitbybit.babylon.scene.twoColorLinearGradient": "two color linear gradient", + "twoColorLinearGradient": "two color linear gradient", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Creates a two-color linear gradient background for 3D space", + "colorFrom": "color from", + "colorTo": "color to", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "stop from", + "stopTo": "stop to", + "bitbybit.babylon.scene.twoColorRadialGradient": "two color radial gradient", + "twoColorRadialGradient": "two color radial gradient", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Creates a two-color radial gradient background for 3D space", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "multi color linear gradient", + "multiColorLinearGradient": "multi color linear gradient", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Creates a multi-color linear gradient background for 3D space", + "Base.Color[]": "Base.Color[]", + "stops": "stops", + "bitbybit.babylon.scene.multiColorRadialGradient": "multi color radial gradient", + "multiColorRadialGradient": "multi color radial gradient", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Creates a multi-color radial gradient background for 3D space", + "bitbybit.babylon.scene.canvasBackgroundImage": "canvas background image", + "canvasBackgroundImage": "canvas background image", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Sets a background image with various customization options for 3D space", + "imageUrl": "image url", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "attachment", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "clip", + "labelRotation": "label rotation", + "bitbybit.advanced.dimensions.linearDimension": "linear dimension", + "linearDimension": "linear dimension", + "bitbybit.advanced.dimensions.linearDimension_description": "Creates linear dimension - a measurement line between two points with extension lines and text label. The dimension shows the distance between the points and can be styled with DimensionStyleDto.", + "linear dimension": "linear dimension", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "angular dimension", + "angularDimension": "angular dimension", + "bitbybit.advanced.dimensions.angularDimension_description": "Creates angular dimension - a measurement arc between two direction vectors with extension lines and text label. The dimension shows the angle between the directions and can be styled with DimensionStyleDto.", + "angular dimension": "angular dimension", + "centerPoint": "center point", + "bitbybit.advanced.dimensions.dimensionStyle": "dimension style", + "dimensionStyle": "dimension style", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Create dimension style - used to style dimension lines, arrows, and text in 3D space. You can customize line colors, thickness, text size, arrow size, and background colors.", + "dimension style": "dimension style", + "lineColor": "line color", + "lineThickness": "line thickness", + "extensionLineLength": "extension line length", + "textBackgroundColor": "text background color", + "textBackgroundOpacity": "text background opacity", + "arrowSize": "arrow size", + "arrowColor": "arrow color", + "textRenderMode": "text render mode", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "text billboard", + "occlusionCheckInterval": "occlusion check interval", + "arrowTailLength": "arrow tail length", + "showArrows": "show arrows", + "labelOverwrite": "label overwrite", + "bitbybit.advanced.dimensions.radialDimension": "radial dimension", + "radialDimension": "radial dimension", + "bitbybit.advanced.dimensions.radialDimension_description": "Creates radial dimension - a measurement line from center to perimeter showing radius or diameter. Shows 'R' prefix for radius or '⌀' prefix for diameter with optional center mark.", + "radial dimension": "radial dimension", + "radiusPoint": "radius point", + "showDiameter": "show diameter", + "showCenterMark": "show center mark", + "bitbybit.advanced.dimensions.diametralDimension": "diametral dimension", + "diametralDimension": "diametral dimension", + "bitbybit.advanced.dimensions.diametralDimension_description": "Creates diametral dimension - a measurement line spanning full diameter of circular features. Shows '⌀' prefix with optional center mark and arrows at both ends.", + "diametral dimension": "diametral dimension", + "bitbybit.advanced.dimensions.ordinateDimension": "ordinate dimension", + "ordinateDimension": "ordinate dimension", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Creates ordinate dimension - shows X, Y, or Z coordinate from a reference point with leader line. Useful for coordinate annotations and datum referencing in technical drawings.", + "ordinate dimension": "ordinate dimension", + "measurementPoint": "measurement point", + "referencePoint": "reference point", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "show leader line" } \ No newline at end of file diff --git a/languages/es.json b/languages/es.json index 896b4f72..62f6bf76 100644 --- a/languages/es.json +++ b/languages/es.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "Cambiar Lienzo", "Local Assets": "Activos Locales", "Import": "Importar", + "Copy to Clipboard": "Copiar al Portapapeles", + "Paste from Clipboard": "Pegar del Portapapeles", "Export": "Exportar", "Export to runner": "Exportar a ejecutor", "Clean Cache": "Limpiar Caché", @@ -5406,5 +5408,88 @@ "textureSize": "tamaño de la textura", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "habilitar textura personalizada del skybox", "enableSkyboxCustomTexture": "habilitar textura personalizada del skybox", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Habilita el skybox con una textura personalizada" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Habilita el skybox con una textura personalizada", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "imagen de fondo CSS del canvas", + "canvasCSSBackgroundImage": "imagen de fondo CSS del canvas", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Cambia el fondo de la escena a una imagen de fondo CSS para el espacio 3D", + "cssBackgroundImage": "imagen de fondo CSS", + "bitbybit.babylon.scene.twoColorLinearGradient": "gradiente lineal de dos colores", + "twoColorLinearGradient": "gradiente lineal de dos colores", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Crea un fondo de gradiente lineal de dos colores para el espacio 3D", + "colorFrom": "color desde", + "colorTo": "color hasta", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "parada desde", + "stopTo": "parada hasta", + "bitbybit.babylon.scene.twoColorRadialGradient": "gradiente radial de dos colores", + "twoColorRadialGradient": "gradiente radial de dos colores", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Crea un fondo de gradiente radial de dos colores para el espacio 3D", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "gradiente lineal multicolor", + "multiColorLinearGradient": "gradiente lineal multicolor", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Crea un fondo de gradiente lineal multicolor para el espacio 3D", + "Base.Color[]": "Base.Color[]", + "stops": "paradas", + "bitbybit.babylon.scene.multiColorRadialGradient": "gradiente radial multicolor", + "multiColorRadialGradient": "gradiente radial multicolor", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Crea un fondo de gradiente radial multicolor para el espacio 3D", + "bitbybit.babylon.scene.canvasBackgroundImage": "imagen de fondo del canvas", + "canvasBackgroundImage": "imagen de fondo del canvas", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Establece una imagen de fondo con varias opciones de personalización para el espacio 3D", + "imageUrl": "URL de imagen", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "adjunto", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "recorte", + "labelRotation": "rotación de etiqueta", + "bitbybit.advanced.dimensions.linearDimension": "dimensión lineal", + "linearDimension": "dimensión lineal", + "bitbybit.advanced.dimensions.linearDimension_description": "Crea una dimensión lineal - una línea de medida entre dos puntos con líneas de extensión y etiqueta de texto. La dimensión muestra la distancia entre los puntos y se puede estilizar con DimensionStyleDto.", + "linear dimension": "dimensión lineal", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "dimensión angular", + "angularDimension": "dimensión angular", + "bitbybit.advanced.dimensions.angularDimension_description": "Crea una dimensión angular - un arco de medida entre dos vectores de dirección con líneas de extensión y etiqueta de texto. La dimensión muestra el ángulo entre las direcciones y se puede estilizar con DimensionStyleDto.", + "angular dimension": "dimensión angular", + "centerPoint": "punto central", + "bitbybit.advanced.dimensions.dimensionStyle": "estilo de dimensión", + "dimensionStyle": "estilo de dimensión", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Crear estilo de dimensión - utilizado para estilizar líneas de dimensión, flechas y texto en el espacio 3D. Puedes personalizar colores de línea, grosor, tamaño de texto, tamaño de flecha y colores de fondo.", + "dimension style": "estilo de dimensión", + "lineColor": "color de línea", + "lineThickness": "grosor de línea", + "extensionLineLength": "longitud de línea de extensión", + "textBackgroundColor": "color de fondo del texto", + "textBackgroundOpacity": "opacidad del fondo del texto", + "arrowSize": "tamaño de flecha", + "arrowColor": "color de flecha", + "textRenderMode": "modo de renderizado de texto", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "cartelera de texto", + "occlusionCheckInterval": "intervalo de verificación de oclusión", + "arrowTailLength": "longitud de cola de flecha", + "showArrows": "mostrar flechas", + "labelOverwrite": "sobrescribir etiqueta", + "bitbybit.advanced.dimensions.radialDimension": "dimensión radial", + "radialDimension": "dimensión radial", + "bitbybit.advanced.dimensions.radialDimension_description": "Crea una dimensión radial - una línea de medida desde el centro hasta el perímetro que muestra radio o diámetro. Muestra el prefijo 'R' para radio o el prefijo '⌀' para diámetro con marca central opcional.", + "radial dimension": "dimensión radial", + "radiusPoint": "punto de radio", + "showDiameter": "mostrar diámetro", + "showCenterMark": "mostrar marca central", + "bitbybit.advanced.dimensions.diametralDimension": "dimensión diametral", + "diametralDimension": "dimensión diametral", + "bitbybit.advanced.dimensions.diametralDimension_description": "Crea una dimensión diametral - una línea de medida que abarca el diámetro completo de características circulares. Muestra el prefijo '⌀' con marca central opcional y flechas en ambos extremos.", + "diametral dimension": "dimensión diametral", + "bitbybit.advanced.dimensions.ordinateDimension": "dimensión de ordenada", + "ordinateDimension": "dimensión de ordenada", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Crea una dimensión de ordenada - muestra la coordenada X, Y o Z desde un punto de referencia con línea guía. Útil para anotaciones de coordenadas y referenciado de datos en dibujos técnicos.", + "ordinate dimension": "dimensión de ordenada", + "measurementPoint": "punto de medición", + "referencePoint": "punto de referencia", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "mostrar línea guía" } \ No newline at end of file diff --git a/languages/fr.json b/languages/fr.json index 61ac1815..68818cd4 100644 --- a/languages/fr.json +++ b/languages/fr.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "Échanger Canvas", "Local Assets": "Actifs Locaux", "Import": "Importer", + "Copy to Clipboard": "Copier dans le Presse-papiers", + "Paste from Clipboard": "Coller du Presse-papiers", "Export": "Exporter", "Export to runner": "Exporter vers exécuteur", "Clean Cache": "Nettoyer Cache", @@ -5406,5 +5408,88 @@ "textureSize": "taille de la texture", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "activer la texture personnalisée de la skybox", "enableSkyboxCustomTexture": "activer la texture personnalisée de la skybox", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Active la skybox avec une texture personnalisée" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Active la skybox avec une texture personnalisée", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "image de fond CSS du canvas", + "canvasCSSBackgroundImage": "image de fond CSS du canvas", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Change l'arrière-plan de la scène en image de fond CSS pour l'espace 3D", + "cssBackgroundImage": "image de fond CSS", + "bitbybit.babylon.scene.twoColorLinearGradient": "dégradé linéaire à deux couleurs", + "twoColorLinearGradient": "dégradé linéaire à deux couleurs", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Crée un arrière-plan dégradé linéaire à deux couleurs pour l'espace 3D", + "colorFrom": "couleur de départ", + "colorTo": "couleur d'arrivée", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "arrêt de départ", + "stopTo": "arrêt d'arrivée", + "bitbybit.babylon.scene.twoColorRadialGradient": "dégradé radial à deux couleurs", + "twoColorRadialGradient": "dégradé radial à deux couleurs", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Crée un arrière-plan dégradé radial à deux couleurs pour l'espace 3D", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "dégradé linéaire multicolore", + "multiColorLinearGradient": "dégradé linéaire multicolore", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Crée un arrière-plan dégradé linéaire multicolore pour l'espace 3D", + "Base.Color[]": "Base.Color[]", + "stops": "arrêts", + "bitbybit.babylon.scene.multiColorRadialGradient": "dégradé radial multicolore", + "multiColorRadialGradient": "dégradé radial multicolore", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Crée un arrière-plan dégradé radial multicolore pour l'espace 3D", + "bitbybit.babylon.scene.canvasBackgroundImage": "image de fond du canvas", + "canvasBackgroundImage": "image de fond du canvas", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Définit une image de fond avec diverses options de personnalisation pour l'espace 3D", + "imageUrl": "URL de l'image", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "attachement", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "découpage", + "labelRotation": "rotation de l'étiquette", + "bitbybit.advanced.dimensions.linearDimension": "dimension linéaire", + "linearDimension": "dimension linéaire", + "bitbybit.advanced.dimensions.linearDimension_description": "Crée une dimension linéaire - une ligne de mesure entre deux points avec des lignes d'extension et une étiquette de texte. La dimension montre la distance entre les points et peut être stylisée avec DimensionStyleDto.", + "linear dimension": "dimension linéaire", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "dimension angulaire", + "angularDimension": "dimension angulaire", + "bitbybit.advanced.dimensions.angularDimension_description": "Crée une dimension angulaire - un arc de mesure entre deux vecteurs de direction avec des lignes d'extension et une étiquette de texte. La dimension montre l'angle entre les directions et peut être stylisée avec DimensionStyleDto.", + "angular dimension": "dimension angulaire", + "centerPoint": "point central", + "bitbybit.advanced.dimensions.dimensionStyle": "style de dimension", + "dimensionStyle": "style de dimension", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Créer un style de dimension - utilisé pour styliser les lignes de dimension, les flèches et le texte dans l'espace 3D. Vous pouvez personnaliser les couleurs de ligne, l'épaisseur, la taille du texte, la taille des flèches et les couleurs d'arrière-plan.", + "dimension style": "style de dimension", + "lineColor": "couleur de ligne", + "lineThickness": "épaisseur de ligne", + "extensionLineLength": "longueur de ligne d'extension", + "textBackgroundColor": "couleur d'arrière-plan du texte", + "textBackgroundOpacity": "opacité d'arrière-plan du texte", + "arrowSize": "taille de flèche", + "arrowColor": "couleur de flèche", + "textRenderMode": "mode de rendu du texte", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "panneau de texte", + "occlusionCheckInterval": "intervalle de vérification d'occlusion", + "arrowTailLength": "longueur de queue de flèche", + "showArrows": "afficher les flèches", + "labelOverwrite": "écraser l'étiquette", + "bitbybit.advanced.dimensions.radialDimension": "dimension radiale", + "radialDimension": "dimension radiale", + "bitbybit.advanced.dimensions.radialDimension_description": "Crée une dimension radiale - une ligne de mesure du centre au périmètre montrant le rayon ou le diamètre. Affiche le préfixe 'R' pour le rayon ou le préfixe '⌀' pour le diamètre avec une marque centrale optionnelle.", + "radial dimension": "dimension radiale", + "radiusPoint": "point de rayon", + "showDiameter": "afficher le diamètre", + "showCenterMark": "afficher la marque centrale", + "bitbybit.advanced.dimensions.diametralDimension": "dimension diamétrale", + "diametralDimension": "dimension diamétrale", + "bitbybit.advanced.dimensions.diametralDimension_description": "Crée une dimension diamétrale - une ligne de mesure couvrant le diamètre complet des caractéristiques circulaires. Affiche le préfixe '⌀' avec une marque centrale optionnelle et des flèches aux deux extrémités.", + "diametral dimension": "dimension diamétrale", + "bitbybit.advanced.dimensions.ordinateDimension": "dimension d'ordonnée", + "ordinateDimension": "dimension d'ordonnée", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Crée une dimension d'ordonnée - affiche la coordonnée X, Y ou Z à partir d'un point de référence avec une ligne de repère. Utile pour les annotations de coordonnées et le référencement de données dans les dessins techniques.", + "ordinate dimension": "dimension d'ordonnée", + "measurementPoint": "point de mesure", + "referencePoint": "point de référence", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "afficher la ligne de repère" } \ No newline at end of file diff --git a/languages/hi.json b/languages/hi.json index 583957d7..ba9f22e7 100644 --- a/languages/hi.json +++ b/languages/hi.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "कैनवास स्वैप करें", "Local Assets": "स्थानीय संपत्ति", "Import": "आयात", + "Copy to Clipboard": "क्लिपबोर्ड पर कॉपी करें", + "Paste from Clipboard": "क्लिपबोर्ड से पेस्ट करें", "Export": "निर्यात", "Export to runner": "रनर को निर्यात करें", "Clean Cache": "कैश साफ़ करें", @@ -5406,5 +5408,88 @@ "textureSize": "टेक्सचर का आकार", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "स्काईबॉक्स कस्टम टेक्सचर सक्षम करें", "enableSkyboxCustomTexture": "स्काईबॉक्स कस्टम टेक्सचर सक्षम करें", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "कस्टम टेक्सचर के साथ स्काईबॉक्स सक्षम करता है" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "कस्टम टेक्सचर के साथ स्काईबॉक्स सक्षम करता है", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "कैनवास सीएसएस बैकग्राउंड इमेज", + "canvasCSSBackgroundImage": "कैनवास सीएसएस बैकग्राउंड इमेज", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "3D स्पेस के लिए सीन बैकग्राउंड को सीएसएस बैकग्राउंड इमेज में बदलता है", + "cssBackgroundImage": "सीएसएस बैकग्राउंड इमेज", + "bitbybit.babylon.scene.twoColorLinearGradient": "दो रंग का लिनियर ग्रेडिएंट", + "twoColorLinearGradient": "दो रंग का लिनियर ग्रेडिएंट", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "3D स्पेस के लिए दो रंग का लिनियर ग्रेडिएंट बैकग्राउंड बनाता है", + "colorFrom": "रंग से", + "colorTo": "रंग तक", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "स्टॉप से", + "stopTo": "स्टॉप तक", + "bitbybit.babylon.scene.twoColorRadialGradient": "दो रंग का रेडियल ग्रेडिएंट", + "twoColorRadialGradient": "दो रंग का रेडियल ग्रेडिएंट", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "3D स्पेस के लिए दो रंग का रेडियल ग्रेडिएंट बैकग्राउंड बनाता है", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "मल्टी कलर लिनियर ग्रेडिएंट", + "multiColorLinearGradient": "मल्टी कलर लिनियर ग्रेडिएंट", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "3D स्पेस के लिए मल्टी कलर लिनियर ग्रेडिएंट बैकग्राउंड बनाता है", + "Base.Color[]": "Base.Color[]", + "stops": "स्टॉप्स", + "bitbybit.babylon.scene.multiColorRadialGradient": "मल्टी कलर रेडियल ग्रेडिएंट", + "multiColorRadialGradient": "मल्टी कलर रेडियल ग्रेडिएंट", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "3D स्पेस के लिए मल्टी कलर रेडियल ग्रेडिएंट बैकग्राउंड बनाता है", + "bitbybit.babylon.scene.canvasBackgroundImage": "कैनवास बैकग्राउंड इमेज", + "canvasBackgroundImage": "कैनवास बैकग्राउंड इमेज", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "3D स्पेस के लिए विभिन्न कस्टमाइज़ेशन विकल्पों के साथ बैकग्राउंड इमेज सेट करता है", + "imageUrl": "इमेज यूआरएल", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "अटैचमेंट", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "क्लिप", + "labelRotation": "लेबल रोटेशन", + "bitbybit.advanced.dimensions.linearDimension": "लिनियर डाइमेंशन", + "linearDimension": "लिनियर डाइमेंशन", + "bitbybit.advanced.dimensions.linearDimension_description": "लिनियर डाइमेंशन बनाता है - दो बिंदुओं के बीच एक्सटेंशन लाइनों और टेक्स्ट लेबल के साथ मापने की लाइन। डाइमेंशन बिंदुओं के बीच की दूरी दिखाता है और DimensionStyleDto के साथ स्टाइल किया जा सकता है।", + "linear dimension": "लिनियर डाइमेंशन", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "एंगुलर डाइमेंशन", + "angularDimension": "एंगुलर डाइमेंशन", + "bitbybit.advanced.dimensions.angularDimension_description": "एंगुलर डाइमेंशन बनाता है - दो दिशा वेक्टरों के बीच एक्सटेंशन लाइनों और टेक्स्ट लेबल के साथ मापने का आर्क। डाइमेंशन दिशाओं के बीच का कोण दिखाता है और DimensionStyleDto के साथ स्टाइल किया जा सकता है।", + "angular dimension": "एंगुलर डाइमेंशन", + "centerPoint": "केंद्र बिंदु", + "bitbybit.advanced.dimensions.dimensionStyle": "डाइमेंशन स्टाइल", + "dimensionStyle": "डाइमेंशन स्टाइल", + "bitbybit.advanced.dimensions.dimensionStyle_description": "डाइमेंशन स्टाइल बनाएं - 3D स्पेस में डाइमेंशन लाइनों, तीरों और टेक्स्ट को स्टाइल करने के लिए उपयोग किया जाता है। आप लाइन रंग, मोटाई, टेक्स्ट साइज़, तीर का साइज़ और बैकग्राउंड रंग कस्टमाइज़ कर सकते हैं।", + "dimension style": "डाइमेंशन स्टाइल", + "lineColor": "लाइन रंग", + "lineThickness": "लाइन मोटाई", + "extensionLineLength": "एक्सटेंशन लाइन लंबाई", + "textBackgroundColor": "टेक्स्ट बैकग्राउंड रंग", + "textBackgroundOpacity": "टेक्स्ट बैकग्राउंड अपारदर्शिता", + "arrowSize": "तीर साइज़", + "arrowColor": "तीर रंग", + "textRenderMode": "टेक्स्ट रेंडर मोड", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "टेक्स्ट बिलबोर्ड", + "occlusionCheckInterval": "ऑक्लूज़न चेक इंटरवल", + "arrowTailLength": "तीर की पूंछ की लंबाई", + "showArrows": "तीर दिखाएं", + "labelOverwrite": "लेबल ओवरराइट", + "bitbybit.advanced.dimensions.radialDimension": "रेडियल डाइमेंशन", + "radialDimension": "रेडियल डाइमेंशन", + "bitbybit.advanced.dimensions.radialDimension_description": "रेडियल डाइमेंशन बनाता है - केंद्र से परिधि तक मापने की लाइन जो रेडियस या डायामीटर दिखाती है। रेडियस के लिए 'R' प्रीफिक्स या डायामीटर के लिए '⌀' प्रीफिक्स वैकल्पिक केंद्र मार्क के साथ दिखाता है।", + "radial dimension": "रेडियल डाइमेंशन", + "radiusPoint": "रेडियस पॉइंट", + "showDiameter": "डायामीटर दिखाएं", + "showCenterMark": "केंद्र मार्क दिखाएं", + "bitbybit.advanced.dimensions.diametralDimension": "डायामेट्रल डाइमेंशन", + "diametralDimension": "डायामेट्रल डाइमेंशन", + "bitbybit.advanced.dimensions.diametralDimension_description": "डायामेट्रल डाइमेंशन बनाता है - एक मापने की लाइन जो गोलाकार फीचर्स के पूरे डायामीटर को फैलाती है। वैकल्पिक केंद्र मार्क और दोनों छोरों पर तीरों के साथ '⌀' प्रीफिक्स दिखाता है।", + "diametral dimension": "डायामेट्रल डाइमेंशन", + "bitbybit.advanced.dimensions.ordinateDimension": "ऑर्डिनेट डाइमेंशन", + "ordinateDimension": "ऑर्डिनेट डाइमेंशन", + "bitbybit.advanced.dimensions.ordinateDimension_description": "ऑर्डिनेट डाइमेंशन बनाता है - लीडर लाइन के साथ रेफरेंस पॉइंट से X, Y, या Z कोऑर्डिनेट दिखाता है। तकनीकी ड्रॉइंग में कोऑर्डिनेट एनोटेशन और डेटम रेफरेंसिंग के लिए उपयोगी।", + "ordinate dimension": "ऑर्डिनेट डाइमेंशन", + "measurementPoint": "मापने का बिंदु", + "referencePoint": "रेफरेंस पॉइंट", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "लीडर लाइन दिखाएं" } \ No newline at end of file diff --git a/languages/id.json b/languages/id.json index 4799f30f..0631edc8 100644 --- a/languages/id.json +++ b/languages/id.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "Tukar Kanvas", "Local Assets": "Aset Lokal", "Import": "Impor", + "Copy to Clipboard": "Salin ke Clipboard", + "Paste from Clipboard": "Tempel dari Clipboard", "Export": "Ekspor", "Export to runner": "Ekspor ke runner", "Clean Cache": "Bersihkan Cache", @@ -5406,5 +5408,88 @@ "textureSize": "ukuran tekstur", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "aktifkan tekstur kustom skybox", "enableSkyboxCustomTexture": "aktifkan tekstur kustom skybox", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Mengaktifkan skybox dengan tekstur kustom" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Mengaktifkan skybox dengan tekstur kustom", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "gambar latar belakang CSS canvas", + "canvasCSSBackgroundImage": "gambar latar belakang CSS canvas", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Mengubah latar belakang scene menjadi gambar latar belakang CSS untuk ruang 3D", + "cssBackgroundImage": "gambar latar belakang CSS", + "bitbybit.babylon.scene.twoColorLinearGradient": "gradien linear dua warna", + "twoColorLinearGradient": "gradien linear dua warna", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Membuat latar belakang gradien linear dua warna untuk ruang 3D", + "colorFrom": "warna dari", + "colorTo": "warna ke", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "berhenti dari", + "stopTo": "berhenti ke", + "bitbybit.babylon.scene.twoColorRadialGradient": "gradien radial dua warna", + "twoColorRadialGradient": "gradien radial dua warna", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Membuat latar belakang gradien radial dua warna untuk ruang 3D", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "gradien linear multi warna", + "multiColorLinearGradient": "gradien linear multi warna", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Membuat latar belakang gradien linear multi warna untuk ruang 3D", + "Base.Color[]": "Base.Color[]", + "stops": "pemberhentian", + "bitbybit.babylon.scene.multiColorRadialGradient": "gradien radial multi warna", + "multiColorRadialGradient": "gradien radial multi warna", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Membuat latar belakang gradien radial multi warna untuk ruang 3D", + "bitbybit.babylon.scene.canvasBackgroundImage": "gambar latar belakang canvas", + "canvasBackgroundImage": "gambar latar belakang canvas", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Mengatur gambar latar belakang dengan berbagai opsi kustomisasi untuk ruang 3D", + "imageUrl": "URL gambar", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "lampiran", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "klip", + "labelRotation": "rotasi label", + "bitbybit.advanced.dimensions.linearDimension": "dimensi linear", + "linearDimension": "dimensi linear", + "bitbybit.advanced.dimensions.linearDimension_description": "Membuat dimensi linear - garis pengukuran antara dua titik dengan garis ekstensi dan label teks. Dimensi menunjukkan jarak antara titik dan dapat diberi gaya dengan DimensionStyleDto.", + "linear dimension": "dimensi linear", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "dimensi sudut", + "angularDimension": "dimensi sudut", + "bitbybit.advanced.dimensions.angularDimension_description": "Membuat dimensi sudut - busur pengukuran antara dua vektor arah dengan garis ekstensi dan label teks. Dimensi menunjukkan sudut antara arah dan dapat diberi gaya dengan DimensionStyleDto.", + "angular dimension": "dimensi sudut", + "centerPoint": "titik pusat", + "bitbybit.advanced.dimensions.dimensionStyle": "gaya dimensi", + "dimensionStyle": "gaya dimensi", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Membuat gaya dimensi - digunakan untuk memberi gaya pada garis dimensi, panah, dan teks dalam ruang 3D. Anda dapat menyesuaikan warna garis, ketebalan, ukuran teks, ukuran panah, dan warna latar belakang.", + "dimension style": "gaya dimensi", + "lineColor": "warna garis", + "lineThickness": "ketebalan garis", + "extensionLineLength": "panjang garis ekstensi", + "textBackgroundColor": "warna latar belakang teks", + "textBackgroundOpacity": "opasitas latar belakang teks", + "arrowSize": "ukuran panah", + "arrowColor": "warna panah", + "textRenderMode": "mode render teks", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "billboard teks", + "occlusionCheckInterval": "interval pemeriksaan oklusi", + "arrowTailLength": "panjang ekor panah", + "showArrows": "tampilkan panah", + "labelOverwrite": "timpa label", + "bitbybit.advanced.dimensions.radialDimension": "dimensi radial", + "radialDimension": "dimensi radial", + "bitbybit.advanced.dimensions.radialDimension_description": "Membuat dimensi radial - garis pengukuran dari pusat ke keliling yang menunjukkan radius atau diameter. Menampilkan awalan 'R' untuk radius atau awalan '⌀' untuk diameter dengan tanda pusat opsional.", + "radial dimension": "dimensi radial", + "radiusPoint": "titik radius", + "showDiameter": "tampilkan diameter", + "showCenterMark": "tampilkan tanda pusat", + "bitbybit.advanced.dimensions.diametralDimension": "dimensi diametral", + "diametralDimension": "dimensi diametral", + "bitbybit.advanced.dimensions.diametralDimension_description": "Membuat dimensi diametral - garis pengukuran yang mencakup diameter penuh fitur melingkar. Menampilkan awalan '⌀' dengan tanda pusat opsional dan panah di kedua ujung.", + "diametral dimension": "dimensi diametral", + "bitbybit.advanced.dimensions.ordinateDimension": "dimensi ordinat", + "ordinateDimension": "dimensi ordinat", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Membuat dimensi ordinat - menunjukkan koordinat X, Y, atau Z dari titik referensi dengan garis penunjuk. Berguna untuk anotasi koordinat dan referensi datum dalam gambar teknis.", + "ordinate dimension": "dimensi ordinat", + "measurementPoint": "titik pengukuran", + "referencePoint": "titik referensi", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "tampilkan garis penunjuk" } \ No newline at end of file diff --git a/languages/lt.json b/languages/lt.json index 8ccdfa01..eb188d78 100644 --- a/languages/lt.json +++ b/languages/lt.json @@ -4919,6 +4919,8 @@ "Local Assets": "Vietiniai ištekliai", "Import": "Importuoti", "Export": "Eksportuoti", + "Copy to Clipboard": "Kopijuoti į iškarpinę", + "Paste from Clipboard": "Įklijuoti iš iškarpinės", "Export to runner": "Eksportuoti į vykdytoją", "Clean Cache": "Išvalyti talpyklą", "Community": "Bendruomenė", @@ -5406,5 +5408,88 @@ "textureSize": "tekstūros dydis", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "įjungti pasirinktinę dangaus fono tekstūrą", "enableSkyboxCustomTexture": "įjungti pasirinktinę dangaus fono tekstūrą", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Įjungia dangaus foną su pasirinktine tekstūra" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Įjungia dangaus foną su pasirinktine tekstūra", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "audeklo CSS fono vaizdas", + "canvasCSSBackgroundImage": "audeklo CSS fono vaizdas", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Pakeičia scenos foną į CSS fono vaizdą 3D erdvei", + "cssBackgroundImage": "CSS fono vaizdas", + "bitbybit.babylon.scene.twoColorLinearGradient": "dviejų spalvų tiesinis gradientas", + "twoColorLinearGradient": "dviejų spalvų tiesinis gradientas", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Sukuria dviejų spalvų tiesinį gradientinį foną 3D erdvei", + "colorFrom": "spalva nuo", + "colorTo": "spalva iki", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "sustojimas nuo", + "stopTo": "sustojimas iki", + "bitbybit.babylon.scene.twoColorRadialGradient": "dviejų spalvų radialinis gradientas", + "twoColorRadialGradient": "dviejų spalvų radialinis gradientas", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Sukuria dviejų spalvų radialinį gradientinį foną 3D erdvei", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "daugiaspalvis tiesinis gradientas", + "multiColorLinearGradient": "daugiaspalvis tiesinis gradientas", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Sukuria daugiaspalvį tiesinį gradientinį foną 3D erdvei", + "Base.Color[]": "Base.Color[]", + "stops": "sustojimai", + "bitbybit.babylon.scene.multiColorRadialGradient": "daugiaspalvis radialinis gradientas", + "multiColorRadialGradient": "daugiaspalvis radialinis gradientas", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Sukuria daugiaspalvį radialinį gradientinį foną 3D erdvei", + "bitbybit.babylon.scene.canvasBackgroundImage": "audeklo fono vaizdas", + "canvasBackgroundImage": "audeklo fono vaizdas", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Nustato fono vaizdą su įvairiomis pritaikymo parinktimis 3D erdvei", + "imageUrl": "vaizdo URL", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "priedas", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "kirpimas", + "labelRotation": "etiketės sukimas", + "bitbybit.advanced.dimensions.linearDimension": "tiesinis matmuo", + "linearDimension": "tiesinis matmuo", + "bitbybit.advanced.dimensions.linearDimension_description": "Sukuria tiesinį matmenį - matavimo liniją tarp dviejų taškų su pratęsimo linijomis ir teksto etikete. Matmuo rodo atstumą tarp taškų ir gali būti stilizuotas su DimensionStyleDto.", + "linear dimension": "tiesinis matmuo", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "kampinis matmuo", + "angularDimension": "kampinis matmuo", + "bitbybit.advanced.dimensions.angularDimension_description": "Sukuria kampinį matmenį - matavimo lanką tarp dviejų krypties vektorių su pratęsimo linijomis ir teksto etikete. Matmuo rodo kampą tarp krypčių ir gali būti stilizuotas su DimensionStyleDto.", + "angular dimension": "kampinis matmuo", + "centerPoint": "centrinis taškas", + "bitbybit.advanced.dimensions.dimensionStyle": "matmens stilius", + "dimensionStyle": "matmens stilius", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Sukurti matmens stilių - naudojamas matmenų linijų, rodyklių ir teksto stilizavimui 3D erdvėje. Galite pritaikyti linijų spalvas, storį, teksto dydį, rodyklių dydį ir fono spalvas.", + "dimension style": "matmens stilius", + "lineColor": "linijos spalva", + "lineThickness": "linijos storis", + "extensionLineLength": "pratęsimo linijos ilgis", + "textBackgroundColor": "teksto fono spalva", + "textBackgroundOpacity": "teksto fono nepermatomumas", + "arrowSize": "rodyklės dydis", + "arrowColor": "rodyklės spalva", + "textRenderMode": "teksto atvaizdavimo režimas", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "teksto skelbimas", + "occlusionCheckInterval": "užstojimo tikrinimo intervalas", + "arrowTailLength": "rodyklės uodegos ilgis", + "showArrows": "rodyti rodykles", + "labelOverwrite": "etiketės perrašymas", + "bitbybit.advanced.dimensions.radialDimension": "radialinis matmuo", + "radialDimension": "radialinis matmuo", + "bitbybit.advanced.dimensions.radialDimension_description": "Sukuria radialinį matmenį - matavimo liniją nuo centro iki perimetro, rodančią spindulį arba skersmenį. Rodo 'R' prefiksą spinduliui arba '⌀' prefiksą skersmeniui su pasirinktiniu centro žymeniu.", + "radial dimension": "radialinis matmuo", + "radiusPoint": "spindulio taškas", + "showDiameter": "rodyti skersmenį", + "showCenterMark": "rodyti centro žymenį", + "bitbybit.advanced.dimensions.diametralDimension": "skersmens matmuo", + "diametralDimension": "skersmens matmuo", + "bitbybit.advanced.dimensions.diametralDimension_description": "Sukuria skersmens matmenį - matavimo liniją, apimančią visą apskritos formos elementų skersmenį. Rodo '⌀' prefiksą su pasirinktiniu centro žymeniu ir rodyklėmis abiejuose galuose.", + "diametral dimension": "skersmens matmuo", + "bitbybit.advanced.dimensions.ordinateDimension": "ordinatos matmuo", + "ordinateDimension": "ordinatos matmuo", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Sukuria ordinatos matmenį - rodo X, Y arba Z koordinatę nuo atskaitos taško su vedamąja linija. Naudingas koordinačių anotacijoms ir duomenų nuorodoms techniniuose brėžiniuose.", + "ordinate dimension": "ordinatos matmuo", + "measurementPoint": "matavimo taškas", + "referencePoint": "atskaitos taškas", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "rodyti vedamąją liniją" } \ No newline at end of file diff --git a/languages/pt.json b/languages/pt.json index c7bb368b..d354223a 100644 --- a/languages/pt.json +++ b/languages/pt.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "Trocar Tela", "Local Assets": "Ativos Locais", "Import": "Importar", + "Copy to Clipboard": "Copiar para a Área de Transferência", + "Paste from Clipboard": "Colar da Área de Transferência", "Export": "Exportar", "Export to runner": "Exportar para executor", "Clean Cache": "Limpar Cache", @@ -5406,5 +5408,88 @@ "textureSize": "tamanho da textura", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "habilitar textura personalizada do skybox", "enableSkyboxCustomTexture": "habilitar textura personalizada do skybox", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Habilita o skybox com uma textura personalizada" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Habilita o skybox com uma textura personalizada", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "imagem de fundo CSS do canvas", + "canvasCSSBackgroundImage": "imagem de fundo CSS do canvas", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Altera o fundo da cena para uma imagem de fundo CSS para o espaço 3D", + "cssBackgroundImage": "imagem de fundo CSS", + "bitbybit.babylon.scene.twoColorLinearGradient": "gradiente linear de duas cores", + "twoColorLinearGradient": "gradiente linear de duas cores", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Cria um fundo de gradiente linear de duas cores para o espaço 3D", + "colorFrom": "cor de", + "colorTo": "cor para", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "parada de", + "stopTo": "parada para", + "bitbybit.babylon.scene.twoColorRadialGradient": "gradiente radial de duas cores", + "twoColorRadialGradient": "gradiente radial de duas cores", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Cria um fundo de gradiente radial de duas cores para o espaço 3D", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "gradiente linear multicolorido", + "multiColorLinearGradient": "gradiente linear multicolorido", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Cria um fundo de gradiente linear multicolorido para o espaço 3D", + "Base.Color[]": "Base.Color[]", + "stops": "paradas", + "bitbybit.babylon.scene.multiColorRadialGradient": "gradiente radial multicolorido", + "multiColorRadialGradient": "gradiente radial multicolorido", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Cria um fundo de gradiente radial multicolorido para o espaço 3D", + "bitbybit.babylon.scene.canvasBackgroundImage": "imagem de fundo do canvas", + "canvasBackgroundImage": "imagem de fundo do canvas", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Define uma imagem de fundo com várias opções de personalização para o espaço 3D", + "imageUrl": "URL da imagem", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "anexo", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "recorte", + "labelRotation": "rotação da etiqueta", + "bitbybit.advanced.dimensions.linearDimension": "dimensão linear", + "linearDimension": "dimensão linear", + "bitbybit.advanced.dimensions.linearDimension_description": "Cria dimensão linear - uma linha de medição entre dois pontos com linhas de extensão e etiqueta de texto. A dimensão mostra a distância entre os pontos e pode ser estilizada com DimensionStyleDto.", + "linear dimension": "dimensão linear", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "dimensão angular", + "angularDimension": "dimensão angular", + "bitbybit.advanced.dimensions.angularDimension_description": "Cria dimensão angular - um arco de medição entre dois vetores de direção com linhas de extensão e etiqueta de texto. A dimensão mostra o ângulo entre as direções e pode ser estilizada com DimensionStyleDto.", + "angular dimension": "dimensão angular", + "centerPoint": "ponto central", + "bitbybit.advanced.dimensions.dimensionStyle": "estilo de dimensão", + "dimensionStyle": "estilo de dimensão", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Criar estilo de dimensão - usado para estilizar linhas de dimensão, setas e texto no espaço 3D. Você pode personalizar cores de linha, espessura, tamanho do texto, tamanho da seta e cores de fundo.", + "dimension style": "estilo de dimensão", + "lineColor": "cor da linha", + "lineThickness": "espessura da linha", + "extensionLineLength": "comprimento da linha de extensão", + "textBackgroundColor": "cor de fundo do texto", + "textBackgroundOpacity": "opacidade do fundo do texto", + "arrowSize": "tamanho da seta", + "arrowColor": "cor da seta", + "textRenderMode": "modo de renderização do texto", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "billboard de texto", + "occlusionCheckInterval": "intervalo de verificação de oclusão", + "arrowTailLength": "comprimento da cauda da seta", + "showArrows": "mostrar setas", + "labelOverwrite": "sobrescrever etiqueta", + "bitbybit.advanced.dimensions.radialDimension": "dimensão radial", + "radialDimension": "dimensão radial", + "bitbybit.advanced.dimensions.radialDimension_description": "Cria dimensão radial - uma linha de medição do centro ao perímetro mostrando raio ou diâmetro. Mostra prefixo 'R' para raio ou prefixo '⌀' para diâmetro com marca central opcional.", + "radial dimension": "dimensão radial", + "radiusPoint": "ponto do raio", + "showDiameter": "mostrar diâmetro", + "showCenterMark": "mostrar marca central", + "bitbybit.advanced.dimensions.diametralDimension": "dimensão diametral", + "diametralDimension": "dimensão diametral", + "bitbybit.advanced.dimensions.diametralDimension_description": "Cria dimensão diametral - uma linha de medição que abrange o diâmetro completo de características circulares. Mostra prefixo '⌀' com marca central opcional e setas em ambas as extremidades.", + "diametral dimension": "dimensão diametral", + "bitbybit.advanced.dimensions.ordinateDimension": "dimensão de ordenada", + "ordinateDimension": "dimensão de ordenada", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Cria dimensão de ordenada - mostra coordenada X, Y ou Z de um ponto de referência com linha de chamada. Útil para anotações de coordenadas e referenciamento de dados em desenhos técnicos.", + "ordinate dimension": "dimensão de ordenada", + "measurementPoint": "ponto de medição", + "referencePoint": "ponto de referência", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "mostrar linha de chamada" } \ No newline at end of file diff --git a/languages/ru.json b/languages/ru.json index 857f6174..81bfa3e3 100644 --- a/languages/ru.json +++ b/languages/ru.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "Сменить холст", "Local Assets": "Локальные ресурсы", "Import": "Импорт", + "Copy to Clipboard": "Копировать в буфер обмена", + "Paste from Clipboard": "Вставить из буфера обмена", "Export": "Экспорт", "Export to runner": "Экспорт в Runner", "Clean Cache": "Очистить кэш", @@ -5406,5 +5408,88 @@ "textureSize": "размер текстуры", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "включить пользовательскую текстуру для скайбокса", "enableSkyboxCustomTexture": "включить пользовательскую текстуру для скайбокса", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Включает скайбокс с пользовательской текстурой" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Включает скайбокс с пользовательской текстурой", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "CSS фоновое изображение холста", + "canvasCSSBackgroundImage": "CSS фоновое изображение холста", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Изменяет фон сцены на CSS фоновое изображение для 3D пространства", + "cssBackgroundImage": "CSS фоновое изображение", + "bitbybit.babylon.scene.twoColorLinearGradient": "двухцветный линейный градиент", + "twoColorLinearGradient": "двухцветный линейный градиент", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Создает двухцветный линейный градиентный фон для 3D пространства", + "colorFrom": "цвет от", + "colorTo": "цвет до", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "остановка от", + "stopTo": "остановка до", + "bitbybit.babylon.scene.twoColorRadialGradient": "двухцветный радиальный градиент", + "twoColorRadialGradient": "двухцветный радиальный градиент", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Создает двухцветный радиальный градиентный фон для 3D пространства", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "многоцветный линейный градиент", + "multiColorLinearGradient": "многоцветный линейный градиент", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Создает многоцветный линейный градиентный фон для 3D пространства", + "Base.Color[]": "Base.Color[]", + "stops": "остановки", + "bitbybit.babylon.scene.multiColorRadialGradient": "многоцветный радиальный градиент", + "multiColorRadialGradient": "многоцветный радиальный градиент", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Создает многоцветный радиальный градиентный фон для 3D пространства", + "bitbybit.babylon.scene.canvasBackgroundImage": "фоновое изображение холста", + "canvasBackgroundImage": "фоновое изображение холста", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Устанавливает фоновое изображение с различными опциями настройки для 3D пространства", + "imageUrl": "URL изображения", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "вложение", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "обрезка", + "labelRotation": "поворот метки", + "bitbybit.advanced.dimensions.linearDimension": "линейный размер", + "linearDimension": "линейный размер", + "bitbybit.advanced.dimensions.linearDimension_description": "Создает линейный размер - измерительную линию между двумя точками с выносными линиями и текстовой меткой. Размер показывает расстояние между точками и может быть стилизован с помощью DimensionStyleDto.", + "linear dimension": "линейный размер", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "угловой размер", + "angularDimension": "угловой размер", + "bitbybit.advanced.dimensions.angularDimension_description": "Создает угловой размер - измерительную дугу между двумя векторами направления с выносными линиями и текстовой меткой. Размер показывает угол между направлениями и может быть стилизован с помощью DimensionStyleDto.", + "angular dimension": "угловой размер", + "centerPoint": "центральная точка", + "bitbybit.advanced.dimensions.dimensionStyle": "стиль размера", + "dimensionStyle": "стиль размера", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Создать стиль размера - используется для стилизации размерных линий, стрелок и текста в 3D пространстве. Вы можете настроить цвета линий, толщину, размер текста, размер стрелок и цвета фона.", + "dimension style": "стиль размера", + "lineColor": "цвет линии", + "lineThickness": "толщина линии", + "extensionLineLength": "длина выносной линии", + "textBackgroundColor": "цвет фона текста", + "textBackgroundOpacity": "прозрачность фона текста", + "arrowSize": "размер стрелки", + "arrowColor": "цвет стрелки", + "textRenderMode": "режим рендеринга текста", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "текстовый щит", + "occlusionCheckInterval": "интервал проверки окклюзии", + "arrowTailLength": "длина хвоста стрелки", + "showArrows": "показать стрелки", + "labelOverwrite": "перезаписать метку", + "bitbybit.advanced.dimensions.radialDimension": "радиальный размер", + "radialDimension": "радиальный размер", + "bitbybit.advanced.dimensions.radialDimension_description": "Создает радиальный размер - измерительную линию от центра к периметру, показывающую радиус или диаметр. Показывает префикс 'R' для радиуса или префикс '⌀' для диаметра с дополнительной центральной меткой.", + "radial dimension": "радиальный размер", + "radiusPoint": "точка радиуса", + "showDiameter": "показать диаметр", + "showCenterMark": "показать центральную метку", + "bitbybit.advanced.dimensions.diametralDimension": "диаметральный размер", + "diametralDimension": "диаметральный размер", + "bitbybit.advanced.dimensions.diametralDimension_description": "Создает диаметральный размер - измерительную линию, охватывающую полный диаметр круглых элементов. Показывает префикс '⌀' с дополнительной центральной меткой и стрелками на обоих концах.", + "diametral dimension": "диаметральный размер", + "bitbybit.advanced.dimensions.ordinateDimension": "ординатный размер", + "ordinateDimension": "ординатный размер", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Создает ординатный размер - показывает координату X, Y или Z от опорной точки с выносной линией. Полезно для аннотаций координат и ссылок на базы в технических чертежах.", + "ordinate dimension": "ординатный размер", + "measurementPoint": "точка измерения", + "referencePoint": "опорная точка", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "показать выносную линию" } \ No newline at end of file diff --git a/languages/uk.json b/languages/uk.json index 5679b556..5b5e7fdd 100644 --- a/languages/uk.json +++ b/languages/uk.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "Обміняти полотно", "Local Assets": "Локальні ресурси", "Import": "Імпорт", + "Copy to Clipboard": "Копіювати в буфер обміну", + "Paste from Clipboard": "Вставити з буфера обміну", "Export": "Експорт", "Export to runner": "Експорт у виконавець", "Clean Cache": "Очистити кеш", @@ -5406,5 +5408,88 @@ "textureSize": "розмір текстури", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "увімкнути власну текстуру скайбоксу", "enableSkyboxCustomTexture": "увімкнути власну текстуру скайбоксу", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Вмикає скайбокс із власною текстурою" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "Вмикає скайбокс із власною текстурою", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "CSS фонове зображення полотна", + "canvasCSSBackgroundImage": "CSS фонове зображення полотна", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "Змінює фон сцени на CSS фонове зображення для 3D простору", + "cssBackgroundImage": "CSS фонове зображення", + "bitbybit.babylon.scene.twoColorLinearGradient": "двокольоровий лінійний градієнт", + "twoColorLinearGradient": "двокольоровий лінійний градієнт", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "Створює двокольоровий лінійний градієнтний фон для 3D простору", + "colorFrom": "колір від", + "colorTo": "колір до", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "зупинка від", + "stopTo": "зупинка до", + "bitbybit.babylon.scene.twoColorRadialGradient": "двокольоровий радіальний градієнт", + "twoColorRadialGradient": "двокольоровий радіальний градієнт", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "Створює двокольоровий радіальний градієнтний фон для 3D простору", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "багатокольоровий лінійний градієнт", + "multiColorLinearGradient": "багатокольоровий лінійний градієнт", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "Створює багатокольоровий лінійний градієнтний фон для 3D простору", + "Base.Color[]": "Base.Color[]", + "stops": "зупинки", + "bitbybit.babylon.scene.multiColorRadialGradient": "багатокольоровий радіальний градієнт", + "multiColorRadialGradient": "багатокольоровий радіальний градієнт", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "Створює багатокольоровий радіальний градієнтний фон для 3D простору", + "bitbybit.babylon.scene.canvasBackgroundImage": "фонове зображення полотна", + "canvasBackgroundImage": "фонове зображення полотна", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "Встановлює фонове зображення з різноманітними опціями налаштування для 3D простору", + "imageUrl": "URL зображення", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "прикріплення", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "обрізка", + "labelRotation": "поворот мітки", + "bitbybit.advanced.dimensions.linearDimension": "лінійний розмір", + "linearDimension": "лінійний розмір", + "bitbybit.advanced.dimensions.linearDimension_description": "Створює лінійний розмір - вимірювальну лінію між двома точками з выносними лініями та текстовою міткою. Розмір показує відстань між точками і може бути стилізований з DimensionStyleDto.", + "linear dimension": "лінійний розмір", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "кутовий розмір", + "angularDimension": "кутовий розмір", + "bitbybit.advanced.dimensions.angularDimension_description": "Створює кутовий розмір - вимірювальну дугу між двома векторами напрямку з выносними лініями та текстовою міткою. Розмір показує кут між напрямками і може бути стилізований з DimensionStyleDto.", + "angular dimension": "кутовий розмір", + "centerPoint": "центральна точка", + "bitbybit.advanced.dimensions.dimensionStyle": "стиль розміру", + "dimensionStyle": "стиль розміру", + "bitbybit.advanced.dimensions.dimensionStyle_description": "Створити стиль розміру - використовується для стилізації розмірних ліній, стрілок і тексту в 3D просторі. Ви можете налаштувати кольори ліній, товщину, розмір тексту, розмір стрілок і кольори фону.", + "dimension style": "стиль розміру", + "lineColor": "колір лінії", + "lineThickness": "товщина лінії", + "extensionLineLength": "довжина выносної лінії", + "textBackgroundColor": "колір фону тексту", + "textBackgroundOpacity": "прозорість фону тексту", + "arrowSize": "розмір стрілки", + "arrowColor": "колір стрілки", + "textRenderMode": "режим рендерингу тексту", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "текстовий щит", + "occlusionCheckInterval": "інтервал перевірки оклюзії", + "arrowTailLength": "довжина хвоста стрілки", + "showArrows": "показати стрілки", + "labelOverwrite": "переписати мітку", + "bitbybit.advanced.dimensions.radialDimension": "радіальний розмір", + "radialDimension": "радіальний розмір", + "bitbybit.advanced.dimensions.radialDimension_description": "Створює радіальний розмір - вимірювальну лінію від центру до периметра, що показує радіус або діаметр. Показує префікс 'R' для радіуса або префікс '⌀' для діаметра з опціональною центральною міткою.", + "radial dimension": "радіальний розмір", + "radiusPoint": "точка радіуса", + "showDiameter": "показати діаметр", + "showCenterMark": "показати центральну мітку", + "bitbybit.advanced.dimensions.diametralDimension": "діаметральний розмір", + "diametralDimension": "діаметральний розмір", + "bitbybit.advanced.dimensions.diametralDimension_description": "Створює діаметральний розмір - вимірювальну лінію, що охоплює повний діаметр круглих елементів. Показує префікс '⌀' з опціональною центральною міткою і стрілками на обох кінцях.", + "diametral dimension": "діаметральний розмір", + "bitbybit.advanced.dimensions.ordinateDimension": "ординатний розмір", + "ordinateDimension": "ординатний розмір", + "bitbybit.advanced.dimensions.ordinateDimension_description": "Створює ординатний розмір - показує координату X, Y або Z від опорної точки з выносною лінією. Корисно для анотацій координат і посилань на бази в технічних кресленнях.", + "ordinate dimension": "ординатний розмір", + "measurementPoint": "точка вимірювання", + "referencePoint": "опорна точка", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "показати выносну лінію" } \ No newline at end of file diff --git a/languages/zh-hans.json b/languages/zh-hans.json index 8e46c6f0..1179c2c9 100644 --- a/languages/zh-hans.json +++ b/languages/zh-hans.json @@ -4918,6 +4918,8 @@ "Swap Canvas": "切换画布", "Local Assets": "本地资产", "Import": "导入", + "Copy to Clipboard": "复制到剪贴板", + "Paste from Clipboard": "从剪贴板粘贴", "Export": "导出", "Export to runner": "导出到运行器", "Clean Cache": "清理缓存", @@ -5406,5 +5408,88 @@ "textureSize": "纹理大小", "bitbybit.babylon.scene.enableSkyboxCustomTexture": "启用天空盒自定义纹理", "enableSkyboxCustomTexture": "启用天空盒自定义纹理", - "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "启用带有自定义纹理的天空盒" + "bitbybit.babylon.scene.enableSkyboxCustomTexture_description": "启用带有自定义纹理的天空盒", + "bitbybit.babylon.scene.canvasCSSBackgroundImage": "画布CSS背景图像", + "canvasCSSBackgroundImage": "画布CSS背景图像", + "bitbybit.babylon.scene.canvasCSSBackgroundImage_description": "将场景背景更改为3D空间的CSS背景图像", + "cssBackgroundImage": "CSS背景图像", + "bitbybit.babylon.scene.twoColorLinearGradient": "双色线性渐变", + "twoColorLinearGradient": "双色线性渐变", + "bitbybit.babylon.scene.twoColorLinearGradient_description": "为3D空间创建双色线性渐变背景", + "colorFrom": "起始颜色", + "colorTo": "结束颜色", + "Base.gradientDirectionEnum": "Base.gradientDirectionEnum", + "stopFrom": "起始停止点", + "stopTo": "结束停止点", + "bitbybit.babylon.scene.twoColorRadialGradient": "双色径向渐变", + "twoColorRadialGradient": "双色径向渐变", + "bitbybit.babylon.scene.twoColorRadialGradient_description": "为3D空间创建双色径向渐变背景", + "Base.gradientPositionEnum": "Base.gradientPositionEnum", + "Base.gradientShapeEnum": "Base.gradientShapeEnum", + "bitbybit.babylon.scene.multiColorLinearGradient": "多色线性渐变", + "multiColorLinearGradient": "多色线性渐变", + "bitbybit.babylon.scene.multiColorLinearGradient_description": "为3D空间创建多色线性渐变背景", + "Base.Color[]": "Base.Color[]", + "stops": "停止点", + "bitbybit.babylon.scene.multiColorRadialGradient": "多色径向渐变", + "multiColorRadialGradient": "多色径向渐变", + "bitbybit.babylon.scene.multiColorRadialGradient_description": "为3D空间创建多色径向渐变背景", + "bitbybit.babylon.scene.canvasBackgroundImage": "画布背景图像", + "canvasBackgroundImage": "画布背景图像", + "bitbybit.babylon.scene.canvasBackgroundImage_description": "为3D空间设置具有各种自定义选项的背景图像", + "imageUrl": "图像URL", + "Base.backgroundRepeatEnum": "Base.backgroundRepeatEnum", + "Base.backgroundSizeEnum": "Base.backgroundSizeEnum", + "attachment": "附件", + "Base.backgroundAttachmentEnum": "Base.backgroundAttachmentEnum", + "Base.backgroundOriginClipEnum": "Base.backgroundOriginClipEnum", + "clip": "裁剪", + "labelRotation": "标签旋转", + "bitbybit.advanced.dimensions.linearDimension": "线性尺寸", + "linearDimension": "线性尺寸", + "bitbybit.advanced.dimensions.linearDimension_description": "创建线性尺寸 - 两点之间带有延伸线和文本标签的测量线。尺寸显示点之间的距离,可以使用DimensionStyleDto进行样式设置。", + "linear dimension": "线性尺寸", + "DimensionStyleDto": "DimensionStyleDto", + "bitbybit.advanced.dimensions.angularDimension": "角度尺寸", + "angularDimension": "角度尺寸", + "bitbybit.advanced.dimensions.angularDimension_description": "创建角度尺寸 - 两个方向向量之间带有延伸线和文本标签的测量弧。尺寸显示方向之间的角度,可以使用DimensionStyleDto进行样式设置。", + "angular dimension": "角度尺寸", + "centerPoint": "中心点", + "bitbybit.advanced.dimensions.dimensionStyle": "尺寸样式", + "dimensionStyle": "尺寸样式", + "bitbybit.advanced.dimensions.dimensionStyle_description": "创建尺寸样式 - 用于在3D空间中设置尺寸线、箭头和文本的样式。您可以自定义线条颜色、厚度、文本大小、箭头大小和背景颜色。", + "dimension style": "尺寸样式", + "lineColor": "线条颜色", + "lineThickness": "线条厚度", + "extensionLineLength": "延伸线长度", + "textBackgroundColor": "文本背景颜色", + "textBackgroundOpacity": "文本背景不透明度", + "arrowSize": "箭头大小", + "arrowColor": "箭头颜色", + "textRenderMode": "文本渲染模式", + "textRenderModeEnum": "textRenderModeEnum", + "textBillboard": "文本广告牌", + "occlusionCheckInterval": "遮挡检查间隔", + "arrowTailLength": "箭头尾长度", + "showArrows": "显示箭头", + "labelOverwrite": "标签覆盖", + "bitbybit.advanced.dimensions.radialDimension": "径向尺寸", + "radialDimension": "径向尺寸", + "bitbybit.advanced.dimensions.radialDimension_description": "创建径向尺寸 - 从中心到周边显示半径或直径的测量线。显示半径的'R'前缀或直径的'⌀'前缀,可选中心标记。", + "radial dimension": "径向尺寸", + "radiusPoint": "半径点", + "showDiameter": "显示直径", + "showCenterMark": "显示中心标记", + "bitbybit.advanced.dimensions.diametralDimension": "直径尺寸", + "diametralDimension": "直径尺寸", + "bitbybit.advanced.dimensions.diametralDimension_description": "创建直径尺寸 - 跨越圆形特征完整直径的测量线。显示'⌀'前缀,可选中心标记和两端箭头。", + "diametral dimension": "直径尺寸", + "bitbybit.advanced.dimensions.ordinateDimension": "坐标尺寸", + "ordinateDimension": "坐标尺寸", + "bitbybit.advanced.dimensions.ordinateDimension_description": "创建坐标尺寸 - 显示从参考点带引线的X、Y或Z坐标。在技术图纸中用于坐标注释和基准参考。", + "ordinate dimension": "坐标尺寸", + "measurementPoint": "测量点", + "referencePoint": "参考点", + "ordinateAxisEnum": "ordinateAxisEnum", + "showLeaderLine": "显示引线" } \ No newline at end of file From b72c8ae5abf29ffacfb8a6cab806f7b1499f80bd Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Wed, 1 Oct 2025 11:24:59 +0300 Subject: [PATCH 09/10] threejs and babylonjs updates --- docs/learn/runners/intro.mdx | 4 ++-- examples/runner/threejs/lite/external-scene/index.html | 4 ++-- examples/runner/threejs/lite/simple/index.html | 4 ++-- examples/runner/threejs/lite/threejs-logo/index.html | 4 ++-- packages/dev/babylonjs/package.json | 10 +++++----- packages/dev/threejs/package.json | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/learn/runners/intro.mdx b/docs/learn/runners/intro.mdx index c2d0170c..887c3f97 100644 --- a/docs/learn/runners/intro.mdx +++ b/docs/learn/runners/intro.mdx @@ -587,8 +587,8 @@ function hideSpinner() { diff --git a/examples/runner/threejs/lite/external-scene/index.html b/examples/runner/threejs/lite/external-scene/index.html index f63a2b56..716aea9b 100644 --- a/examples/runner/threejs/lite/external-scene/index.html +++ b/examples/runner/threejs/lite/external-scene/index.html @@ -13,8 +13,8 @@ diff --git a/examples/runner/threejs/lite/simple/index.html b/examples/runner/threejs/lite/simple/index.html index 0cc60847..a09a6b1a 100644 --- a/examples/runner/threejs/lite/simple/index.html +++ b/examples/runner/threejs/lite/simple/index.html @@ -13,8 +13,8 @@ diff --git a/examples/runner/threejs/lite/threejs-logo/index.html b/examples/runner/threejs/lite/threejs-logo/index.html index a97cc472..3b25a88f 100644 --- a/examples/runner/threejs/lite/threejs-logo/index.html +++ b/examples/runner/threejs/lite/threejs-logo/index.html @@ -27,8 +27,8 @@ diff --git a/packages/dev/babylonjs/package.json b/packages/dev/babylonjs/package.json index 1c362c31..06d2e791 100644 --- a/packages/dev/babylonjs/package.json +++ b/packages/dev/babylonjs/package.json @@ -54,11 +54,11 @@ "types": "./index.d.ts", "type": "module", "dependencies": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", "@babylonjs/havok": "1.3.10", "@bitbybit-dev/core": "0.20.6", "earcut": "2.2.3" diff --git a/packages/dev/threejs/package.json b/packages/dev/threejs/package.json index e5d9251a..59047ff0 100644 --- a/packages/dev/threejs/package.json +++ b/packages/dev/threejs/package.json @@ -54,7 +54,7 @@ "types": "./index.d.ts", "type": "module", "dependencies": { - "three": "0.179.1", + "three": "0.180.0", "@bitbybit-dev/core": "0.20.6" }, "devDependencies": { From 12eeb1703c47c67bf60190c96433fbd399eae408 Mon Sep 17 00:00:00 2001 From: Matas Ubarevicius Date: Wed, 1 Oct 2025 12:32:26 +0300 Subject: [PATCH 10/10] v0.20.7 --- .../2024-11-08-updated-bitbybit-runners.md | 2 +- .../theme-app-extensions/bitbybit-viewer.md | 2 +- .../tutorials/product-customizable-text.mdx | 2 +- .../tutorials/product-laptop-holder.mdx | 2 +- .../3d-bits/tutorials/product-palm-table.mdx | 2 +- .../common/base/color/color-usage-examples.md | 6 +- .../base/point/point-hex-grid-example.md | 6 +- .../base/point/point-spiral-examples.md | 6 +- .../common/base/text/text-usage-examples.md | 6 +- .../base/vector/vector-usage-examples.md | 6 +- docs/learn/code/common/draw/examples.mdx | 6 +- .../code/common/occt/booleans/operations.mdx | 18 +- .../occt/fillets/chamfer-circular-edges.mdx | 6 +- .../common/occt/fillets/chamfers-intro.mdx | 6 +- .../chamfers-var-radius-on-spec-edges.mdx | 6 +- .../common/occt/fillets/fillet-3d-wires.mdx | 6 +- .../common/occt/fillets/fillets-intro.mdx | 6 +- .../fillets/fillets-on-2d-wire-corners.mdx | 6 +- .../occt/fillets/fillets-on-2d-wires.mdx | 6 +- .../fillets-var-radius-on-spec-edges.mdx | 6 +- .../common/occt/operations/advanced-loft.md | 6 +- .../code/common/occt/operations/extrusions.md | 12 +- .../occt/operations/offset-operations.md | 24 +- .../occt/operations/rotated-extrusions.md | 12 +- .../common/occt/operations/simple-loft.md | 6 +- .../common/occt/operations/thick-solids.md | 6 +- .../occt/operations/wire-offset-multiple.md | 6 +- .../common/occt/shapes/edge/edge-indexes.mdx | 6 +- .../basics/assets/local/gltf.mdx | 6 +- .../basics/assets/local/step.mdx | 6 +- .../getting-started/blockly/hello-world.mdx | 4 +- .../blockly/parametric-cube.mdx | 2 +- .../getting-started/rete/hello-world.mdx | 6 +- .../getting-started/rete/parametric-cube.mdx | 4 +- .../typescript/hello-world.mdx | 4 +- .../typescript/how-to-code-in-monaco.md | 2 +- .../typescript/parametric-cube.mdx | 2 +- docs/learn/runners/intro-blockly.mdx | 4 +- docs/learn/runners/intro-rete.mdx | 2 +- docs/learn/runners/intro-typescript.mdx | 2 +- .../live-examples/configurable-cad-part.mdx | 2 +- .../live-examples/static-3d-model-script.mdx | 2 +- .../runners/table-configurator-blockly.mdx | 4 +- .../learn/runners/table-configurator-rete.mdx | 2 +- .../runners/table-configurator-typescript.mdx | 2 +- .../babylonjs/laptop-holder/package-lock.json | 244 +++++++------- .../babylonjs/laptop-holder/package.json | 2 +- .../angular/threejs/simple/package-lock.json | 306 +++++++++--------- examples/angular/threejs/simple/package.json | 2 +- .../vite-basic-example/package-lock.json | 84 ++--- .../threejs/vite-basic-example/package.json | 2 +- .../src/workers/manifold.worker.ts | 2 +- .../nextjs/babylonjs/simple/package-lock.json | 122 +++---- examples/nextjs/babylonjs/simple/package.json | 2 +- examples/node/basic/package-lock.json | 16 +- examples/node/basic/package.json | 2 +- examples/node/express-app/package-lock.json | 139 ++++---- examples/node/express-app/package.json | 2 +- .../nuxt/babylonjs/basic/package-lock.json | 122 +++---- examples/nuxt/babylonjs/basic/package.json | 2 +- .../react/babylonjs/cup/package-lock.json | 244 +++++++------- examples/react/babylonjs/cup/package.json | 2 +- .../babylonjs/laptop-holder/package-lock.json | 244 +++++++------- .../babylonjs/laptop-holder/package.json | 2 +- examples/react/threejs/vase/package-lock.json | 85 ++--- examples/react/threejs/vase/package.json | 2 +- .../babylon/full/inline-include/index.html | 2 +- .../threejs/full/inline-include/index.html | 2 +- .../hex-house-concept/package-lock.json | 242 +++++++------- .../babylonjs/hex-house-concept/package.json | 2 +- .../src/workers/manifold.worker.ts | 2 +- .../babylonjs/hex-shell/package-lock.json | 242 +++++++------- .../vite/babylonjs/hex-shell/package.json | 2 +- .../hex-shell/src/workers/manifold.worker.ts | 2 +- .../starter-template/package-lock.json | 242 +++++++------- .../babylonjs/starter-template/package.json | 2 +- .../src/workers/manifold.worker.ts | 2 +- examples/vite/threejs/cup/package-lock.json | 85 ++--- examples/vite/threejs/cup/package.json | 2 +- .../cup/src/workers/manifold.worker.ts | 2 +- .../hex-house-concept/package-lock.json | 167 +++++----- .../threejs/hex-house-concept/package.json | 2 +- .../src/workers/manifold.worker.ts | 2 +- .../vite/threejs/hex-shell/package-lock.json | 167 +++++----- examples/vite/threejs/hex-shell/package.json | 2 +- .../hex-shell/src/workers/manifold.worker.ts | 2 +- .../starter-template/package-lock.json | 167 +++++----- .../threejs/starter-template/package.json | 2 +- .../src/workers/manifold.worker.ts | 2 +- examples/webpack/threejs/package-lock.json | 85 ++--- examples/webpack/threejs/package.json | 2 +- .../threejs/src/html/cup-three/index.html | 2 +- .../threejs/src/html/homepage/index.html | 2 +- .../src/html/manifold-sliced-mesh/index.html | 2 +- .../threejs/src/html/patterns/index.html | 2 +- examples/webpack/threejs/webpack.config.js | 2 +- package.json | 2 +- .../lib/api/bitbybit/babylon/scene.ts | 8 +- packages/dev/babylonjs/package-lock.json | 210 ++++++------ packages/dev/babylonjs/package.json | 4 +- packages/dev/base/package-lock.json | 4 +- packages/dev/base/package.json | 2 +- packages/dev/core/package-lock.json | 116 +++---- packages/dev/core/package.json | 10 +- packages/dev/jscad-worker/package-lock.json | 34 +- packages/dev/jscad-worker/package.json | 4 +- packages/dev/jscad/package-lock.json | 18 +- packages/dev/jscad/package.json | 4 +- .../dev/manifold-worker/package-lock.json | 18 +- packages/dev/manifold-worker/package.json | 4 +- packages/dev/manifold/package-lock.json | 4 +- packages/dev/manifold/package.json | 2 +- packages/dev/occt-worker/package-lock.json | 34 +- packages/dev/occt-worker/package.json | 4 +- packages/dev/occt/bitbybit-dev-occt/cdn.js | 2 +- packages/dev/occt/package-lock.json | 18 +- packages/dev/occt/package.json | 4 +- packages/dev/threejs/package-lock.json | 155 ++++----- packages/dev/threejs/package.json | 4 +- 119 files changed, 2003 insertions(+), 1977 deletions(-) diff --git a/docs/blog/2024-11-08-updated-bitbybit-runners.md b/docs/blog/2024-11-08-updated-bitbybit-runners.md index 49d15384..01883110 100644 --- a/docs/blog/2024-11-08-updated-bitbybit-runners.md +++ b/docs/blog/2024-11-08-updated-bitbybit-runners.md @@ -121,7 +121,7 @@ We are serving the Bitbybit Runners from the **JSDelivr CDN**. You can include t ``` -**Note:** You should replace `` with an actual version number (e.g., `0.20.6`). You can find all the official versions of Bitbybit.dev here: +**Note:** You should replace `` with an actual version number (e.g., `0.20.7`). You can find all the official versions of Bitbybit.dev here: ➡️ **[Bitbybit.dev GitHub Releases](https://github.com/bitbybit-dev/bitbybit/releases)** ### Examples of the Runners diff --git a/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md b/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md index 6d4b4e02..4e5c7d60 100644 --- a/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md +++ b/docs/learn/3d-bits/theme-app-extensions/bitbybit-viewer.md @@ -110,7 +110,7 @@ Save your JSON configurator as a file, upload it to Shopify CDN as a file. Copy While our Viewer Editor is the recommended way to create and manage the Scene Config JSON, you can also edit the JSON directly using any text editor. For a better editing experience with features like syntax highlighting and autocompletion (intellisense), we provide a JSON schema. -* **JSON Schema:** You can find the schema [here](https://ik.imagekit.io/bitbybit/app/assets/start/shopify/viewer-scene-config-schema-0-20-6.json). (Note: This schema link points to version `0.20.6`. The schema may be updated in the future, so ensure you refer to the latest version compatible with your "3D Bits" app version.) +* **JSON Schema:** You can find the schema [here](https://ik.imagekit.io/bitbybit/app/assets/start/shopify/viewer-scene-config-schema-0-20-6.json). (Note: This schema link points to version `0.20.7`. The schema may be updated in the future, so ensure you refer to the latest version compatible with your "3D Bits" app version.) Many modern code editors (like VS Code) can use this schema to provide validation and autocompletion as you edit the JSON. ## Video Tutorial: BITBYBIT VIEWER Block Setup diff --git a/docs/learn/3d-bits/tutorials/product-customizable-text.mdx b/docs/learn/3d-bits/tutorials/product-customizable-text.mdx index 74144c65..2558dcf3 100644 --- a/docs/learn/3d-bits/tutorials/product-customizable-text.mdx +++ b/docs/learn/3d-bits/tutorials/product-customizable-text.mdx @@ -153,7 +153,7 @@ To save you time, here is the embedded Bitbybit Rete script used in this tutoria diff --git a/docs/learn/3d-bits/tutorials/product-laptop-holder.mdx b/docs/learn/3d-bits/tutorials/product-laptop-holder.mdx index e7535bd4..abb27661 100644 --- a/docs/learn/3d-bits/tutorials/product-laptop-holder.mdx +++ b/docs/learn/3d-bits/tutorials/product-laptop-holder.mdx @@ -63,7 +63,7 @@ To save you time and provide a starting point, here is the embedded Bitbybit Typ {\n\n laptops.forEach(laptop => {\n laptop.center = [0, laptop.height / 2 + laptopLiftedHeight, 0] as Bit.Inputs.Base.Point3;\n });\n\n let laptopFillets = [];\n let totalDistance = 0;\n let previousLaptopLength = 0;\n\n laptops.forEach(async (laptop, index) => {\n totalDistance += distanceBetweenLaptops + laptop.length / 2 + previousLaptopLength / 2;\n previousLaptopLength = laptop.length;\n laptop.center[2] = totalDistance;\n const laptopBaseModel = await bitbybit.occt.shapes.solid.createBox({\n width: laptop.width,\n length: laptop.length,\n height: laptop.height,\n center: laptop.center\n });\n const laptopFillet = await bitbybit.occt.fillets.filletEdges({ shape: laptopBaseModel, indexes: undefined, radius: 0.2 });\n laptopFillets.push(laptopFillet);\n\n const laptopVisModel = await bitbybit.occt.shapes.solid.createBox({\n width: laptop.width,\n length: laptop.length - 0.01,\n height: laptop.height,\n center: laptop.center\n });\n const laptopVisFillet = await bitbybit.occt.fillets.filletEdges({ shape: laptopVisModel, indexes: undefined, radius: 0.2 });\n laptopFillets.push(laptopFillet);\n\n const di = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n\n di.faceOpacity = 0.2;\n di.edgeWidth = 5;\n di.edgeOpacity = 0.6;\n di.edgeColour = whiteColor;\n di.faceColour = whiteColor;\n const laptopFilletMesh = await bitbybit.draw.drawAnyAsync({ entity: laptopVisFillet, options: di });\n laptopsFilletsMesh.push(laptopFilletMesh);\n })\n\n const polygonWire = await bitbybit.occt.shapes.wire.createPolygonWire({\n points: controlPoints\n });\n const extrusion = await bitbybit.occt.operations.extrude({\n shape: polygonWire, direction: [0, 0, totalDistance += distanceBetweenLaptops + previousLaptopLength / 2]\n });\n const laptopStandFillet = await bitbybit.occt.fillets.filletEdges({ shape: extrusion, indexes: undefined, radius: 1 });\n const laptopStandThick = await bitbybit.occt.operations.makeThickSolidSimple({ shape: laptopStandFillet, offset: -0.5 });\n\n laptopStand = await bitbybit.occt.booleans.difference({ shape: laptopStandThick, shapes: laptopFillets, keepEdges: false });\n const li = new Bit.Inputs.OCCT.DrawShapeDto(laptopStand);\n li.faceOpacity = 1;\n if (flipColor) {\n li.faceColour = \"#0000ff\";\n li.edgeColour = whiteColor;\n } else {\n li.faceColour = holderColor;\n li.edgeColour = whiteColor;\n }\n li.edgeWidth = 5;\n laptopStandMesh = await bitbybit.draw.drawAnyAsync({ entity: laptopStand, options: li });\n const laptopsMeshes = await Promise.all(laptopsFilletsMesh);\n return [laptopStandMesh, ...laptopsMeshes];\n }\n\n const meshes = await renderLaptops(laptops);\n return { meshes };\n}\n\nclass Laptop {\n width: number;\n length: number;\n height: number;\n center?: Bit.Inputs.Base.Point3;\n}\n\nBit.setBitbybitRunnerResult(start());","version":"0.20.6","type":"typescript"}} + script={{"script":"Bit.mockBitbybitRunnerInputs({\n \"Laptop Type\": \"MacBook Pro 16\",\n \"Number Laptops\": \"3\",\n \"Color\": \"Black\",\n});\nconst inputs = Bit.getBitbybitRunnerInputs();\n\nconst laptops: Laptop[] = []\n\nlet laptop: Laptop;\n\nswitch (inputs[\"Laptop Type\"]) {\n case \"MacBook Pro 16\":\n laptop = {\n length: 1.63,\n width: 35.8,\n height: 24.6\n };\n break;\n case \"MacBook Pro 14\":\n laptop = {\n length: 1.57,\n width: 31.3,\n height: 22.2\n }\n break;\n case \"MacBook Air\":\n laptop = {\n length: 1.2,\n width: 30.5,\n height: 21.6\n }\n break;\n default:\n break;\n}\n\nlet flipColor = false;\nswitch (inputs[\"Color\"]) {\n case \"Blue\":\n flipColor = true;\n break;\n default:\n break;\n}\n\nconsole.log(\"laptop \", laptop);\n\nconst nrLaptops = +inputs[\"Number Laptops\"];\n\nfor (let i = 0; i < nrLaptops; i++) {\n laptops.push({ ...laptop });\n}\n\nconst whiteColor = \"#ffffff\";\nconst holderColor = \"#333333\";\n\nconst laptopLiftedHeight = 3;\nconst distanceBetweenLaptops = 1.7;\nconst exportSTEP = false;\n\nbitbybit.babylon.scene.backgroundColour({ colour: \"#bbbbbb\" });\n\nconst pointLightConf = new Bit.Inputs.BabylonScene.PointLightDto();\npointLightConf.position = [-15, 20, -5];\npointLightConf.intensity = 8000;\npointLightConf.diffuse = \"#3333ff\";\npointLightConf.radius = 0;\nbitbybit.babylon.scene.drawPointLight(pointLightConf);\n\nconst controlPoints = [\n [-12.5, 0, 0],\n [-8, 13, 0],\n [-4, 11, 0],\n [-2, 6, 0],\n [2, 6, 0],\n [4, 14, 0],\n [8, 17, 0],\n [12.5, 0, 0]\n] as Bit.Inputs.Base.Point3[];\n\nlet laptopStand;\nlet laptopStandMesh;\n\nconst laptopsFilletsMesh = [];\n\nasync function start() {\n const ground = await bitbybit.occt.shapes.face.createCircleFace({ center: [0, 0, 0], direction: [0, 1, 0], radius: 75, });\n const groundOptions = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n groundOptions.faceColour = whiteColor;\n groundOptions.drawEdges = false;\n await bitbybit.draw.drawAnyAsync({ entity: ground, options: groundOptions });\n\n const renderLaptops = async (laptops) => {\n\n laptops.forEach(laptop => {\n laptop.center = [0, laptop.height / 2 + laptopLiftedHeight, 0] as Bit.Inputs.Base.Point3;\n });\n\n let laptopFillets = [];\n let totalDistance = 0;\n let previousLaptopLength = 0;\n\n laptops.forEach(async (laptop, index) => {\n totalDistance += distanceBetweenLaptops + laptop.length / 2 + previousLaptopLength / 2;\n previousLaptopLength = laptop.length;\n laptop.center[2] = totalDistance;\n const laptopBaseModel = await bitbybit.occt.shapes.solid.createBox({\n width: laptop.width,\n length: laptop.length,\n height: laptop.height,\n center: laptop.center\n });\n const laptopFillet = await bitbybit.occt.fillets.filletEdges({ shape: laptopBaseModel, indexes: undefined, radius: 0.2 });\n laptopFillets.push(laptopFillet);\n\n const laptopVisModel = await bitbybit.occt.shapes.solid.createBox({\n width: laptop.width,\n length: laptop.length - 0.01,\n height: laptop.height,\n center: laptop.center\n });\n const laptopVisFillet = await bitbybit.occt.fillets.filletEdges({ shape: laptopVisModel, indexes: undefined, radius: 0.2 });\n laptopFillets.push(laptopFillet);\n\n const di = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n\n di.faceOpacity = 0.2;\n di.edgeWidth = 5;\n di.edgeOpacity = 0.6;\n di.edgeColour = whiteColor;\n di.faceColour = whiteColor;\n const laptopFilletMesh = await bitbybit.draw.drawAnyAsync({ entity: laptopVisFillet, options: di });\n laptopsFilletsMesh.push(laptopFilletMesh);\n })\n\n const polygonWire = await bitbybit.occt.shapes.wire.createPolygonWire({\n points: controlPoints\n });\n const extrusion = await bitbybit.occt.operations.extrude({\n shape: polygonWire, direction: [0, 0, totalDistance += distanceBetweenLaptops + previousLaptopLength / 2]\n });\n const laptopStandFillet = await bitbybit.occt.fillets.filletEdges({ shape: extrusion, indexes: undefined, radius: 1 });\n const laptopStandThick = await bitbybit.occt.operations.makeThickSolidSimple({ shape: laptopStandFillet, offset: -0.5 });\n\n laptopStand = await bitbybit.occt.booleans.difference({ shape: laptopStandThick, shapes: laptopFillets, keepEdges: false });\n const li = new Bit.Inputs.OCCT.DrawShapeDto(laptopStand);\n li.faceOpacity = 1;\n if (flipColor) {\n li.faceColour = \"#0000ff\";\n li.edgeColour = whiteColor;\n } else {\n li.faceColour = holderColor;\n li.edgeColour = whiteColor;\n }\n li.edgeWidth = 5;\n laptopStandMesh = await bitbybit.draw.drawAnyAsync({ entity: laptopStand, options: li });\n const laptopsMeshes = await Promise.all(laptopsFilletsMesh);\n return [laptopStandMesh, ...laptopsMeshes];\n }\n\n const meshes = await renderLaptops(laptops);\n return { meshes };\n}\n\nclass Laptop {\n width: number;\n length: number;\n height: number;\n center?: Bit.Inputs.Base.Point3;\n}\n\nBit.setBitbybitRunnerResult(start());","version":"0.20.7","type":"typescript"}} title="Bitbybit Rete Editor - 3D Laptop Holder" description="3D Laptop holder configurator" /> diff --git a/docs/learn/3d-bits/tutorials/product-palm-table.mdx b/docs/learn/3d-bits/tutorials/product-palm-table.mdx index a6979423..0923e8ed 100644 --- a/docs/learn/3d-bits/tutorials/product-palm-table.mdx +++ b/docs/learn/3d-bits/tutorials/product-palm-table.mdx @@ -157,7 +157,7 @@ To save you time, here is the embedded Rete script used in this tutorial for the diff --git a/docs/learn/code/common/base/color/color-usage-examples.md b/docs/learn/code/common/base/color/color-usage-examples.md index ea4b150a..1ff16b93 100644 --- a/docs/learn/code/common/base/color/color-usage-examples.md +++ b/docs/learn/code/common/base/color/color-usage-examples.md @@ -48,21 +48,21 @@ Click through the tabs below to see the implementation. You can interact with th colorParamfaceColoredgeColorcolorParam0faceColorcolorParam255colorParam0255edgeColor#0000ff6000TRUE0.01TRUEfaceColorTRUEedgeColor10","version":"0.20.6","type":"blockly"}} + script={{"script":"colorParamfaceColoredgeColorcolorParam0faceColorcolorParam255colorParam0255edgeColor#0000ff6000TRUE0.01TRUEfaceColorTRUEedgeColor10","version":"0.20.7","type":"blockly"}} title="Color Usage Example" /> {\n\n const colorParam = 55;\n const rgbToHexOptions = new Bit.Inputs.Color.RGBMinMaxDto();\n rgbToHexOptions.r = colorParam;\n rgbToHexOptions.b = colorParam;\n const faceColor = bitbybit.color.rgbToHex(rgbToHexOptions);\n\n // This might look strange as you could just assign the string to edgeColor directly, \n // but this identity function is nice to have in visual prgramming editors - check Rete & Blockly\n // examples\n \n const edgeColor = bitbybit.color.hexColor({ color: \"#ff0000\" });\n\n const cubeOptions = new Bit.Inputs.OCCT.CubeDto();\n cubeOptions.size = 6;\n const cube = await bitbybit.occt.shapes.solid.createCube(cubeOptions);\n\n const drawOpt = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n drawOpt.faceColour = faceColor;\n drawOpt.edgeColour = edgeColor;\n drawOpt.edgeWidth = 10;\n bitbybit.draw.drawAnyAsync({ entity: cube, options: drawOpt });\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const colorParam = 55;\n const rgbToHexOptions = new Bit.Inputs.Color.RGBMinMaxDto();\n rgbToHexOptions.r = colorParam;\n rgbToHexOptions.b = colorParam;\n const faceColor = bitbybit.color.rgbToHex(rgbToHexOptions);\n\n // This might look strange as you could just assign the string to edgeColor directly, \n // but this identity function is nice to have in visual prgramming editors - check Rete & Blockly\n // examples\n \n const edgeColor = bitbybit.color.hexColor({ color: \"#ff0000\" });\n\n const cubeOptions = new Bit.Inputs.OCCT.CubeDto();\n cubeOptions.size = 6;\n const cube = await bitbybit.occt.shapes.solid.createCube(cubeOptions);\n\n const drawOpt = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n drawOpt.faceColour = faceColor;\n drawOpt.edgeColour = edgeColor;\n drawOpt.edgeWidth = 10;\n bitbybit.draw.drawAnyAsync({ entity: cube, options: drawOpt });\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Color Usage Example" /> diff --git a/docs/learn/code/common/base/point/point-hex-grid-example.md b/docs/learn/code/common/base/point/point-hex-grid-example.md index a28992f3..e8b4eae1 100644 --- a/docs/learn/code/common/base/point/point-hex-grid-example.md +++ b/docs/learn/code/common/base/point/point-hex-grid-example.md @@ -55,21 +55,21 @@ Click through the tabs below to see the implementation. Each example will genera hexagonspointshexCornershexPolylinesihexagons20101010FALSEFALSEFALSEFALSEFALSETRUEFALSEpointshexagonscentershexCornershexagonshexagonshexPolylinesihexCornersINSERTLASThexPolylinesiTRUEpointshexPolylines","version":"0.20.6","type":"blockly"}} + script={{"script":"hexagonspointshexCornershexPolylinesihexagons20101010FALSEFALSEFALSEFALSEFALSETRUEFALSEpointshexagonscentershexCornershexagonshexagonshexPolylinesihexCornersINSERTLASThexPolylinesiTRUEpointshexPolylines","version":"0.20.7","type":"blockly"}} title="Point Hex Grid Example" /> {\n\n // 1. Configure the hexagonal grid options\n const hexOptions = new Bit.Inputs.Point.HexGridScaledToFitDto();\n // Set options different from defaults. \n // TypeScript IntelliSense (e.g., typing \"hexOptions.\") will show all available parameters.\n hexOptions.width = 20;\n hexOptions.height = 10;\n hexOptions.nrHexagonsInWidth = 10;\n hexOptions.nrHexagonsInHeight = 10;\n hexOptions.centerGrid = true; // Center the entire grid at the world origin [0,0,0]\n // Example: hexOptions.flatTop = true; // To get flat-topped hexagons\n // Example: hexOptions.pointsOnGround = true; // To project to XZ plane if original is XY\n\n // 2. Generate the hex grid data\n // This function returns an object like: \n // { centers: Point3[], hexagons: Point3[][], shortestDistEdge, longestDistEdge, maxFilletRadius }\n const hexResult = bitbybit.point.hexGridScaledToFit(hexOptions);\n\n // 3. Create polylines for each hexagon's outline\n // hexResult.hexagons is a list of lists (e.g., [[v1,v2..v6 for hex1], [v1,v2..v6 for hex2], ...])\n // We .map() over this list to create a Polyline object for each hexagon.\n const polylines = hexResult.hexagons.map(singleHexagonCornerPoints => {\n const polylineOptions = new Bit.Inputs.Polyline.PolylineCreateDto();\n polylineOptions.points = singleHexagonCornerPoints; // The 6 corner points\n polylineOptions.isClosed = true; // Ensure the polyline forms a closed loop\n return bitbybit.polyline.create(polylineOptions);\n }) as Bit.Inputs.Base.Polyline3[]; // Type assertion: the result is an array of Polyline3 objects\n\n // 4. Draw the center points of the hexagons\n // hexResult.centers is a list of 3D points: [[cx1,cy1,cz1], [cx2,cy2,cz2], ...]\n bitbybit.draw.drawAnyAsync({ entity: hexResult.centers });\n\n // 5. Draw the polylines representing the hexagon outlines\n bitbybit.draw.drawAnyAsync({ entity: polylines });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = () => {\n\n // 1. Configure the hexagonal grid options\n const hexOptions = new Bit.Inputs.Point.HexGridScaledToFitDto();\n // Set options different from defaults. \n // TypeScript IntelliSense (e.g., typing \"hexOptions.\") will show all available parameters.\n hexOptions.width = 20;\n hexOptions.height = 10;\n hexOptions.nrHexagonsInWidth = 10;\n hexOptions.nrHexagonsInHeight = 10;\n hexOptions.centerGrid = true; // Center the entire grid at the world origin [0,0,0]\n // Example: hexOptions.flatTop = true; // To get flat-topped hexagons\n // Example: hexOptions.pointsOnGround = true; // To project to XZ plane if original is XY\n\n // 2. Generate the hex grid data\n // This function returns an object like: \n // { centers: Point3[], hexagons: Point3[][], shortestDistEdge, longestDistEdge, maxFilletRadius }\n const hexResult = bitbybit.point.hexGridScaledToFit(hexOptions);\n\n // 3. Create polylines for each hexagon's outline\n // hexResult.hexagons is a list of lists (e.g., [[v1,v2..v6 for hex1], [v1,v2..v6 for hex2], ...])\n // We .map() over this list to create a Polyline object for each hexagon.\n const polylines = hexResult.hexagons.map(singleHexagonCornerPoints => {\n const polylineOptions = new Bit.Inputs.Polyline.PolylineCreateDto();\n polylineOptions.points = singleHexagonCornerPoints; // The 6 corner points\n polylineOptions.isClosed = true; // Ensure the polyline forms a closed loop\n return bitbybit.polyline.create(polylineOptions);\n }) as Bit.Inputs.Base.Polyline3[]; // Type assertion: the result is an array of Polyline3 objects\n\n // 4. Draw the center points of the hexagons\n // hexResult.centers is a list of 3D points: [[cx1,cy1,cz1], [cx2,cy2,cz2], ...]\n bitbybit.draw.drawAnyAsync({ entity: hexResult.centers });\n\n // 5. Draw the polylines representing the hexagon outlines\n bitbybit.draw.drawAnyAsync({ entity: polylines });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Point Hex Grid Example" /> diff --git a/docs/learn/code/common/base/point/point-spiral-examples.md b/docs/learn/code/common/base/point/point-spiral-examples.md index e42d91ee..b3eef77d 100644 --- a/docs/learn/code/common/base/point/point-spiral-examples.md +++ b/docs/learn/code/common/base/point/point-spiral-examples.md @@ -45,21 +45,21 @@ Click through the tabs below to see the implementation. Each example will genera 0.9300361","version":"0.20.6","type":"blockly"}} + script={{"script":"0.9300361","version":"0.20.7","type":"blockly"}} title="Point Spiral Example" /> {\n\n // 1. Configure the spiral parameters\n const spiralOptions = new Bit.Inputs.Point.SpiralDto();\n spiralOptions.numberPoints = 300;\n spiralOptions.radius = 6; // Overall extent of the spiral; default is 1\n spiralOptions.widening = 3; // Controls how tight the spiral is; default is 10\n spiralOptions.phi = 0.9; // Constant influencing the spiral pattern; default relates to Golden Angle\n spiralOptions.factor = 1; // General scaling factor; default is 1\n\n // 2. Generate the list of points forming the spiral\n // The bitbybit.point.spiral() function returns an array of 3D points.\n const points = bitbybit.point.spiral(spiralOptions);\n\n // 3. Draw the generated points in the scene\n // The drawAnyAsync function can take an array of points and will render them.\n bitbybit.draw.drawAnyAsync({ entity: points });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = () => {\n\n // 1. Configure the spiral parameters\n const spiralOptions = new Bit.Inputs.Point.SpiralDto();\n spiralOptions.numberPoints = 300;\n spiralOptions.radius = 6; // Overall extent of the spiral; default is 1\n spiralOptions.widening = 3; // Controls how tight the spiral is; default is 10\n spiralOptions.phi = 0.9; // Constant influencing the spiral pattern; default relates to Golden Angle\n spiralOptions.factor = 1; // General scaling factor; default is 1\n\n // 2. Generate the list of points forming the spiral\n // The bitbybit.point.spiral() function returns an array of 3D points.\n const points = bitbybit.point.spiral(spiralOptions);\n\n // 3. Draw the generated points in the scene\n // The drawAnyAsync function can take an array of points and will render them.\n bitbybit.draw.drawAnyAsync({ entity: points });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Point Spiral Example" /> diff --git a/docs/learn/code/common/base/text/text-usage-examples.md b/docs/learn/code/common/base/text/text-usage-examples.md index 608c2213..07662f2d 100644 --- a/docs/learn/code/common/base/text/text-usage-examples.md +++ b/docs/learn/code/common/base/text/text-usage-examples.md @@ -53,21 +53,21 @@ Click through the tabs below to see the implementation. Each example will create namewordwordListnameJohnwordawesomewordListnamewordHi {0}, you are {1}!wordList'Roboto''Regular'20.2180000010'centerMiddle'","version":"0.20.6","type":"blockly"}} + script={{"script":"namewordwordListnameJohnwordawesomewordListnamewordHi {0}, you are {1}!wordList'Roboto''Regular'20.2180000010'centerMiddle'","version":"0.20.7","type":"blockly"}} title="Text Formatting And 3D Fonts" /> {\n const name = \"John\";\n const word = \"awesome\";\n\n const formatOpt = new Bit.Inputs.Text.TextFormatDto();\n formatOpt.text = \"Hi {0}, you are {1}!\";\n formatOpt.values = [name, word];\n const formattedText = bitbybit.text.format(formatOpt);\n\n const text3dOptions = new Bit.Advanced.Text3D.Text3DDto();\n text3dOptions.text = formattedText;\n text3dOptions.rotation = 180;\n text3dOptions.fontSize = 2;\n const text3d = await bitbybit.advanced.text3d.create(text3dOptions);\n bitbybit.draw.drawAnyAsync({ entity: text3d });\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const name = \"John\";\n const word = \"awesome\";\n\n const formatOpt = new Bit.Inputs.Text.TextFormatDto();\n formatOpt.text = \"Hi {0}, you are {1}!\";\n formatOpt.values = [name, word];\n const formattedText = bitbybit.text.format(formatOpt);\n\n const text3dOptions = new Bit.Advanced.Text3D.Text3DDto();\n text3dOptions.text = formattedText;\n text3dOptions.rotation = 180;\n text3dOptions.fontSize = 2;\n const text3d = await bitbybit.advanced.text3d.create(text3dOptions);\n bitbybit.draw.drawAnyAsync({ entity: text3d });\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Text Formatting And 3D Fonts" /> diff --git a/docs/learn/code/common/base/vector/vector-usage-examples.md b/docs/learn/code/common/base/vector/vector-usage-examples.md index 4d259c27..f04543f2 100644 --- a/docs/learn/code/common/base/vector/vector-usage-examples.md +++ b/docs/learn/code/common/base/vector/vector-usage-examples.md @@ -60,21 +60,21 @@ Click through the tabs below to see the implementation in Rete, Blockly, and Typ spanItemsspanEaseItemsvectorsj40040010100.450.50.5FALSE#ffffff#ffffffspanItems0.205spanEaseItemsspanItems05'easeInSine'FALSEvectorsj1spanItems1INSERTLASTvectorsGETFROM_STARTspanItemsjGETFROM_STARTspanEaseItemsj0vectorsvectors","version":"0.20.6","type":"blockly"}} + script={{"script":"spanItemsspanEaseItemsvectorsj40040010100.450.50.5FALSE#ffffff#ffffffspanItems0.205spanEaseItemsspanItems05'easeInSine'FALSEvectorsj1spanItems1INSERTLASTvectorsGETFROM_STARTspanItemsjGETFROM_STARTspanEaseItemsj0vectorsvectors","version":"0.20.7","type":"blockly"}} title="Vector Span & Ease In Combination" /> {\n\n const spanOptions = new Bit.Inputs.Vector.SpanDto();\n spanOptions.step = 0.2;\n spanOptions.min = 0;\n spanOptions.max = 5;\n const spanItems = bitbybit.vector.span(spanOptions);\n\n const spanEaseOptions = new Bit.Inputs.Vector.SpanEaseItemsDto();\n spanEaseOptions.ease = Bit.Inputs.Math.easeEnum.easeInSine;\n spanEaseOptions.min = 0;\n spanEaseOptions.max = 5;\n spanEaseOptions.nrItems = spanItems.length;\n const spanEaseItems = bitbybit.vector.spanEaseItems(spanEaseOptions);\n\n const vectors = spanItems.map((s, index) => [s, spanEaseItems[index], 0]) as Bit.Inputs.Base.Vector3[];\n\n bitbybit.draw.drawGridMesh(new Bit.Inputs.Draw.SceneDrawGridMeshDto());\n bitbybit.draw.drawAnyAsync({ entity: vectors });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = () => {\n\n const spanOptions = new Bit.Inputs.Vector.SpanDto();\n spanOptions.step = 0.2;\n spanOptions.min = 0;\n spanOptions.max = 5;\n const spanItems = bitbybit.vector.span(spanOptions);\n\n const spanEaseOptions = new Bit.Inputs.Vector.SpanEaseItemsDto();\n spanEaseOptions.ease = Bit.Inputs.Math.easeEnum.easeInSine;\n spanEaseOptions.min = 0;\n spanEaseOptions.max = 5;\n spanEaseOptions.nrItems = spanItems.length;\n const spanEaseItems = bitbybit.vector.spanEaseItems(spanEaseOptions);\n\n const vectors = spanItems.map((s, index) => [s, spanEaseItems[index], 0]) as Bit.Inputs.Base.Vector3[];\n\n bitbybit.draw.drawGridMesh(new Bit.Inputs.Draw.SceneDrawGridMeshDto());\n bitbybit.draw.drawAnyAsync({ entity: vectors });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Vector Span & Ease In Combination" /> diff --git a/docs/learn/code/common/draw/examples.mdx b/docs/learn/code/common/draw/examples.mdx index 2d0250c7..e0405a43 100644 --- a/docs/learn/code/common/draw/examples.mdx +++ b/docs/learn/code/common/draw/examples.mdx @@ -28,7 +28,7 @@ The primary component for custom drawing is typically found under the path: **Rete Example: Filleted Cube with Custom Drawing Options** @@ -44,7 +44,7 @@ The primary block for custom drawing is typically found under: 5000TRUE111#ff6600#000099#cc33cc20.3TRUETRUETRUE0.01FALSE0.06#ff00ffFALSE0.06#0000ff","version":"0.20.6","type":"blockly"}} + script={{"script":"5000TRUE111#ff6600#000099#cc33cc20.3TRUETRUETRUE0.01FALSE0.06#ff00ffFALSE0.06#0000ff","version":"0.20.7","type":"blockly"}} title="Blockly Drawing Example" description="Draws simple filletted cube geometry." /> @@ -55,7 +55,7 @@ Finally, we achieve the same result using TypeScript. The code follows a similar {\n\n const cubeOptions = new Bit.Inputs.OCCT.CubeDto();\n cubeOptions.size = 5;\n const cube = await bitbybit.occt.shapes.solid.createCube(cubeOptions);\n const filletOptions = new Bit.Inputs.OCCT.FilletDto()\n filletOptions.shape = cube;\n filletOptions.radius = 1;\n const roundedCube = await bitbybit.occt.fillets.filletEdges(filletOptions);\n\n const drawOcctOptions = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n drawOcctOptions.faceColour = \"#0000ff\";\n drawOcctOptions.edgeColour = \"#ff5555\";\n drawOcctOptions.drawVertices = true;\n drawOcctOptions.vertexSize = 0.3;\n // The rest of options remain default (initialized inside the instance)\n const drawnMesh = await bitbybit.draw.drawAnyAsync({ entity: roundedCube, options: drawOcctOptions })\n // drawnMesh is BABYLONJS Mesh if BabylonJS engine is used. In Three.JS it turns into Group.\n return drawnMesh;\n \n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const cubeOptions = new Bit.Inputs.OCCT.CubeDto();\n cubeOptions.size = 5;\n const cube = await bitbybit.occt.shapes.solid.createCube(cubeOptions);\n const filletOptions = new Bit.Inputs.OCCT.FilletDto()\n filletOptions.shape = cube;\n filletOptions.radius = 1;\n const roundedCube = await bitbybit.occt.fillets.filletEdges(filletOptions);\n\n const drawOcctOptions = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n drawOcctOptions.faceColour = \"#0000ff\";\n drawOcctOptions.edgeColour = \"#ff5555\";\n drawOcctOptions.drawVertices = true;\n drawOcctOptions.vertexSize = 0.3;\n // The rest of options remain default (initialized inside the instance)\n const drawnMesh = await bitbybit.draw.drawAnyAsync({ entity: roundedCube, options: drawOcctOptions })\n // drawnMesh is BABYLONJS Mesh if BabylonJS engine is used. In Three.JS it turns into Group.\n return drawnMesh;\n \n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="TypeScript Drawing Example" description="Draws simple filletted cube geometry." /> \ No newline at end of file diff --git a/docs/learn/code/common/occt/booleans/operations.mdx b/docs/learn/code/common/occt/booleans/operations.mdx index be955c40..ec651871 100644 --- a/docs/learn/code/common/occt/booleans/operations.mdx +++ b/docs/learn/code/common/occt/booleans/operations.mdx @@ -49,21 +49,21 @@ The following scripts demonstrate creating three solids (a box, a cylinder, and **TypeScript Example: Union of Solids** {\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 5;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n\n const cylinderOpt = new Bit.Inputs.OCCT.CylinderDto();\n cylinderOpt.radius = 3;\n cylinderOpt.height = 7;\n cylinderOpt.center = [3, 0, 3];\n const cylinder = await bitbybit.occt.shapes.solid.createCylinder(cylinderOpt);\n\n\n const sphereOpt = new Bit.Inputs.OCCT.SphereDto();\n sphereOpt.radius = 3;\n sphereOpt.center = [-1.5, 1.5, -5];\n const sphere = await bitbybit.occt.shapes.solid.createSphere(sphereOpt);\n\n const union = await bitbybit.occt.booleans.union({\n shapes: [box, cylinder, sphere],\n keepEdges: false\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: union\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 5;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n\n const cylinderOpt = new Bit.Inputs.OCCT.CylinderDto();\n cylinderOpt.radius = 3;\n cylinderOpt.height = 7;\n cylinderOpt.center = [3, 0, 3];\n const cylinder = await bitbybit.occt.shapes.solid.createCylinder(cylinderOpt);\n\n\n const sphereOpt = new Bit.Inputs.OCCT.SphereDto();\n sphereOpt.radius = 3;\n sphereOpt.center = [-1.5, 1.5, -5];\n const sphere = await bitbybit.occt.shapes.solid.createSphere(sphereOpt);\n\n const union = await bitbybit.occt.booleans.union({\n shapes: [box, cylinder, sphere],\n keepEdges: false\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: union\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Union Three Solids" /> **Blockly Example: Union of Solids** boxspherecylinderbox585000sphere3-1.51.5-5cylinder37303010boxcylindersphereFALSE","version":"0.20.6","type":"blockly"}} + script={{"script":"boxspherecylinderbox585000sphere3-1.51.5-5cylinder37303010boxcylindersphereFALSE","version":"0.20.7","type":"blockly"}} title="Union Three Solids" /> **Rete Example: Union of Solids** @@ -94,21 +94,21 @@ These scripts demonstrate creating a box, cylinder, and sphere, then subtracting **TypeScript Example: Difference of Solids** {\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 5;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n\n const cylinderOpt = new Bit.Inputs.OCCT.CylinderDto();\n cylinderOpt.radius = 3;\n cylinderOpt.height = 7;\n cylinderOpt.center = [3, 0, 3];\n const cylinder = await bitbybit.occt.shapes.solid.createCylinder(cylinderOpt);\n\n\n const sphereOpt = new Bit.Inputs.OCCT.SphereDto();\n sphereOpt.radius = 3;\n sphereOpt.center = [-1.5, 1.5, -5];\n const sphere = await bitbybit.occt.shapes.solid.createSphere(sphereOpt);\n\n const diff = await bitbybit.occt.booleans.difference({\n shape: box,\n shapes: [cylinder, sphere],\n keepEdges: false\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: diff\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 5;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n\n const cylinderOpt = new Bit.Inputs.OCCT.CylinderDto();\n cylinderOpt.radius = 3;\n cylinderOpt.height = 7;\n cylinderOpt.center = [3, 0, 3];\n const cylinder = await bitbybit.occt.shapes.solid.createCylinder(cylinderOpt);\n\n\n const sphereOpt = new Bit.Inputs.OCCT.SphereDto();\n sphereOpt.radius = 3;\n sphereOpt.center = [-1.5, 1.5, -5];\n const sphere = await bitbybit.occt.shapes.solid.createSphere(sphereOpt);\n\n const diff = await bitbybit.occt.booleans.difference({\n shape: box,\n shapes: [cylinder, sphere],\n keepEdges: false\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: diff\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Difference of Solids" /> **Blockly Example: Difference of Solids** boxspherecylinderbox585000sphere3-1.51.5-5cylinder37303010boxcylindersphereFALSE","version":"0.20.6","type":"blockly"}} + script={{"script":"boxspherecylinderbox585000sphere3-1.51.5-5cylinder37303010boxcylindersphereFALSE","version":"0.20.7","type":"blockly"}} title="Difference of Solids" /> **Rete Example: Difference of Solids** @@ -138,21 +138,21 @@ These scripts create a box, cylinder, and sphere, and then compute their common **TypeScript Example: Intersection of Solids** {\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 5;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n\n const cylinderOpt = new Bit.Inputs.OCCT.CylinderDto();\n cylinderOpt.radius = 3;\n cylinderOpt.height = 7;\n cylinderOpt.center = [3, 0, 3];\n const cylinder = await bitbybit.occt.shapes.solid.createCylinder(cylinderOpt);\n\n\n const sphereOpt = new Bit.Inputs.OCCT.SphereDto();\n sphereOpt.radius = 3;\n sphereOpt.center = [-1.5, 1.5, -5];\n const sphere = await bitbybit.occt.shapes.solid.createSphere(sphereOpt);\n\n const diff = await bitbybit.occt.booleans.intersection({\n shapes: [box, cylinder, sphere],\n keepEdges: false\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: diff\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 5;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n\n const cylinderOpt = new Bit.Inputs.OCCT.CylinderDto();\n cylinderOpt.radius = 3;\n cylinderOpt.height = 7;\n cylinderOpt.center = [3, 0, 3];\n const cylinder = await bitbybit.occt.shapes.solid.createCylinder(cylinderOpt);\n\n\n const sphereOpt = new Bit.Inputs.OCCT.SphereDto();\n sphereOpt.radius = 3;\n sphereOpt.center = [-1.5, 1.5, -5];\n const sphere = await bitbybit.occt.shapes.solid.createSphere(sphereOpt);\n\n const diff = await bitbybit.occt.booleans.intersection({\n shapes: [box, cylinder, sphere],\n keepEdges: false\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: diff\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Intersection of Solids" /> **Blockly Example: Intersection of Solids** boxspherecylinderbox585000sphere3-1.51.5-5cylinder37303010boxcylindersphereFALSE","version":"0.20.6","type":"blockly"}} + script={{"script":"boxspherecylinderbox585000sphere3-1.51.5-5cylinder37303010boxcylindersphereFALSE","version":"0.20.7","type":"blockly"}} title="Intersection of Solids" /> **Rete Example: Intersection of Solids** diff --git a/docs/learn/code/common/occt/fillets/chamfer-circular-edges.mdx b/docs/learn/code/common/occt/fillets/chamfer-circular-edges.mdx index 7075dc02..d9a45b0e 100644 --- a/docs/learn/code/common/occt/fillets/chamfer-circular-edges.mdx +++ b/docs/learn/code/common/occt/fillets/chamfer-circular-edges.mdx @@ -25,21 +25,21 @@ The examples below demonstrate creating a box with a cylindrical hole through it **TypeScript Example: Chamfer Circular Edge of a Hole** {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n const cylinderOpt = new Bit.Inputs.OCCT.CylinderDto();\n cylinderOpt.direction = [1, 0, 0];\n cylinderOpt.center = [-5, 0, 0];\n cylinderOpt.radius = 2;\n cylinderOpt.height = 10;\n\n const cylinder = await bitbybit.occt.shapes.solid.createCylinder(cylinderOpt)\n\n const difference = await bitbybit.occt.booleans.difference({\n shape: box,\n shapes: [cylinder],\n keepEdges: false\n });\n\n const chamfered = await bitbybit.occt.fillets.chamferEdges({\n shape: difference,\n distance: 0.4\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: chamfered,\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n const cylinderOpt = new Bit.Inputs.OCCT.CylinderDto();\n cylinderOpt.direction = [1, 0, 0];\n cylinderOpt.center = [-5, 0, 0];\n cylinderOpt.radius = 2;\n cylinderOpt.height = 10;\n\n const cylinder = await bitbybit.occt.shapes.solid.createCylinder(cylinderOpt)\n\n const difference = await bitbybit.occt.booleans.difference({\n shape: box,\n shapes: [cylinder],\n keepEdges: false\n });\n\n const chamfered = await bitbybit.occt.fillets.chamferEdges({\n shape: difference,\n distance: 0.4\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: chamfered,\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Chamfer Circular Edge" /> **Blockly Example: Chamfer Circular Edge of a Hole** differenceSoliddifferenceSolid5810000210-500100FALSEdifferenceSolid0.4","version":"0.20.6","type":"blockly"}} + script={{"script":"differenceSoliddifferenceSolid5810000210-500100FALSEdifferenceSolid0.4","version":"0.20.7","type":"blockly"}} title="Chamfer Circular Edge" /> **Rete Example: Chamfer Circular Edge of a Hole** diff --git a/docs/learn/code/common/occt/fillets/chamfers-intro.mdx b/docs/learn/code/common/occt/fillets/chamfers-intro.mdx index 2d4695cd..cb889ac5 100644 --- a/docs/learn/code/common/occt/fillets/chamfers-intro.mdx +++ b/docs/learn/code/common/occt/fillets/chamfers-intro.mdx @@ -48,21 +48,21 @@ The following examples in TypeScript, Rete, and Blockly demonstrate creating a s **TypeScript Example: Chamfer All Edges of a Solid** {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const chamfered = await bitbybit.occt.fillets.chamferEdges({\n shape: box,\n distance: 1,\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: chamfered,\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const chamfered = await bitbybit.occt.fillets.chamferEdges({\n shape: box,\n distance: 1,\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: chamfered,\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Chamfer All Edges of Solid" /> **Blockly Example: Chamfer All Edges of a Solid** 58100001","version":"0.20.6","type":"blockly"}} + script={{"script":"58100001","version":"0.20.7","type":"blockly"}} title="Chamfer All Edges of Solid" /> **Rete Example: Chamfer All Edges of a Solid** diff --git a/docs/learn/code/common/occt/fillets/chamfers-var-radius-on-spec-edges.mdx b/docs/learn/code/common/occt/fillets/chamfers-var-radius-on-spec-edges.mdx index 82eb7026..b74cf7ab 100644 --- a/docs/learn/code/common/occt/fillets/chamfers-var-radius-on-spec-edges.mdx +++ b/docs/learn/code/common/occt/fillets/chamfers-var-radius-on-spec-edges.mdx @@ -28,21 +28,21 @@ The examples below demonstrate creating a solid box and then applying chamfers w **TypeScript Example: Chamfer Specific Edges with Variable Distances** {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const chamfered = await bitbybit.occt.fillets.chamferEdges({\n shape: box,\n distanceList: [0.2, 1.2, 2],\n indexes: [1, 2, 3]\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: chamfered,\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const chamfered = await bitbybit.occt.fillets.chamferEdges({\n shape: box,\n distanceList: [0.2, 1.2, 2],\n indexes: [1, 2, 3]\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: chamfered,\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Chamfer Specific Edges of Solid" /> **Blockly Example: Chamfer Specific Edges with Variable Distances** 58100000.10.31.22123","version":"0.20.6","type":"blockly"}} + script={{"script":"58100000.10.31.22123","version":"0.20.7","type":"blockly"}} title="Chamfer Specific Edges of Solid" /> **Rete Example: Chamfer Specific Edges with Variable Distances** diff --git a/docs/learn/code/common/occt/fillets/fillet-3d-wires.mdx b/docs/learn/code/common/occt/fillets/fillet-3d-wires.mdx index 8167ee20..9cc6f872 100644 --- a/docs/learn/code/common/occt/fillets/fillet-3d-wires.mdx +++ b/docs/learn/code/common/occt/fillets/fillet-3d-wires.mdx @@ -55,21 +55,21 @@ In these examples, we first construct a 3D star-shaped wire. Then, we apply diff **TypeScript Example: Fillet Specific Corners of a 3D Wire** {\n\n const repeatOpt = new Bit.Inputs.Lists.MultiplyItemDto([innerFillet, outerFillet], nrRays);\n const radiusList = bitbybit.lists.repeat(repeatOpt).flat();\n const spanOptions = new Bit.Inputs.Vector.SpanDto(1, 1, nrRays * 2);\n const indexes = bitbybit.vector.span(spanOptions);\n\n const starOptions = new Bit.Inputs.OCCT.StarDto(outerStarRadius, innerStarRadius, nrRays, [0, 0, 0], [0, 1, 0], 4, false);\n const star = await bitbybit.occt.shapes.wire.createStarWire(starOptions);\n\n const filletOptions = new Bit.Inputs.OCCT.Fillet3DWireDto(star, undefined, [0, 1, 0], radiusList, indexes);\n const starFillet = await bitbybit.occt.fillets.fillet3DWire(filletOptions);\n\n const startFilletTranslated1 = await bitbybit.occt.transforms.translate({ shape: starFillet, translation: [0, 5, 0] })\n const startFilletTranslated2 = await bitbybit.occt.transforms.translate({ shape: starFillet, translation: [0, 10, 0] })\n\n\n const starFace = await bitbybit.occt.shapes.face.createFaceFromWire({ shape: startFilletTranslated2, planar: false });\n const starThick = await bitbybit.occt.operations.makeThickSolidSimple({ shape: starFace, offset: -1 });\n const starThickFillet = await bitbybit.occt.fillets.filletEdges({ shape: starThick, radius: 0.3 });\n\n const drawOptions = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n drawOptions.edgeWidth = 15;\n bitbybit.draw.drawAnyAsync({ entity: star, options: drawOptions });\n bitbybit.draw.drawAnyAsync({ entity: startFilletTranslated1, options: drawOptions });\n drawOptions.faceColour = \"#5555ff\";\n drawOptions.edgeColour = \"#000000\";\n drawOptions.edgeWidth = 2;\n drawOptions.precision = 0.005;\n bitbybit.draw.drawAnyAsync({ entity: starThickFillet, options: drawOptions });\n\n const gridOptions = new Bit.Inputs.Draw.SceneDrawGridMeshDto();\n bitbybit.draw.drawGridMesh(gridOptions);\n const skyboxOptions = new Bit.Inputs.BabylonScene.SkyboxDto();\n skyboxOptions.skybox = Bit.Inputs.Base.skyboxEnum.clearSky;\n bitbybit.babylon.scene.enableSkybox(skyboxOptions);\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const nrRays = 7;\nconst outerStarRadius = 10;\nconst innerStarRadius = 4;\nconst outerFillet = 0.6;\nconst innerFillet = 1.7;\n\nconst start = async () => {\n\n const repeatOpt = new Bit.Inputs.Lists.MultiplyItemDto([innerFillet, outerFillet], nrRays);\n const radiusList = bitbybit.lists.repeat(repeatOpt).flat();\n const spanOptions = new Bit.Inputs.Vector.SpanDto(1, 1, nrRays * 2);\n const indexes = bitbybit.vector.span(spanOptions);\n\n const starOptions = new Bit.Inputs.OCCT.StarDto(outerStarRadius, innerStarRadius, nrRays, [0, 0, 0], [0, 1, 0], 4, false);\n const star = await bitbybit.occt.shapes.wire.createStarWire(starOptions);\n\n const filletOptions = new Bit.Inputs.OCCT.Fillet3DWireDto(star, undefined, [0, 1, 0], radiusList, indexes);\n const starFillet = await bitbybit.occt.fillets.fillet3DWire(filletOptions);\n\n const startFilletTranslated1 = await bitbybit.occt.transforms.translate({ shape: starFillet, translation: [0, 5, 0] })\n const startFilletTranslated2 = await bitbybit.occt.transforms.translate({ shape: starFillet, translation: [0, 10, 0] })\n\n\n const starFace = await bitbybit.occt.shapes.face.createFaceFromWire({ shape: startFilletTranslated2, planar: false });\n const starThick = await bitbybit.occt.operations.makeThickSolidSimple({ shape: starFace, offset: -1 });\n const starThickFillet = await bitbybit.occt.fillets.filletEdges({ shape: starThick, radius: 0.3 });\n\n const drawOptions = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n drawOptions.edgeWidth = 15;\n bitbybit.draw.drawAnyAsync({ entity: star, options: drawOptions });\n bitbybit.draw.drawAnyAsync({ entity: startFilletTranslated1, options: drawOptions });\n drawOptions.faceColour = \"#5555ff\";\n drawOptions.edgeColour = \"#000000\";\n drawOptions.edgeWidth = 2;\n drawOptions.precision = 0.005;\n bitbybit.draw.drawAnyAsync({ entity: starThickFillet, options: drawOptions });\n\n const gridOptions = new Bit.Inputs.Draw.SceneDrawGridMeshDto();\n bitbybit.draw.drawGridMesh(gridOptions);\n const skyboxOptions = new Bit.Inputs.BabylonScene.SkyboxDto();\n skyboxOptions.skybox = Bit.Inputs.Base.skyboxEnum.clearSky;\n bitbybit.babylon.scene.enableSkybox(skyboxOptions);\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Fillet 3D Wire Specific Corners" /> **Blockly Example: Fillet Specific Corners of a 3D Wire** nrRaysinnerFilletRadiusouterRadiusFilletfilletIndexesradiusLististarPromisestarFilletPromisenrRays7innerFilletRadius1.7outerRadiusFillet0.6filletIndexes11MULTIPLYnrRays2'clearSky'10000.10.7radiusListi1MULTIPLYnrRays21EQi20INSERTLASTradiusListouterRadiusFilletINSERTLASTradiusListinnerFilletRadiusstarPromise000010nrRays1044FALSEstarFilletPromisestarPromiseradiusListfilletIndexes010starPromise0.01FALSE#ff0000TRUE#ffffff15starFilletPromise0500.01FALSE#ff0000TRUE#ffffff15starFilletPromise0100FALSE-10.30.005TRUE#3333ffTRUE#000000240040010100.450.50.5FALSE#ffffff#ffffff","version":"0.20.6","type":"blockly"}} + script={{"script":"nrRaysinnerFilletRadiusouterRadiusFilletfilletIndexesradiusLististarPromisestarFilletPromisenrRays7innerFilletRadius1.7outerRadiusFillet0.6filletIndexes11MULTIPLYnrRays2'clearSky'10000.10.7radiusListi1MULTIPLYnrRays21EQi20INSERTLASTradiusListouterRadiusFilletINSERTLASTradiusListinnerFilletRadiusstarPromise000010nrRays1044FALSEstarFilletPromisestarPromiseradiusListfilletIndexes010starPromise0.01FALSE#ff0000TRUE#ffffff15starFilletPromise0500.01FALSE#ff0000TRUE#ffffff15starFilletPromise0100FALSE-10.30.005TRUE#3333ffTRUE#000000240040010100.450.50.5FALSE#ffffff#ffffff","version":"0.20.7","type":"blockly"}} title="Fillet 3D Wire Specific Corners" /> **Rete Example: Fillet Specific Corners of a 3D Wire** diff --git a/docs/learn/code/common/occt/fillets/fillets-intro.mdx b/docs/learn/code/common/occt/fillets/fillets-intro.mdx index e4e1ac76..f59cdbb5 100644 --- a/docs/learn/code/common/occt/fillets/fillets-intro.mdx +++ b/docs/learn/code/common/occt/fillets/fillets-intro.mdx @@ -43,21 +43,21 @@ The following examples in TypeScript, Rete, and Blockly demonstrate creating a s **TypeScript Example: Fillet All Edges of a Solid** {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const filleted = await bitbybit.occt.fillets.filletEdges({\n shape: box,\n radius: 1,\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: filleted,\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const filleted = await bitbybit.occt.fillets.filletEdges({\n shape: box,\n radius: 1,\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: filleted,\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Fillet Solid" /> **Blockly Example: Fillet All Edges of a Solid** 58100001","version":"0.20.6","type":"blockly"}} + script={{"script":"58100001","version":"0.20.7","type":"blockly"}} title="Fillet Solid" /> **Rete Example: Fillet All Edges of a Solid** diff --git a/docs/learn/code/common/occt/fillets/fillets-on-2d-wire-corners.mdx b/docs/learn/code/common/occt/fillets/fillets-on-2d-wire-corners.mdx index 3660f205..16b2b766 100644 --- a/docs/learn/code/common/occt/fillets/fillets-on-2d-wire-corners.mdx +++ b/docs/learn/code/common/occt/fillets/fillets-on-2d-wire-corners.mdx @@ -30,21 +30,21 @@ The examples below demonstrate creating a 2D wire and then applying fillets with **TypeScript Example: Fillet Specific Corners of a Wire with Variable Radii** {\n const squareOpt = new Bit.Inputs.OCCT.SquareDto();\n const square = await bitbybit.occt.shapes.wire.createSquareWire(squareOpt);\n const squareFillet = await bitbybit.occt.fillets.fillet2d({\n shape: square,\n radiusList: [0.1, 0.3],\n indexes: [1, 3]\n });\n\n bitbybit.draw.drawAnyAsync({\n entity: squareFillet\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const squareOpt = new Bit.Inputs.OCCT.SquareDto();\n const square = await bitbybit.occt.shapes.wire.createSquareWire(squareOpt);\n const squareFillet = await bitbybit.occt.fillets.fillet2d({\n shape: square,\n radiusList: [0.1, 0.3],\n indexes: [1, 3]\n });\n\n bitbybit.draw.drawAnyAsync({\n entity: squareFillet\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Fillet Specific Corners of Wire" /> **Blockly Example: Fillet Specific Corners of a Wire with Variable Radii** 10000100.10.313","version":"0.20.6","type":"blockly"}} + script={{"script":"10000100.10.313","version":"0.20.7","type":"blockly"}} title="Fillet Specific Corners of Wire" /> **Rete Example: Fillet Specific Corners of a Wire with Variable Radii** diff --git a/docs/learn/code/common/occt/fillets/fillets-on-2d-wires.mdx b/docs/learn/code/common/occt/fillets/fillets-on-2d-wires.mdx index a7367608..23f1d4f0 100644 --- a/docs/learn/code/common/occt/fillets/fillets-on-2d-wires.mdx +++ b/docs/learn/code/common/occt/fillets/fillets-on-2d-wires.mdx @@ -29,21 +29,21 @@ The examples below demonstrate how to create a simple 2D wire (e.g., a polyline **TypeScript Example: Fillet All Corners of a Wire** {\n const squareOpt = new Bit.Inputs.OCCT.SquareDto();\n const square = await bitbybit.occt.shapes.wire.createSquareWire(squareOpt);\n const squareFillet = await bitbybit.occt.fillets.fillet2d({\n shape: square,\n radius: 0.25\n });\n\n bitbybit.draw.drawAnyAsync({\n entity: squareFillet\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const squareOpt = new Bit.Inputs.OCCT.SquareDto();\n const square = await bitbybit.occt.shapes.wire.createSquareWire(squareOpt);\n const squareFillet = await bitbybit.occt.fillets.fillet2d({\n shape: square,\n radius: 0.25\n });\n\n bitbybit.draw.drawAnyAsync({\n entity: squareFillet\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Fillet All Corners of Wire" /> **Blockly Example: Fillet All Corners of a Wire** 10000100.24","version":"0.20.6","type":"blockly"}} + script={{"script":"10000100.24","version":"0.20.7","type":"blockly"}} title="Fillet All Corners of Wire" /> **Rete Example: Fillet All Corners of a Wire** diff --git a/docs/learn/code/common/occt/fillets/fillets-var-radius-on-spec-edges.mdx b/docs/learn/code/common/occt/fillets/fillets-var-radius-on-spec-edges.mdx index 91187418..b7d5742e 100644 --- a/docs/learn/code/common/occt/fillets/fillets-var-radius-on-spec-edges.mdx +++ b/docs/learn/code/common/occt/fillets/fillets-var-radius-on-spec-edges.mdx @@ -31,7 +31,7 @@ The examples below demonstrate creating a solid box and then applying fillets wi **TypeScript Example: Fillet Specific Edges with Variable Radii** {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const filleted = await bitbybit.occt.fillets.filletEdges({\n shape: box,\n radiusList: [1, 2, 0.3],\n indexes: [1, 2, 3]\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: filleted,\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const filleted = await bitbybit.occt.fillets.filletEdges({\n shape: box,\n radiusList: [1, 2, 0.3],\n indexes: [1, 2, 3]\n })\n\n bitbybit.draw.drawAnyAsync({\n entity: filleted,\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Variable Fillet Radius On Spec Edges" /> @@ -39,7 +39,7 @@ The examples below demonstrate creating a solid box and then applying fillets wi **Blockly Example: Fillet Specific Edges with Variable Radii** 5810000120.3123","version":"0.20.6","type":"blockly"}} + script={{"script":"5810000120.3123","version":"0.20.7","type":"blockly"}} title="Variable Fillet Radius On Spec Edges" /> @@ -47,7 +47,7 @@ The examples below demonstrate creating a solid box and then applying fillets wi **Rete Example: Fillet Specific Edges with Variable Radii** diff --git a/docs/learn/code/common/occt/operations/advanced-loft.md b/docs/learn/code/common/occt/operations/advanced-loft.md index 59c8f2f9..02b56cba 100644 --- a/docs/learn/code/common/occt/operations/advanced-loft.md +++ b/docs/learn/code/common/occt/operations/advanced-loft.md @@ -45,21 +45,21 @@ Here's a breakdown of the process described: nrCornerswire1wire2wire3nrCorners10151515030117910001000100010003wire1000010nrCorners31wire2030010nrCorners10.3wire3070010nrCorners60.5wire3wire2wire1FALSEFALSEFALSEFALSE10FALSE31e-7'approxChordLength'01000-300.01TRUE#cc33ccTRUE#ffffff2","version":"0.20.6","type":"blockly"}} + script={{"script":"nrCornerswire1wire2wire3nrCorners10151515030117910001000100010003wire1000010nrCorners31wire2030010nrCorners10.3wire3070010nrCorners60.5wire3wire2wire1FALSEFALSEFALSEFALSE10FALSE31e-7'approxChordLength'01000-300.01TRUE#cc33ccTRUE#ffffff2","version":"0.20.7","type":"blockly"}} title="Advanced Loft Operation" /> {\n\n // --- 1. Camera Configuration ---\n // Create a new configuration object for the scene's Arc Rotate Camera.\n const arcCameraOptions = new CameraConfigurationDto();\n // Set the camera's position in 3D space (x, y, z).\n arcCameraOptions.position = [15, 15, 15];\n // Set the point the camera will look at.\n arcCameraOptions.lookAt = [0, 3, 0];\n // Apply these settings to the active camera in the scene.\n scene.adjustActiveArcRotateCamera(arcCameraOptions);\n\n // Define the number of corners for the polygonal profiles.\n const nrCorners = 10;\n\n // --- 2. Create the First Profile (Bottom) ---\n // Create a DTO to define an n-sided polygon wire.\n const ngonOpt = new NGonWireDto();\n ngonOpt.nrCorners = nrCorners;\n ngonOpt.radius = 3;\n // Asynchronously create the first polygon wire shape at the default center [0,0,0].\n const wire1 = await wire.createNGonWire(ngonOpt);\n\n // Create a DTO for a 2D fillet operation to round the corners of a wire.\n const filletOpt = new FilletDto();\n filletOpt.radius = 0.3; // The radius of the rounded corners.\n filletOpt.shape = wire1; // Specify that the fillet should be applied to wire1.\n // Asynchronously apply the fillet and store the new, smoothed wire.\n const filletedWire1 = await fillets.fillet2d(filletOpt);\n\n // --- 3. Create the Second Profile (Middle) ---\n // Reuse the ngonOpt DTO but modify its properties for the next shape.\n ngonOpt.center = [0, 3, 0]; // Move the center up along the Y-axis.\n ngonOpt.radius = 1; // Make this polygon smaller.\n const wire2 = await wire.createNGonWire(ngonOpt);\n\n // Reuse the filletOpt DTO to apply the same fillet radius to the new wire.\n filletOpt.shape = wire2;\n const filletedWire2 = await fillets.fillet2d(filletOpt);\n\n // --- 4. Create the Third Profile (Top) ---\n // Reuse and modify the DTOs again for the third and final profile.\n ngonOpt.center = [0, 7, 0]; // Move this one even higher.\n ngonOpt.radius = 6; // Make this polygon the largest.\n const wire3 = await wire.createNGonWire(ngonOpt);\n\n // Use a larger fillet radius for this larger wire.\n filletOpt.radius = 0.5;\n filletOpt.shape = wire3;\n const filletedWire3 = await fillets.fillet2d(filletOpt);\n\n // --- 5. Perform the Loft Operation ---\n // A loft creates a 3D solid by connecting a series of 2D profiles.\n const loftAdvancedOptions = new LoftAdvancedDto();\n // Specify a single point where the loft should begin, creating a pointed top.\n loftAdvancedOptions.startVertex = [0, 10, 0];\n // Specify a single point where the loft should end, creating a pointed bottom.\n loftAdvancedOptions.endVertex = [0, -3, 0];\n // Provide the array of profiles to connect. The order matters.\n loftAdvancedOptions.shapes = [filletedWire3, filletedWire2, filletedWire1];\n // Asynchronously execute the loft operation to create the final 3D shape.\n const loftedShape = await operations.loftAdvanced(loftAdvancedOptions)\n\n // --- 6. Draw the Final Shape ---\n // Create a DTO to define how the shape should be drawn.\n const drawOptions = new DrawOcctShapeSimpleOptions();\n // Set the color of the shape's faces to magenta.\n drawOptions.faceColour = \"#ff00ff\";\n\n // Call the generic drawing function to render the OCCT shape in the scene.\n bitbybit.draw.drawAnyAsync({\n entity: loftedShape, // The shape to draw.\n options: drawOptions // The drawing options to apply.\n });\n\n}\n\n// Execute the main function to start the script.\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"\n// Import DTOs for configuring various operations. DTOs are objects used to pass data.\n// Import camera configuration for setting up the scene view.\nconst { CameraConfigurationDto } = Bit.Inputs.BabylonScene;\n// Import DTOs for OpenCASCADE (OCCT) geometric modeling: creating polygons, fillets, and lofts.\nconst { NGonWireDto, FilletDto, LoftAdvancedDto } = Bit.Inputs.OCCT;\n// Import DTO for specifying drawing options, like color and opacity.\nconst { DrawOcctShapeSimpleOptions } = Bit.Inputs.Draw;\n// Import a specific type for an OCCT wire, ensuring type safety in our code.\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\n\n// Destructure the bitbybit API to get direct access to its main modules.\n// 'scene' provides access to Babylon.js scene controls.\nconst { scene } = bitbybit.babylon;\n// 'wire', 'fillets', and 'operations' are part of the OCCT module for creating and manipulating shapes.\nconst { wire } = bitbybit.occt.shapes;\nconst { fillets, operations } = bitbybit.occt;\n\n// Define an asynchronous function to execute the main logic.\n// Using async/await is necessary because geometry creation and drawing are non-blocking operations.\nconst start = async () => {\n\n // --- 1. Camera Configuration ---\n // Create a new configuration object for the scene's Arc Rotate Camera.\n const arcCameraOptions = new CameraConfigurationDto();\n // Set the camera's position in 3D space (x, y, z).\n arcCameraOptions.position = [15, 15, 15];\n // Set the point the camera will look at.\n arcCameraOptions.lookAt = [0, 3, 0];\n // Apply these settings to the active camera in the scene.\n scene.adjustActiveArcRotateCamera(arcCameraOptions);\n\n // Define the number of corners for the polygonal profiles.\n const nrCorners = 10;\n\n // --- 2. Create the First Profile (Bottom) ---\n // Create a DTO to define an n-sided polygon wire.\n const ngonOpt = new NGonWireDto();\n ngonOpt.nrCorners = nrCorners;\n ngonOpt.radius = 3;\n // Asynchronously create the first polygon wire shape at the default center [0,0,0].\n const wire1 = await wire.createNGonWire(ngonOpt);\n\n // Create a DTO for a 2D fillet operation to round the corners of a wire.\n const filletOpt = new FilletDto();\n filletOpt.radius = 0.3; // The radius of the rounded corners.\n filletOpt.shape = wire1; // Specify that the fillet should be applied to wire1.\n // Asynchronously apply the fillet and store the new, smoothed wire.\n const filletedWire1 = await fillets.fillet2d(filletOpt);\n\n // --- 3. Create the Second Profile (Middle) ---\n // Reuse the ngonOpt DTO but modify its properties for the next shape.\n ngonOpt.center = [0, 3, 0]; // Move the center up along the Y-axis.\n ngonOpt.radius = 1; // Make this polygon smaller.\n const wire2 = await wire.createNGonWire(ngonOpt);\n\n // Reuse the filletOpt DTO to apply the same fillet radius to the new wire.\n filletOpt.shape = wire2;\n const filletedWire2 = await fillets.fillet2d(filletOpt);\n\n // --- 4. Create the Third Profile (Top) ---\n // Reuse and modify the DTOs again for the third and final profile.\n ngonOpt.center = [0, 7, 0]; // Move this one even higher.\n ngonOpt.radius = 6; // Make this polygon the largest.\n const wire3 = await wire.createNGonWire(ngonOpt);\n\n // Use a larger fillet radius for this larger wire.\n filletOpt.radius = 0.5;\n filletOpt.shape = wire3;\n const filletedWire3 = await fillets.fillet2d(filletOpt);\n\n // --- 5. Perform the Loft Operation ---\n // A loft creates a 3D solid by connecting a series of 2D profiles.\n const loftAdvancedOptions = new LoftAdvancedDto();\n // Specify a single point where the loft should begin, creating a pointed top.\n loftAdvancedOptions.startVertex = [0, 10, 0];\n // Specify a single point where the loft should end, creating a pointed bottom.\n loftAdvancedOptions.endVertex = [0, -3, 0];\n // Provide the array of profiles to connect. The order matters.\n loftAdvancedOptions.shapes = [filletedWire3, filletedWire2, filletedWire1];\n // Asynchronously execute the loft operation to create the final 3D shape.\n const loftedShape = await operations.loftAdvanced(loftAdvancedOptions)\n\n // --- 6. Draw the Final Shape ---\n // Create a DTO to define how the shape should be drawn.\n const drawOptions = new DrawOcctShapeSimpleOptions();\n // Set the color of the shape's faces to magenta.\n drawOptions.faceColour = \"#ff00ff\";\n\n // Call the generic drawing function to render the OCCT shape in the scene.\n bitbybit.draw.drawAnyAsync({\n entity: loftedShape, // The shape to draw.\n options: drawOptions // The drawing options to apply.\n });\n\n}\n\n// Execute the main function to start the script.\nstart();","version":"0.20.7","type":"typescript"}} title="Advanced Loft Operation" /> diff --git a/docs/learn/code/common/occt/operations/extrusions.md b/docs/learn/code/common/occt/operations/extrusions.md index 538ad4fa..c74a59b1 100644 --- a/docs/learn/code/common/occt/operations/extrusions.md +++ b/docs/learn/code/common/occt/operations/extrusions.md @@ -35,21 +35,21 @@ By understanding extrusion, you gain a powerful tool for your 3D modeling toolki heightheight40000107740FALSE0.50height0","version":"0.20.6","type":"blockly"}} + script={{"script":"heightheight40000107740FALSE0.50height0","version":"0.20.7","type":"blockly"}} title="Extrude the wire into shell kind of shape" /> {\n\n // Define a constant 'height' for the extrusion operation.\n const height = 4;\n\n // Create a new StarDto instance to configure the properties of a star-shaped wire.\n const starOpt = new StarDto();\n // Set the inner radius of the star.\n starOpt.innerRadius = 4;\n // Set the outer radius of the star.\n starOpt.outerRadius = 7;\n // Asynchronously create the star-shaped wire using the configured options.\n // The 'await' keyword pauses execution until the wire creation is complete.\n // Bitbybit runs such CAD operations in the worker thread, which doesn't block UI\n // and is usually faster.\n const star = await wire.createStarWire(starOpt);\n\n // Create a new FilletDto instance to configure a 2D fillet operation.\n // The generic type specifies that this fillet will be applied to a wire.\n const filletOpt = new FilletDto();\n // Set the shape to be filleted to the previously created star wire.\n filletOpt.shape = star;\n // Set the radius for the fillet (rounding of corners).\n filletOpt.radius = 0.5;\n // Asynchronously apply the 2D fillet to the star wire.\n const roundedStar = await fillets.fillet2d(filletOpt);\n\n // Create a new ExtrudeDto instance to configure an extrusion operation.\n // The generic type specifies that a wire will be extruded.\n const extrudeOpt = new ExtrudeDto();\n // Set the shape to be extruded to the previously created rounded star wire.\n extrudeOpt.shape = roundedStar;\n // Set the direction and magnitude of the extrusion as a 3D vector [x, y, z].\n // Here, it extrudes along the Y-axis by the value of 'height'.\n extrudeOpt.direction = [0, height, 0];\n // Asynchronously perform the extrusion operation on the rounded star wire.\n const extrudedRoundStar = await operations.extrude(extrudeOpt);\n\n // Asynchronously draw the final extruded shape in the 3D scene.\n // 'entity' specifies the shape to be drawn.\n bitbybit.draw.drawAnyAsync({ entity: extrudedRoundStar });\n\n}\n\n// Call the 'start' function to execute the script.\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Import the 'wire' module for creating wire shapes from the OCCT (OpenCASCADE Technology) library.\nconst { wire } = bitbybit.occt.shapes;\n// Import 'fillets' and 'operations' modules for performing filleting and extrusion operations on OCCT shapes.\nconst { fillets, operations } = bitbybit.occt;\n// Import Data Transfer Objects (DTOs) for configuring star creation, filleting, and extrusion.\n// DTOs are used to pass parameters to the respective functions.\nconst { StarDto, FilletDto, ExtrudeDto } = Bit.Inputs.OCCT;\n// Define a type alias for a pointer to a TopoDS_Wire, which is an OCCT data structure representing a wire.\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\n\n// Define an asynchronous function named 'start' which will contain the main logic for creating and drawing the shape.\n// The 'async' keyword allows the use of 'await' for operations that might take time, like geometry creation.\nconst start = async () => {\n\n // Define a constant 'height' for the extrusion operation.\n const height = 4;\n\n // Create a new StarDto instance to configure the properties of a star-shaped wire.\n const starOpt = new StarDto();\n // Set the inner radius of the star.\n starOpt.innerRadius = 4;\n // Set the outer radius of the star.\n starOpt.outerRadius = 7;\n // Asynchronously create the star-shaped wire using the configured options.\n // The 'await' keyword pauses execution until the wire creation is complete.\n // Bitbybit runs such CAD operations in the worker thread, which doesn't block UI\n // and is usually faster.\n const star = await wire.createStarWire(starOpt);\n\n // Create a new FilletDto instance to configure a 2D fillet operation.\n // The generic type specifies that this fillet will be applied to a wire.\n const filletOpt = new FilletDto();\n // Set the shape to be filleted to the previously created star wire.\n filletOpt.shape = star;\n // Set the radius for the fillet (rounding of corners).\n filletOpt.radius = 0.5;\n // Asynchronously apply the 2D fillet to the star wire.\n const roundedStar = await fillets.fillet2d(filletOpt);\n\n // Create a new ExtrudeDto instance to configure an extrusion operation.\n // The generic type specifies that a wire will be extruded.\n const extrudeOpt = new ExtrudeDto();\n // Set the shape to be extruded to the previously created rounded star wire.\n extrudeOpt.shape = roundedStar;\n // Set the direction and magnitude of the extrusion as a 3D vector [x, y, z].\n // Here, it extrudes along the Y-axis by the value of 'height'.\n extrudeOpt.direction = [0, height, 0];\n // Asynchronously perform the extrusion operation on the rounded star wire.\n const extrudedRoundStar = await operations.extrude(extrudeOpt);\n\n // Asynchronously draw the final extruded shape in the 3D scene.\n // 'entity' specifies the shape to be drawn.\n bitbybit.draw.drawAnyAsync({ entity: extrudedRoundStar });\n\n}\n\n// Call the 'start' function to execute the script.\nstart();","version":"0.20.7","type":"typescript"}} title="Extrude the wire into shell kind of shape" /> @@ -69,21 +69,21 @@ In the following examples, we first construct a complex wire, then create a plan heightheight4000010070000100520FALSEFALSETRUETRUE0height0","version":"0.20.6","type":"blockly"}} + script={{"script":"heightheight4000010070000100520FALSEFALSETRUETRUE0height0","version":"0.20.7","type":"blockly"}} title="Extrude the face into solid shape" /> {\n\n const height = 4;\n\n const heartOpt = new Heart2DDto();\n heartOpt.sizeApprox = 7;\n const heart1 = await wire.createHeartWire(heartOpt);\n\n heartOpt.sizeApprox = 5;\n const heart2 = await wire.createHeartWire(heartOpt);\n\n const zigZagOpt = new ZigZagBetweenTwoWiresDto(heart1, heart2, 31);\n const zigZagWire = await wire.createZigZagBetweenTwoWires(zigZagOpt);\n\n const faceFromWireOpt = new FaceFromWireDto(zigZagWire, true);\n const zigZagFace = await face.createFaceFromWire(faceFromWireOpt);\n \n const extrudeOpt = new ExtrudeDto();\n extrudeOpt.shape = zigZagFace;\n extrudeOpt.direction = [0, height, 0];\n const extrudedZigZag = await operations.extrude(extrudeOpt);\n\n bitbybit.draw.drawAnyAsync({ entity: extrudedZigZag });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"const { wire, face } = bitbybit.occt.shapes;\nconst { fillets, operations } = bitbybit.occt;\nconst { FilletDto, ExtrudeDto, Heart2DDto, ZigZagBetweenTwoWiresDto, FaceFromWireDto } = Bit.Inputs.OCCT;\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\ntype TopoDSFacePointer = Bit.Inputs.OCCT.TopoDSFacePointer;\nconst start = async () => {\n\n const height = 4;\n\n const heartOpt = new Heart2DDto();\n heartOpt.sizeApprox = 7;\n const heart1 = await wire.createHeartWire(heartOpt);\n\n heartOpt.sizeApprox = 5;\n const heart2 = await wire.createHeartWire(heartOpt);\n\n const zigZagOpt = new ZigZagBetweenTwoWiresDto(heart1, heart2, 31);\n const zigZagWire = await wire.createZigZagBetweenTwoWires(zigZagOpt);\n\n const faceFromWireOpt = new FaceFromWireDto(zigZagWire, true);\n const zigZagFace = await face.createFaceFromWire(faceFromWireOpt);\n \n const extrudeOpt = new ExtrudeDto();\n extrudeOpt.shape = zigZagFace;\n extrudeOpt.direction = [0, height, 0];\n const extrudedZigZag = await operations.extrude(extrudeOpt);\n\n bitbybit.draw.drawAnyAsync({ entity: extrudedZigZag });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Extrude the face into solid shape" /> diff --git a/docs/learn/code/common/occt/operations/offset-operations.md b/docs/learn/code/common/occt/operations/offset-operations.md index f2ae6684..994ba8f0 100644 --- a/docs/learn/code/common/occt/operations/offset-operations.md +++ b/docs/learn/code/common/occt/operations/offset-operations.md @@ -44,21 +44,21 @@ Key parameters for wire offset include: hexagonoffsetDistanceoffsetShapehexagon00001046offsetDistance1.2offsetShapehexagonoffsetDistance0.1hexagon#00ff004offsetShape#ff00004","version":"0.20.6","type":"blockly"}} + script={{"script":"hexagonoffsetDistanceoffsetShapehexagon00001046offsetDistance1.2offsetShapehexagonoffsetDistance0.1hexagon#00ff004offsetShape#ff00004","version":"0.20.7","type":"blockly"}} title="Basic Wire Offset Operation" /> {\n\n // Define the offset distance - positive values expand the shape, negative values contract it\n const offsetDistance = 1.2;\n\n // Create a new NGonWireDto instance to configure a hexagonal wire\n const hexagonOpt = new Bit.Inputs.OCCT.NGonWireDto();\n // Set the center point of the polygon\n hexagonOpt.center = [0, 0, 0];\n // Set the direction vector (normal to the plane of the polygon)\n hexagonOpt.direction = [0, 1, 0];\n // Set the radius from center to vertices\n hexagonOpt.radius = 4;\n // Set the number of corners (6 for hexagon)\n hexagonOpt.nrCorners = 6;\n \n // Create the hexagonal wire\n const hexagon = await wire.createNGonWire(hexagonOpt);\n\n // Create a new OffsetDto instance to configure the offset operation\n const offsetOpt = new OffsetDto();\n // Set the shape to be offset\n offsetOpt.shape = hexagon;\n // Set the offset distance (positive = outward, negative = inward)\n offsetOpt.distance = offsetDistance;\n // Set the tolerance for the offset calculation\n offsetOpt.tolerance = 0.1;\n \n // Perform the offset operation\n const offsetShape = await operations.offset(offsetOpt);\n\n // Draw both the original and offset shapes with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: hexagon, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offsetShape, options: offsetOptions });\n\n}\n\n// Call the 'start' function to execute the script\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Import the 'wire' module for creating wire shapes from the OCCT library\nconst { wire } = bitbybit.occt.shapes;\n// Import the 'operations' module for offset operations\nconst { operations } = bitbybit.occt;\n// Import Data Transfer Objects (DTOs) for configuring polygon creation and offset operations\nconst { NGonWireDto, OffsetDto } = Bit.Inputs.OCCT;\n// Define a type alias for a pointer to a TopoDS_Wire\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\n\n// Define an asynchronous function named 'start' which will contain the main logic\nconst start = async () => {\n\n // Define the offset distance - positive values expand the shape, negative values contract it\n const offsetDistance = 1.2;\n\n // Create a new NGonWireDto instance to configure a hexagonal wire\n const hexagonOpt = new Bit.Inputs.OCCT.NGonWireDto();\n // Set the center point of the polygon\n hexagonOpt.center = [0, 0, 0];\n // Set the direction vector (normal to the plane of the polygon)\n hexagonOpt.direction = [0, 1, 0];\n // Set the radius from center to vertices\n hexagonOpt.radius = 4;\n // Set the number of corners (6 for hexagon)\n hexagonOpt.nrCorners = 6;\n \n // Create the hexagonal wire\n const hexagon = await wire.createNGonWire(hexagonOpt);\n\n // Create a new OffsetDto instance to configure the offset operation\n const offsetOpt = new OffsetDto();\n // Set the shape to be offset\n offsetOpt.shape = hexagon;\n // Set the offset distance (positive = outward, negative = inward)\n offsetOpt.distance = offsetDistance;\n // Set the tolerance for the offset calculation\n offsetOpt.tolerance = 0.1;\n \n // Perform the offset operation\n const offsetShape = await operations.offset(offsetOpt);\n\n // Draw both the original and offset shapes with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: hexagon, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offsetShape, options: offsetOptions });\n\n}\n\n// Call the 'start' function to execute the script\nstart();","version":"0.20.7","type":"typescript"}} title="Basic Wire Offset Operation" /> @@ -83,21 +83,21 @@ The join types available are: starWireoffsetDistanceoffsetShapestarWire000010531.50FALSEoffsetDistance0.8offsetShapestarWireoffsetDistance0.1intersectionFALSEstarWire#00ff004offsetShape#ff00004","version":"0.20.6","type":"blockly"}} + script={{"script":"starWireoffsetDistanceoffsetShapestarWire000010531.50FALSEoffsetDistance0.8offsetShapestarWireoffsetDistance0.1intersectionFALSEstarWire#00ff004offsetShape#ff00004","version":"0.20.7","type":"blockly"}} title="Advanced Offset with Join Type Control" /> {\n\n // Define the offset distance\n const offsetDistance = 0.8;\n\n // Create a star-shaped wire for demonstration\n const starOpt = new StarDto();\n starOpt.center = [0, 0, 0];\n starOpt.direction = [0, 1, 0];\n starOpt.numRays = 5;\n starOpt.outerRadius = 3;\n starOpt.innerRadius = 1.5;\n \n const starWire = await wire.createStarWire(starOpt);\n\n // Create an advanced offset with specific join type\n const offsetAdvOpt = new OffsetAdvancedDto();\n offsetAdvOpt.shape = starWire;\n offsetAdvOpt.distance = offsetDistance;\n offsetAdvOpt.tolerance = 0.1;\n // Set join type to 'intersection' for sharp corners\n // Other options: 'arc' (rounded), 'tangent' (beveled)\n offsetAdvOpt.joinType = Bit.Inputs.OCCT.joinTypeEnum.intersection;\n offsetAdvOpt.removeIntEdges = false;\n \n const offsetShape = await operations.offsetAdv(offsetAdvOpt);\n\n // Draw both shapes with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: starWire, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offsetShape, options: offsetOptions });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Import required modules for wire creation and operations\nconst { wire } = bitbybit.occt.shapes;\nconst { operations } = bitbybit.occt;\n// Import DTOs and enums for star creation and advanced offset\nconst { StarDto, OffsetAdvancedDto } = Bit.Inputs.OCCT;\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\n\nconst start = async () => {\n\n // Define the offset distance\n const offsetDistance = 0.8;\n\n // Create a star-shaped wire for demonstration\n const starOpt = new StarDto();\n starOpt.center = [0, 0, 0];\n starOpt.direction = [0, 1, 0];\n starOpt.numRays = 5;\n starOpt.outerRadius = 3;\n starOpt.innerRadius = 1.5;\n \n const starWire = await wire.createStarWire(starOpt);\n\n // Create an advanced offset with specific join type\n const offsetAdvOpt = new OffsetAdvancedDto();\n offsetAdvOpt.shape = starWire;\n offsetAdvOpt.distance = offsetDistance;\n offsetAdvOpt.tolerance = 0.1;\n // Set join type to 'intersection' for sharp corners\n // Other options: 'arc' (rounded), 'tangent' (beveled)\n offsetAdvOpt.joinType = Bit.Inputs.OCCT.joinTypeEnum.intersection;\n offsetAdvOpt.removeIntEdges = false;\n \n const offsetShape = await operations.offsetAdv(offsetAdvOpt);\n\n // Draw both shapes with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: starWire, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offsetShape, options: offsetOptions });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Advanced Offset with Join Type Control" /> @@ -117,21 +117,21 @@ The thick solid operation takes a shell (collection of connected faces) or a fac circleWirecircularFacethicknessthickSolidcircleWire0000103circularFacecircleWireTRUEthickness0.5thickSolidcircularFacethicknesstranslatedSolidthickSolid010circularFace#00ff004translatedSolid#ff00004","version":"0.20.6","type":"blockly"}} + script={{"script":"circleWirecircularFacethicknessthickSolidcircleWire0000103circularFacecircleWireTRUEthickness0.5thickSolidcircularFacethicknesstranslatedSolidthickSolid010circularFace#00ff004translatedSolid#ff00004","version":"0.20.7","type":"blockly"}} title="Creating Thick Solid from Face" /> {\n\n // Define the thickness for the solid\n const thickness = 0.5;\n\n // Step 1: Create a circular wire\n const circleOpt = new CircleDto();\n circleOpt.center = [0, 0, 0];\n circleOpt.direction = [0, 1, 0];\n circleOpt.radius = 3;\n \n const circleWire = await wire.createCircleWire(circleOpt);\n\n // Step 2: Convert the wire to a face\n const faceOpt = new FaceFromWireDto();\n faceOpt.shape = circleWire;\n faceOpt.planar = true;\n \n const circularFace = await face.createFaceFromWire(faceOpt);\n\n // Step 3: Create a thick solid from the face\n const thickSolidOpt = new ThisckSolidSimpleDto();\n thickSolidOpt.shape = circularFace;\n // Positive offset creates thickness in the direction of the face normal\n thickSolidOpt.offset = thickness;\n \n const thickSolid = await operations.makeThickSolidSimple(thickSolidOpt);\n\n // Step 4: Translate the thick solid upwards to make the original face visible\n const translationOpt = new TranslateDto();\n translationOpt.shape = thickSolid;\n translationOpt.translation = [0, 1, 0]; // Move up by 1 unit\n \n const translatedSolid = await transforms.translate(translationOpt);\n\n // Draw both the original face and resulting thick solid with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const thickSolidOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n thickSolidOptions.edgeWidth = 4;\n thickSolidOptions.edgeColour = \"#ff0000\"; // Red for thick solid\n \n bitbybit.draw.drawAnyAsync({ entity: circularFace, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: translatedSolid, options: thickSolidOptions });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Import required modules for wire, face creation and operations\nconst { wire, face } = bitbybit.occt.shapes;\nconst { operations, transforms } = bitbybit.occt;\n// Import DTOs for circle, face and thick solid creation\nconst { CircleDto, FaceFromWireDto, ThisckSolidSimpleDto, TranslateDto } = Bit.Inputs.OCCT;\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\ntype TopoDSFacePointer = Bit.Inputs.OCCT.TopoDSFacePointer;\n\nconst start = async () => {\n\n // Define the thickness for the solid\n const thickness = 0.5;\n\n // Step 1: Create a circular wire\n const circleOpt = new CircleDto();\n circleOpt.center = [0, 0, 0];\n circleOpt.direction = [0, 1, 0];\n circleOpt.radius = 3;\n \n const circleWire = await wire.createCircleWire(circleOpt);\n\n // Step 2: Convert the wire to a face\n const faceOpt = new FaceFromWireDto();\n faceOpt.shape = circleWire;\n faceOpt.planar = true;\n \n const circularFace = await face.createFaceFromWire(faceOpt);\n\n // Step 3: Create a thick solid from the face\n const thickSolidOpt = new ThisckSolidSimpleDto();\n thickSolidOpt.shape = circularFace;\n // Positive offset creates thickness in the direction of the face normal\n thickSolidOpt.offset = thickness;\n \n const thickSolid = await operations.makeThickSolidSimple(thickSolidOpt);\n\n // Step 4: Translate the thick solid upwards to make the original face visible\n const translationOpt = new TranslateDto();\n translationOpt.shape = thickSolid;\n translationOpt.translation = [0, 1, 0]; // Move up by 1 unit\n \n const translatedSolid = await transforms.translate(translationOpt);\n\n // Draw both the original face and resulting thick solid with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const thickSolidOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n thickSolidOptions.edgeWidth = 4;\n thickSolidOptions.edgeColour = \"#ff0000\"; // Red for thick solid\n \n bitbybit.draw.drawAnyAsync({ entity: circularFace, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: translatedSolid, options: thickSolidOptions });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Creating Thick Solid from Face" /> @@ -151,21 +151,21 @@ This operation works by: curvedWireoffsetDistanceextrusionDirectionoffset3DWirecurvedWire0002124-11623FALSEoffsetDistance0.5extrusionDirection010offset3DWirecurvedWireextrusionDirectionoffsetDistancecurvedWire#00ff004offset3DWire#ff00004","version":"0.20.6","type":"blockly"}} + script={{"script":"curvedWireoffsetDistanceextrusionDirectionoffset3DWirecurvedWire0002124-11623FALSEoffsetDistance0.5extrusionDirection010offset3DWirecurvedWireextrusionDirectionoffsetDistancecurvedWire#00ff004offset3DWire#ff00004","version":"0.20.7","type":"blockly"}} title="3D Wire Offset Operation" /> {\n\n // Define parameters for the 3D offset\n const offsetDistance = 0.5;\n const extrusionDirection = [0, 1, 0]; // Y-axis direction\n\n // Step 1: Create a curved 3D wire using B-spline\n const curveOpt = new BSplineDto();\n // Define control points for a truly 3D curve with varying Y coordinates\n curveOpt.points = [\n [0, 0, 0], // Start point\n [2, 1, 2], // First control point (elevated in Y)\n [4, -1, 1], // Second control point (lowered in Y)\n [6, 2, 3] // End point (elevated in Y and Z)\n ];\n curveOpt.closed = false;\n \n const curvedWire = await wire.createBSpline(curveOpt);\n\n // Step 2: Create 3D offset of the wire\n const offset3DOpt = new Offset3DWireDto();\n offset3DOpt.shape = curvedWire;\n // Direction for the temporary extrusion used in the offset calculation\n offset3DOpt.direction = extrusionDirection as Bit.Inputs.Base.Point3;\n // Distance to offset the wire\n offset3DOpt.offset = offsetDistance;\n \n const offset3DWire = await operations.offset3DWire(offset3DOpt);\n\n // Draw both the original and offset wires with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: curvedWire, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offset3DWire, options: offsetOptions });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Import required modules for wire creation and operations\nconst { wire } = bitbybit.occt.shapes;\nconst { operations } = bitbybit.occt;\n// Import DTOs for BSpline and 3D wire offset\nconst { BSplineDto, Offset3DWireDto } = Bit.Inputs.OCCT;\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\n\nconst start = async () => {\n\n // Define parameters for the 3D offset\n const offsetDistance = 0.5;\n const extrusionDirection = [0, 1, 0]; // Y-axis direction\n\n // Step 1: Create a curved 3D wire using B-spline\n const curveOpt = new BSplineDto();\n // Define control points for a truly 3D curve with varying Y coordinates\n curveOpt.points = [\n [0, 0, 0], // Start point\n [2, 1, 2], // First control point (elevated in Y)\n [4, -1, 1], // Second control point (lowered in Y)\n [6, 2, 3] // End point (elevated in Y and Z)\n ];\n curveOpt.closed = false;\n \n const curvedWire = await wire.createBSpline(curveOpt);\n\n // Step 2: Create 3D offset of the wire\n const offset3DOpt = new Offset3DWireDto();\n offset3DOpt.shape = curvedWire;\n // Direction for the temporary extrusion used in the offset calculation\n offset3DOpt.direction = extrusionDirection as Bit.Inputs.Base.Point3;\n // Distance to offset the wire\n offset3DOpt.offset = offsetDistance;\n \n const offset3DWire = await operations.offset3DWire(offset3DOpt);\n\n // Draw both the original and offset wires with different colors for comparison\n const originalOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n originalOptions.edgeWidth = 4;\n originalOptions.edgeColour = \"#00ff00\"; // Green for original\n \n const offsetOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offsetOptions.edgeWidth = 4;\n offsetOptions.edgeColour = \"#ff0000\"; // Red for offset\n \n bitbybit.draw.drawAnyAsync({ entity: curvedWire, options: originalOptions });\n bitbybit.draw.drawAnyAsync({ entity: offset3DWire, options: offsetOptions });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="3D Wire Offset Operation" /> diff --git a/docs/learn/code/common/occt/operations/rotated-extrusions.md b/docs/learn/code/common/occt/operations/rotated-extrusions.md index 08205cba..10d77303 100644 --- a/docs/learn/code/common/occt/operations/rotated-extrusions.md +++ b/docs/learn/code/common/occt/operations/rotated-extrusions.md @@ -34,21 +34,21 @@ In the examples below, we will demonstrate how to create a simple solid 3D helic 130000104360TRUE","version":"0.20.6","type":"blockly"}} + script={{"script":"130000104360TRUE","version":"0.20.7","type":"blockly"}} title="Extrude the wire into shell kind of shape" /> {\n\n const recOpt = new Bit.Inputs.OCCT.RectangleDto(1, 3);\n const rectangle = await bitbybit.occt.shapes.wire.createRectangleWire(recOpt);\n const rotatedExtrudeOpt = new Bit.Inputs.OCCT.RotationExtrudeDto(rectangle, 4);\n const rotatedExtrude = await bitbybit.occt.operations.rotatedExtrude(rotatedExtrudeOpt)\n\n bitbybit.draw.drawAnyAsync({ entity: rotatedExtrude });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const recOpt = new Bit.Inputs.OCCT.RectangleDto(1, 3);\n const rectangle = await bitbybit.occt.shapes.wire.createRectangleWire(recOpt);\n const rotatedExtrudeOpt = new Bit.Inputs.OCCT.RotationExtrudeDto(rectangle, 4);\n const rotatedExtrude = await bitbybit.occt.operations.rotatedExtrude(rotatedExtrudeOpt)\n\n bitbybit.draw.drawAnyAsync({ entity: rotatedExtrude });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Extrude the wire into shell kind of shape" /> @@ -62,21 +62,21 @@ When the profile is further from the center it will form a helix like shape. Thi pointPromisespointsngonRotationPromisesi3050300150117910001000100010003pointPromises00001061012FALSETRUEpointspointPromisesngonRotationPromisesipointsINSERTLASTngonRotationPromisesi01061.530270TRUEngonRotationPromises","version":"0.20.6","type":"blockly"}} + script={{"script":"pointPromisespointsngonRotationPromisesi3050300150117910001000100010003pointPromises00001061012FALSETRUEpointspointPromisesngonRotationPromisesipointsINSERTLASTngonRotationPromisesi01061.530270TRUEngonRotationPromises","version":"0.20.7","type":"blockly"}} title="Extrude the wire into shell kind of shape" /> {\n\n // Adjust the default camera position to face the object\n const cameraOptions = new CameraConfigurationDto();\n cameraOptions.position = [30, 50, 50];\n cameraOptions.lookAt = [0, 15, 0];\n scene.adjustActiveArcRotateCamera(cameraOptions);\n\n // This ellipse will be used to derive origins for ngons on the ground plane\n const ellipseOptions = new EllipseDto();\n ellipseOptions.radiusMinor = 6;\n ellipseOptions.radiusMajor = 10;\n const ellipse = await wire.createEllipseWire(ellipseOptions);\n\n // We divide the wire into 12 segments and return the points\n const divideOptions = new DivideDto(ellipse);\n divideOptions.removeEndPoint = true;\n divideOptions.nrOfDivisions = 12;\n const points = await wire.divideWireByEqualDistanceToPoints(divideOptions);\n\n // Create ngons on these points\n const ngonOptions = new NGonWireDto();\n ngonOptions.radius = 1.5;\n const ngonPromises = points.map(point => {\n ngonOptions.center = point;\n return wire.createNGonWire(ngonOptions);\n });\n\n const ngons = await Promise.all(ngonPromises);\n\n // Form rotated extrusions on all of the points\n const rotatedExtrudeOptions = new RotationExtrudeDto();\n rotatedExtrudeOptions.angle = 270;\n rotatedExtrudeOptions.height = 30;\n const rotatedExtrusionPromises = ngons.map(ngon => {\n rotatedExtrudeOptions.shape = ngon;\n return operations.rotatedExtrude(rotatedExtrudeOptions);\n });\n\n const rotatedExtrusions = await Promise.all(rotatedExtrusionPromises);\n\n // Compounding multiple shapes will generally deliver much better rendering performance\n // as it will form a single mesh for all of the geometries involved in compound\n const compoundOptions = new CompoundShapesDto(rotatedExtrusions);\n const ngonCompound = await compound.makeCompound(compoundOptions);\n\n // As a last step we draw the ngon with default occt settings (defualt because we omit specifying options property)\n bitbybit.draw.drawAnyAsync({ entity: ngonCompound });\n\n}\n\n// Let's not forget to execute the start function, otherwise nothing will happen.\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// These destructured imports are optional, but convenient later on - option DTO's are classes\nconst { EllipseDto, RotationExtrudeDto, DivideDto, NGonWireDto, CompoundShapesDto } = Bit.Inputs.OCCT;\nconst { CameraConfigurationDto } = Bit.Inputs.BabylonScene;\n// These are parts of the bitbybit API that will be used in the script\nconst { wire, compound } = bitbybit.occt.shapes;\nconst { operations } = bitbybit.occt;\nconst { scene } = bitbybit.babylon;\n// Types need to be destructured one by one\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\n\n// Async definition of the start function where we can await on asynchronous CAD algorithms running inside the web workers\nconst start = async () => {\n\n // Adjust the default camera position to face the object\n const cameraOptions = new CameraConfigurationDto();\n cameraOptions.position = [30, 50, 50];\n cameraOptions.lookAt = [0, 15, 0];\n scene.adjustActiveArcRotateCamera(cameraOptions);\n\n // This ellipse will be used to derive origins for ngons on the ground plane\n const ellipseOptions = new EllipseDto();\n ellipseOptions.radiusMinor = 6;\n ellipseOptions.radiusMajor = 10;\n const ellipse = await wire.createEllipseWire(ellipseOptions);\n\n // We divide the wire into 12 segments and return the points\n const divideOptions = new DivideDto(ellipse);\n divideOptions.removeEndPoint = true;\n divideOptions.nrOfDivisions = 12;\n const points = await wire.divideWireByEqualDistanceToPoints(divideOptions);\n\n // Create ngons on these points\n const ngonOptions = new NGonWireDto();\n ngonOptions.radius = 1.5;\n const ngonPromises = points.map(point => {\n ngonOptions.center = point;\n return wire.createNGonWire(ngonOptions);\n });\n\n const ngons = await Promise.all(ngonPromises);\n\n // Form rotated extrusions on all of the points\n const rotatedExtrudeOptions = new RotationExtrudeDto();\n rotatedExtrudeOptions.angle = 270;\n rotatedExtrudeOptions.height = 30;\n const rotatedExtrusionPromises = ngons.map(ngon => {\n rotatedExtrudeOptions.shape = ngon;\n return operations.rotatedExtrude(rotatedExtrudeOptions);\n });\n\n const rotatedExtrusions = await Promise.all(rotatedExtrusionPromises);\n\n // Compounding multiple shapes will generally deliver much better rendering performance\n // as it will form a single mesh for all of the geometries involved in compound\n const compoundOptions = new CompoundShapesDto(rotatedExtrusions);\n const ngonCompound = await compound.makeCompound(compoundOptions);\n\n // As a last step we draw the ngon with default occt settings (defualt because we omit specifying options property)\n bitbybit.draw.drawAnyAsync({ entity: ngonCompound });\n\n}\n\n// Let's not forget to execute the start function, otherwise nothing will happen.\nstart();","version":"0.20.7","type":"typescript"}} title="Extrude the wire into shell kind of shape" /> diff --git a/docs/learn/code/common/occt/operations/simple-loft.md b/docs/learn/code/common/occt/operations/simple-loft.md index 88c664d7..e5feabbd 100644 --- a/docs/learn/code/common/occt/operations/simple-loft.md +++ b/docs/learn/code/common/occt/operations/simple-loft.md @@ -37,21 +37,21 @@ In this tutorial, we'll walk through the process of creating a simple lofted sha ellipse1ellipse2ellipse3ellipsesloftellipse100001048ellipse203001014ellipse307001026ellipsesellipse1ellipse2ellipse3loftellipsesFALSEloft0.001TRUE#6600ccTRUE#ffffff2","version":"0.20.6","type":"blockly"}} + script={{"script":"ellipse1ellipse2ellipse3ellipsesloftellipse100001048ellipse203001014ellipse307001026ellipsesellipse1ellipse2ellipse3loftellipsesFALSEloft0.001TRUE#6600ccTRUE#ffffff2","version":"0.20.7","type":"blockly"}} title="Simple Loft Operation" /> {\n\n // Create an instance of EllipseDto to define the properties of the first ellipse.\n const ellipseOpt = new EllipseDto();\n // Set the minor radius of the ellipse.\n ellipseOpt.radiusMinor = 4;\n // Set the major radius of the ellipse.\n ellipseOpt.radiusMajor = 8;\n // Create the first elliptical wire. The center defaults to [0,0,0] and direction to [0,1,0] if not specified.\n // 'await' is used because shape creation is an asynchronous operation.\n const ellipse1 = await shapes.wire.createEllipseWire(ellipseOpt);\n\n // Modify the ellipseOpt for the second ellipse.\n // Set the center of the second ellipse.\n ellipseOpt.center = [0, 3, 0];\n // Set the minor radius for the second ellipse.\n ellipseOpt.radiusMinor = 1;\n // Set the major radius for the second ellipse.\n ellipseOpt.radiusMajor = 4;\n // Create the second elliptical wire with the updated options.\n const ellipse2 = await shapes.wire.createEllipseWire(ellipseOpt);\n\n // Modify the ellipseOpt for the third ellipse.\n // Set the center of the third ellipse.\n ellipseOpt.center = [0, 7, 0];\n // Set the minor radius for the third ellipse.\n ellipseOpt.radiusMinor = 2;\n // Set the major radius for the third ellipse.\n ellipseOpt.radiusMajor = 6;\n // Create the third elliptical wire with the updated options.\n const ellipse3 = await shapes.wire.createEllipseWire(ellipseOpt);\n\n // Create an instance of LoftDto to define the parameters for the loft operation.\n // The generic type TopoDSShapePointer indicates the type of shapes to be lofted.\n const loftOpt = new LoftDto();\n // Assign an array of the created ellipse wires to the 'shapes' property of loftOpt.\n // These are the profiles that will be connected by the loft.\n loftOpt.shapes = [ellipse1, ellipse2, ellipse3];\n // Perform the loft operation using the defined options.\n // This will create a surface (or shell) connecting the three ellipses.\n // 'makeSolid' defaults to false, creating a shell.\n const loft = await operations.loft(loftOpt);\n\n // Create an instance of DrawOcctShapeSimpleOptions to define how the lofted shape will be displayed.\n const drawOpt = new DrawOcctShapeSimpleOptions();\n // Set the precision for drawing the shape. This affects the tessellation quality.\n drawOpt.precision = 0.001;\n // Set the color of the faces of the lofted shape.\n drawOpt.faceColour = \"#ff00ff\"; // Magenta\n // Draw the lofted shape asynchronously using the specified entity and drawing options.\n draw.drawAnyAsync({ entity: loft, options: drawOpt });\n\n}\n\n// Call the start function to execute the script.\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Import necessary modules from the bitbybit library.\n// 'operations' and 'shapes' are for OpenCascade Technology (OCCT) functionalities like lofting and creating wires.\nconst { operations, shapes } = bitbybit.occt;\n// 'draw' module is used for rendering shapes on the canvas.\nconst { draw } = bitbybit;\n// Import Data Transfer Objects (DTOs) for defining OCCT inputs.\n// 'EllipseDto' for creating ellipses, 'LoftDto' for loft operation parameters.\nconst { EllipseDto, LoftDto } = Bit.Inputs.OCCT;\n// Import DTO for drawing options.\nconst { DrawOcctShapeSimpleOptions } = Bit.Inputs.Draw;\n// Define a type alias for OCCT shape pointers for better readability.\ntype TopoDSShapePointer = Bit.Inputs.OCCT.TopoDSShapePointer;\n\n// Define an asynchronous function 'start' which will contain the main logic.\nconst start = async () => {\n\n // Create an instance of EllipseDto to define the properties of the first ellipse.\n const ellipseOpt = new EllipseDto();\n // Set the minor radius of the ellipse.\n ellipseOpt.radiusMinor = 4;\n // Set the major radius of the ellipse.\n ellipseOpt.radiusMajor = 8;\n // Create the first elliptical wire. The center defaults to [0,0,0] and direction to [0,1,0] if not specified.\n // 'await' is used because shape creation is an asynchronous operation.\n const ellipse1 = await shapes.wire.createEllipseWire(ellipseOpt);\n\n // Modify the ellipseOpt for the second ellipse.\n // Set the center of the second ellipse.\n ellipseOpt.center = [0, 3, 0];\n // Set the minor radius for the second ellipse.\n ellipseOpt.radiusMinor = 1;\n // Set the major radius for the second ellipse.\n ellipseOpt.radiusMajor = 4;\n // Create the second elliptical wire with the updated options.\n const ellipse2 = await shapes.wire.createEllipseWire(ellipseOpt);\n\n // Modify the ellipseOpt for the third ellipse.\n // Set the center of the third ellipse.\n ellipseOpt.center = [0, 7, 0];\n // Set the minor radius for the third ellipse.\n ellipseOpt.radiusMinor = 2;\n // Set the major radius for the third ellipse.\n ellipseOpt.radiusMajor = 6;\n // Create the third elliptical wire with the updated options.\n const ellipse3 = await shapes.wire.createEllipseWire(ellipseOpt);\n\n // Create an instance of LoftDto to define the parameters for the loft operation.\n // The generic type TopoDSShapePointer indicates the type of shapes to be lofted.\n const loftOpt = new LoftDto();\n // Assign an array of the created ellipse wires to the 'shapes' property of loftOpt.\n // These are the profiles that will be connected by the loft.\n loftOpt.shapes = [ellipse1, ellipse2, ellipse3];\n // Perform the loft operation using the defined options.\n // This will create a surface (or shell) connecting the three ellipses.\n // 'makeSolid' defaults to false, creating a shell.\n const loft = await operations.loft(loftOpt);\n\n // Create an instance of DrawOcctShapeSimpleOptions to define how the lofted shape will be displayed.\n const drawOpt = new DrawOcctShapeSimpleOptions();\n // Set the precision for drawing the shape. This affects the tessellation quality.\n drawOpt.precision = 0.001;\n // Set the color of the faces of the lofted shape.\n drawOpt.faceColour = \"#ff00ff\"; // Magenta\n // Draw the lofted shape asynchronously using the specified entity and drawing options.\n draw.drawAnyAsync({ entity: loft, options: drawOpt });\n\n}\n\n// Call the start function to execute the script.\nstart();","version":"0.20.7","type":"typescript"}} title="Simple Loft Operation" /> diff --git a/docs/learn/code/common/occt/operations/thick-solids.md b/docs/learn/code/common/occt/operations/thick-solids.md index 00cbb321..be797edf 100644 --- a/docs/learn/code/common/occt/operations/thick-solids.md +++ b/docs/learn/code/common/occt/operations/thick-solids.md @@ -63,21 +63,21 @@ The following examples demonstrate creating thick solids from complex lofted sur bottomPointsmiddlePointstopPointsbottomWiremiddleWiretopWirewireListloftSurfacethickSolidtranslatedSolidthicknessoffsetVectorsurfaceOptionssolidOptionsbottomPoints-30-2-10000110030-2middlePoints-22-1-0.521.50220.521.522-1topPoints-1.540-0.540.50410.540.51.540bottomWirebottomPointsFALSE0.1middleWiremiddlePointsFALSE0.1topWiretopPointsFALSE0.1wireListbottomWiremiddleWiretopWireloftSurfacewireListFALSEthickness0.1thickSolidloftSurfacethicknessoffsetVector003translatedSolidthickSolidoffsetVectorsurfaceOptions0.01TRUE#00ff00TRUE#ffffff2solidOptions0.01TRUE#ff6600TRUE#ffffff2loftSurfacesurfaceOptionstranslatedSolidsolidOptions","version":"0.20.6","type":"blockly"}} + script={{"script":"bottomPointsmiddlePointstopPointsbottomWiremiddleWiretopWirewireListloftSurfacethickSolidtranslatedSolidthicknessoffsetVectorsurfaceOptionssolidOptionsbottomPoints-30-2-10000110030-2middlePoints-22-1-0.521.50220.521.522-1topPoints-1.540-0.540.50410.540.51.540bottomWirebottomPointsFALSE0.1middleWiremiddlePointsFALSE0.1topWiretopPointsFALSE0.1wireListbottomWiremiddleWiretopWireloftSurfacewireListFALSEthickness0.1thickSolidloftSurfacethicknessoffsetVector003translatedSolidthickSolidoffsetVectorsurfaceOptions0.01TRUE#00ff00TRUE#ffffff2solidOptions0.01TRUE#ff6600TRUE#ffffff2loftSurfacesurfaceOptionstranslatedSolidsolidOptions","version":"0.20.7","type":"blockly"}} title="Thick Solid from Lofted Surface (Blockly)" /> {\n\n // Define points for bottom curve (wave-like pattern)\n const bottomPoints = [\n [-3, 0, -2],\n [-1, 0, 0],\n [0, 0, 1],\n [1, 0, 0],\n [3, 0, -2]\n ] as Point3[];\n\n // Define points for middle curve (elevated and more curved)\n const middlePoints = [\n [-2, 2, -1],\n [-0.5, 2, 1.5],\n [0, 2, 2],\n [0.5, 2, 1.5],\n [2, 2, -1]\n ] as Point3[];\n\n // Define points for top curve (simpler, less curved)\n const topPoints = [\n [-1.5, 4, 0],\n [-0.5, 4, 0.5],\n [0, 4, 1],\n [0.5, 4, 0.5],\n [1.5, 4, 0]\n ] as Point3[];\n\n // Create interpolated wires from points\n const bottomWireOpt = new InterpolationDto();\n bottomWireOpt.points = bottomPoints;\n bottomWireOpt.periodic = false;\n bottomWireOpt.tolerance = 0.1;\n const bottomWire = await wire.interpolatePoints(bottomWireOpt);\n\n const middleWireOpt = new InterpolationDto();\n middleWireOpt.points = middlePoints;\n middleWireOpt.periodic = false;\n middleWireOpt.tolerance = 0.1;\n const middleWire = await wire.interpolatePoints(middleWireOpt);\n\n const topWireOpt = new InterpolationDto();\n topWireOpt.points = topPoints;\n topWireOpt.periodic = false;\n topWireOpt.tolerance = 0.1;\n const topWire = await wire.interpolatePoints(topWireOpt);\n\n // Create lofted surface from the three wires\n const loftOpt = new LoftDto();\n loftOpt.shapes = [bottomWire, middleWire, topWire];\n loftOpt.makeSolid = false;\n const loftSurface = await operations.loft(loftOpt);\n\n // Create thick solid from the lofted surface\n const thickness = 0.1;\n const thickSolidOpt = new ThisckSolidSimpleDto();\n thickSolidOpt.shape = loftSurface;\n thickSolidOpt.offset = thickness;\n const thickSolid = await operations.makeThickSolidSimple(thickSolidOpt);\n\n // Translate the thick solid for better visualization\n const offsetVector = [0, 0, 3] as Vector3;\n const translateOpt = new TranslateDto();\n translateOpt.shape = thickSolid;\n translateOpt.translation = offsetVector;\n const translatedSolid = await transforms.translate(translateOpt);\n\n // Create drawing options for the original surface (green)\n const surfaceOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n surfaceOptions.precision = 0.01;\n surfaceOptions.drawFaces = true;\n surfaceOptions.faceColour = \"#00ff00\";\n surfaceOptions.drawEdges = true;\n surfaceOptions.edgeColour = \"#ffffff\";\n surfaceOptions.edgeWidth = 2;\n\n // Create drawing options for the thick solid (orange)\n const solidOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n solidOptions.precision = 0.01;\n solidOptions.drawFaces = true;\n solidOptions.faceColour = \"#ff6600\";\n solidOptions.drawEdges = true;\n solidOptions.edgeColour = \"#ffffff\";\n solidOptions.edgeWidth = 2;\n\n // Draw both the original lofted surface and the thick solid\n bitbybit.draw.drawAnyAsync({ entity: loftSurface, options: surfaceOptions });\n bitbybit.draw.drawAnyAsync({ entity: translatedSolid, options: solidOptions });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Import required modules from global bitbybit variable\nconst { wire } = bitbybit.occt.shapes;\nconst { operations } = bitbybit.occt;\nconst { transforms } = bitbybit.occt;\n\nconst { InterpolationDto, LoftDto, ThisckSolidSimpleDto, TranslateDto } = Bit.Inputs.OCCT;\ntype Point3 = Bit.Inputs.Base.Point3;\ntype Vector3 = Bit.Inputs.Base.Vector3;\n\n// Define a type alias for pointers\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\ntype TopoDSFacePointer = Bit.Inputs.OCCT.TopoDSFacePointer;\ntype TopoDSShapePointer = Bit.Inputs.OCCT.TopoDSShapePointer;\n\nconst start = async () => {\n\n // Define points for bottom curve (wave-like pattern)\n const bottomPoints = [\n [-3, 0, -2],\n [-1, 0, 0],\n [0, 0, 1],\n [1, 0, 0],\n [3, 0, -2]\n ] as Point3[];\n\n // Define points for middle curve (elevated and more curved)\n const middlePoints = [\n [-2, 2, -1],\n [-0.5, 2, 1.5],\n [0, 2, 2],\n [0.5, 2, 1.5],\n [2, 2, -1]\n ] as Point3[];\n\n // Define points for top curve (simpler, less curved)\n const topPoints = [\n [-1.5, 4, 0],\n [-0.5, 4, 0.5],\n [0, 4, 1],\n [0.5, 4, 0.5],\n [1.5, 4, 0]\n ] as Point3[];\n\n // Create interpolated wires from points\n const bottomWireOpt = new InterpolationDto();\n bottomWireOpt.points = bottomPoints;\n bottomWireOpt.periodic = false;\n bottomWireOpt.tolerance = 0.1;\n const bottomWire = await wire.interpolatePoints(bottomWireOpt);\n\n const middleWireOpt = new InterpolationDto();\n middleWireOpt.points = middlePoints;\n middleWireOpt.periodic = false;\n middleWireOpt.tolerance = 0.1;\n const middleWire = await wire.interpolatePoints(middleWireOpt);\n\n const topWireOpt = new InterpolationDto();\n topWireOpt.points = topPoints;\n topWireOpt.periodic = false;\n topWireOpt.tolerance = 0.1;\n const topWire = await wire.interpolatePoints(topWireOpt);\n\n // Create lofted surface from the three wires\n const loftOpt = new LoftDto();\n loftOpt.shapes = [bottomWire, middleWire, topWire];\n loftOpt.makeSolid = false;\n const loftSurface = await operations.loft(loftOpt);\n\n // Create thick solid from the lofted surface\n const thickness = 0.1;\n const thickSolidOpt = new ThisckSolidSimpleDto();\n thickSolidOpt.shape = loftSurface;\n thickSolidOpt.offset = thickness;\n const thickSolid = await operations.makeThickSolidSimple(thickSolidOpt);\n\n // Translate the thick solid for better visualization\n const offsetVector = [0, 0, 3] as Vector3;\n const translateOpt = new TranslateDto();\n translateOpt.shape = thickSolid;\n translateOpt.translation = offsetVector;\n const translatedSolid = await transforms.translate(translateOpt);\n\n // Create drawing options for the original surface (green)\n const surfaceOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n surfaceOptions.precision = 0.01;\n surfaceOptions.drawFaces = true;\n surfaceOptions.faceColour = \"#00ff00\";\n surfaceOptions.drawEdges = true;\n surfaceOptions.edgeColour = \"#ffffff\";\n surfaceOptions.edgeWidth = 2;\n\n // Create drawing options for the thick solid (orange)\n const solidOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n solidOptions.precision = 0.01;\n solidOptions.drawFaces = true;\n solidOptions.faceColour = \"#ff6600\";\n solidOptions.drawEdges = true;\n solidOptions.edgeColour = \"#ffffff\";\n solidOptions.edgeWidth = 2;\n\n // Draw both the original lofted surface and the thick solid\n bitbybit.draw.drawAnyAsync({ entity: loftSurface, options: surfaceOptions });\n bitbybit.draw.drawAnyAsync({ entity: translatedSolid, options: solidOptions });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Thick Solid from Lofted Surface" /> diff --git a/docs/learn/code/common/occt/operations/wire-offset-multiple.md b/docs/learn/code/common/occt/operations/wire-offset-multiple.md index 3aa69de6..d39f0972 100644 --- a/docs/learn/code/common/occt/operations/wire-offset-multiple.md +++ b/docs/learn/code/common/occt/operations/wire-offset-multiple.md @@ -31,7 +31,7 @@ The following example demonstrates creating multiple offset curves from a single @@ -39,7 +39,7 @@ The following example demonstrates creating multiple offset curves from a single controlPointsbaseWirestepoverDistanceoffset1offset2offset3baseStyleoffset1Styleoffset2Styleoffset3StylecontrolPoints-40-2-202001203400stepoverDistance0.5baseWirecontrolPointsFALSE0.01offset1baseWirestepoverDistance0.01offset2baseWireMULTIPLYstepoverDistance20.01offset3baseWireMULTIPLYstepoverDistance30.01baseStyle0.01FALSETRUE#00ff004offset1Style0.01FALSETRUE#ff99003offset2Style0.01FALSETRUE#ff66003offset3Style0.01FALSETRUE#ff33003baseWirebaseStyleoffset1offset1Styleoffset2offset2Styleoffset3offset3Style","version":"0.20.6","type":"blockly"}} + script={{"script":"controlPointsbaseWirestepoverDistanceoffset1offset2offset3baseStyleoffset1Styleoffset2Styleoffset3StylecontrolPoints-40-2-202001203400stepoverDistance0.5baseWirecontrolPointsFALSE0.01offset1baseWirestepoverDistance0.01offset2baseWireMULTIPLYstepoverDistance20.01offset3baseWireMULTIPLYstepoverDistance30.01baseStyle0.01FALSETRUE#00ff004offset1Style0.01FALSETRUE#ff99003offset2Style0.01FALSETRUE#ff66003offset3Style0.01FALSETRUE#ff33003baseWirebaseStyleoffset1offset1Styleoffset2offset2Styleoffset3offset3Style","version":"0.20.7","type":"blockly"}} title="Multiple Wire Offsets" /> @@ -47,7 +47,7 @@ The following example demonstrates creating multiple offset curves from a single {\n\n // Define the stepover distance for CNC toolpaths\n const stepoverDistance = 0.5;\n\n // Step 1: Define control points for the base toolpath\n const points = [\n [-4, 0, -2],\n [-2, 0, 2],\n [0, 0, 1],\n [2, 0, 3],\n [4, 0, 0]\n ] as Point3[];\n\n // Step 2: Create base wire through interpolation\n const interpolationOpt = new InterpolationDto();\n interpolationOpt.points = points;\n interpolationOpt.periodic = false;\n interpolationOpt.tolerance = 0.01;\n \n const baseWire = await wire.interpolatePoints(interpolationOpt);\n\n // Step 3: Create multiple offset toolpaths\n // First offset\n const offset1Opt = new OffsetDto();\n offset1Opt.shape = baseWire;\n offset1Opt.distance = stepoverDistance;\n offset1Opt.tolerance = 0.01;\n \n const offset1 = await operations.offset(offset1Opt);\n\n // Second offset\n const offset2Opt = new OffsetDto();\n offset2Opt.shape = baseWire;\n offset2Opt.distance = stepoverDistance * 2;\n offset2Opt.tolerance = 0.01;\n \n const offset2 = await operations.offset(offset2Opt);\n\n // Third offset\n const offset3Opt = new OffsetDto();\n offset3Opt.shape = baseWire;\n offset3Opt.distance = stepoverDistance * 3;\n offset3Opt.tolerance = 0.01;\n \n const offset3 = await operations.offset(offset3Opt);\n\n // Step 4: Visualize all toolpaths with different colors\n // Base wire (green - reference path)\n const baseOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n baseOptions.edgeWidth = 4;\n baseOptions.edgeColour = \"#00ff00\"; // Green\n baseOptions.drawFaces = false;\n \n // Offset 1 (orange)\n const offset1Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset1Options.edgeWidth = 3;\n offset1Options.edgeColour = \"#ff9900\"; // Orange\n offset1Options.drawFaces = false;\n \n // Offset 2 (red-orange)\n const offset2Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset2Options.edgeWidth = 3;\n offset2Options.edgeColour = \"#ff6600\"; // Red-orange\n offset2Options.drawFaces = false;\n \n // Offset 3 (red)\n const offset3Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset3Options.edgeWidth = 3;\n offset3Options.edgeColour = \"#ff3300\"; // Red\n offset3Options.drawFaces = false;\n \n // Draw all toolpaths\n bitbybit.draw.drawAnyAsync({ entity: baseWire, options: baseOptions });\n bitbybit.draw.drawAnyAsync({ entity: offset1, options: offset1Options });\n bitbybit.draw.drawAnyAsync({ entity: offset2, options: offset2Options });\n bitbybit.draw.drawAnyAsync({ entity: offset3, options: offset3Options });\n\n}\n\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Import required modules for wire creation and operations\nconst { wire } = bitbybit.occt.shapes;\nconst { operations } = bitbybit.occt;\n// Import DTOs for interpolation and offset operations\nconst { InterpolationDto, OffsetDto } = Bit.Inputs.OCCT;\ntype TopoDSWirePointer = Bit.Inputs.OCCT.TopoDSWirePointer;\ntype Point3 = Bit.Inputs.Base.Point3;\n\nconst start = async () => {\n\n // Define the stepover distance for CNC toolpaths\n const stepoverDistance = 0.5;\n\n // Step 1: Define control points for the base toolpath\n const points = [\n [-4, 0, -2],\n [-2, 0, 2],\n [0, 0, 1],\n [2, 0, 3],\n [4, 0, 0]\n ] as Point3[];\n\n // Step 2: Create base wire through interpolation\n const interpolationOpt = new InterpolationDto();\n interpolationOpt.points = points;\n interpolationOpt.periodic = false;\n interpolationOpt.tolerance = 0.01;\n \n const baseWire = await wire.interpolatePoints(interpolationOpt);\n\n // Step 3: Create multiple offset toolpaths\n // First offset\n const offset1Opt = new OffsetDto();\n offset1Opt.shape = baseWire;\n offset1Opt.distance = stepoverDistance;\n offset1Opt.tolerance = 0.01;\n \n const offset1 = await operations.offset(offset1Opt);\n\n // Second offset\n const offset2Opt = new OffsetDto();\n offset2Opt.shape = baseWire;\n offset2Opt.distance = stepoverDistance * 2;\n offset2Opt.tolerance = 0.01;\n \n const offset2 = await operations.offset(offset2Opt);\n\n // Third offset\n const offset3Opt = new OffsetDto();\n offset3Opt.shape = baseWire;\n offset3Opt.distance = stepoverDistance * 3;\n offset3Opt.tolerance = 0.01;\n \n const offset3 = await operations.offset(offset3Opt);\n\n // Step 4: Visualize all toolpaths with different colors\n // Base wire (green - reference path)\n const baseOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n baseOptions.edgeWidth = 4;\n baseOptions.edgeColour = \"#00ff00\"; // Green\n baseOptions.drawFaces = false;\n \n // Offset 1 (orange)\n const offset1Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset1Options.edgeWidth = 3;\n offset1Options.edgeColour = \"#ff9900\"; // Orange\n offset1Options.drawFaces = false;\n \n // Offset 2 (red-orange)\n const offset2Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset2Options.edgeWidth = 3;\n offset2Options.edgeColour = \"#ff6600\"; // Red-orange\n offset2Options.drawFaces = false;\n \n // Offset 3 (red)\n const offset3Options = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n offset3Options.edgeWidth = 3;\n offset3Options.edgeColour = \"#ff3300\"; // Red\n offset3Options.drawFaces = false;\n \n // Draw all toolpaths\n bitbybit.draw.drawAnyAsync({ entity: baseWire, options: baseOptions });\n bitbybit.draw.drawAnyAsync({ entity: offset1, options: offset1Options });\n bitbybit.draw.drawAnyAsync({ entity: offset2, options: offset2Options });\n bitbybit.draw.drawAnyAsync({ entity: offset3, options: offset3Options });\n\n}\n\nstart();","version":"0.20.7","type":"typescript"}} title="Multiple Wire Offsets" /> diff --git a/docs/learn/code/common/occt/shapes/edge/edge-indexes.mdx b/docs/learn/code/common/occt/shapes/edge/edge-indexes.mdx index 1ae32618..e39c5a46 100644 --- a/docs/learn/code/common/occt/shapes/edge/edge-indexes.mdx +++ b/docs/learn/code/common/occt/shapes/edge/edge-indexes.mdx @@ -42,21 +42,21 @@ Below are examples in TypeScript, Blockly, and Rete that demonstrate creating a **TypeScript Example: Drawing Edge Indexes** {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const drawOpt = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n drawOpt.drawEdgeIndexes = true;\n drawOpt.faceOpacity = 0.3;\n drawOpt.edgeOpacity = 0.3;\n drawOpt.edgeIndexHeight = 0.24\n\n bitbybit.draw.drawAnyAsync({\n entity: box,\n options: drawOpt\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const boxOpt = new Bit.Inputs.OCCT.BoxDto();\n boxOpt.width = 5;\n boxOpt.length = 8;\n boxOpt.height = 10;\n const box = await bitbybit.occt.shapes.solid.createBox(boxOpt);\n\n const drawOpt = new Bit.Inputs.Draw.DrawOcctShapeOptions();\n drawOpt.drawEdgeIndexes = true;\n drawOpt.faceOpacity = 0.3;\n drawOpt.edgeOpacity = 0.3;\n drawOpt.edgeIndexHeight = 0.24\n\n bitbybit.draw.drawAnyAsync({\n entity: box,\n options: drawOpt\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Edge Indexing" /> **Blockly Example: Drawing Edge Indexes** 58100000.30.3#ffffff#ff00002TRUETRUE0.01TRUE0.24#ff00ffFALSE0.06#0000ff","version":"0.20.6","type":"blockly"}} + script={{"script":"58100000.30.3#ffffff#ff00002TRUETRUE0.01TRUE0.24#ff00ffFALSE0.06#0000ff","version":"0.20.7","type":"blockly"}} title="Edge Indexing" /> **Rete Example: Drawing Edge Indexes** diff --git a/docs/learn/getting-started/basics/assets/local/gltf.mdx b/docs/learn/getting-started/basics/assets/local/gltf.mdx index 0ed278bc..26703fbf 100644 --- a/docs/learn/getting-started/basics/assets/local/gltf.mdx +++ b/docs/learn/getting-started/basics/assets/local/gltf.mdx @@ -59,7 +59,7 @@ Your Rete graph should now look similar to the setup in the embedded editor belo **Rete Editor Example:** @@ -101,7 +101,7 @@ After assembling the blocks, click "Run". You should see the BoomBox model. **Blockly Editor Example:** TRUEBoomBoxFALSE","version":"0.20.6","type":"blockly"}} + script={{"script":"TRUEBoomBoxFALSE","version":"0.20.7","type":"blockly"}} title="Bitbybit Blockly Editor - Using Local glTF Asset" description="Upload local asset from tutorial named accordingly and it will appear in 3D scene after you hit run." /> @@ -126,7 +126,7 @@ Here's the example code, which should be fairly self-explanatory for those famil **TypeScript Editor Example:** {\n bitbybit.babylon.scene.useRightHandedSystem({\n use: true,\n });\n const file = await bitbybit.asset.getLocalFile({\n fileName: \"BoomBox\"\n }) as File;\n await bitbybit.babylon.io.loadAssetIntoScene({\n assetFile: file,\n hidden: false\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n bitbybit.babylon.scene.useRightHandedSystem({\n use: true,\n });\n const file = await bitbybit.asset.getLocalFile({\n fileName: \"BoomBox\"\n }) as File;\n await bitbybit.babylon.io.loadAssetIntoScene({\n assetFile: file,\n hidden: false\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Bitbybit Blockly Editor - Using Local glTF Asset" description="Upload local asset from tutorial named accordingly and it will appear in 3D scene after you hit run." /> diff --git a/docs/learn/getting-started/basics/assets/local/step.mdx b/docs/learn/getting-started/basics/assets/local/step.mdx index d67fc086..09114a6a 100644 --- a/docs/learn/getting-started/basics/assets/local/step.mdx +++ b/docs/learn/getting-started/basics/assets/local/step.mdx @@ -54,7 +54,7 @@ That's it! Your Rete graph should be set up. It might take a moment for the Kuka **Rete Editor Example:** @@ -95,7 +95,7 @@ After assembling the blocks, click "Run". **Blockly Editor Example:** KukaRobotTRUE","version":"0.20.6","type":"blockly"}} + script={{"script":"KukaRobotTRUE","version":"0.20.7","type":"blockly"}} title="Bitbybit Blockly Editor - Using Local STEP Asset" description="Upload local asset from tutorial named accordingly and it will appear in 3D scene after you hit run." /> @@ -122,7 +122,7 @@ Here's an example of how to do that: **TypeScript Editor Example:** {\n\n const file = await bitbybit.asset.getLocalFile({\n fileName: \"KukaRobot\"\n }) as File;\n\n const shape = await bitbybit.occt.io.loadSTEPorIGES({\n assetFile: file,\n adjustZtoY: true,\n });\n\n bitbybit.draw.drawAnyAsync({\n entity: shape\n })\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n\n const file = await bitbybit.asset.getLocalFile({\n fileName: \"KukaRobot\"\n }) as File;\n\n const shape = await bitbybit.occt.io.loadSTEPorIGES({\n assetFile: file,\n adjustZtoY: true,\n });\n\n bitbybit.draw.drawAnyAsync({\n entity: shape\n })\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Bitbybit TypeScript Editor - Using Local STEP Asset" description="Upload local asset from tutorial named accordingly and it will appear in 3D scene after you hit run." /> diff --git a/docs/learn/getting-started/blockly/hello-world.mdx b/docs/learn/getting-started/blockly/hello-world.mdx index d196e77d..d92465a4 100644 --- a/docs/learn/getting-started/blockly/hello-world.mdx +++ b/docs/learn/getting-started/blockly/hello-world.mdx @@ -56,7 +56,7 @@ Your setup should resemble this interactive example: Hello World!'Aboreto''Regular'1.50.20000010'leftTop'","version":"0.20.6","type":"blockly"}} + script={{"script":"Hello World!'Aboreto''Regular'1.50.20000010'leftTop'","version":"0.20.7","type":"blockly"}} title="Draw 3D Text" description="Draws the text on the screen." /> @@ -88,7 +88,7 @@ After completing these steps, your Blockly script should look similar to this: 40040010100.450.50.5FALSE#ffffff#ffffffHello World!'Roboto''Regular'1.50.2-9000000-1'centerBottom'","version":"0.20.6","type":"blockly"}} + script={{"script":"40040010100.450.50.5FALSE#ffffff#ffffffHello World!'Roboto''Regular'1.50.2-9000000-1'centerBottom'","version":"0.20.7","type":"blockly"}} title="Draw 3D text and grid" description="Draws 3D text and the grid on the screen. Text is placed in better orientation." /> diff --git a/docs/learn/getting-started/blockly/parametric-cube.mdx b/docs/learn/getting-started/blockly/parametric-cube.mdx index 7638ced0..3d53a204 100644 --- a/docs/learn/getting-started/blockly/parametric-cube.mdx +++ b/docs/learn/getting-started/blockly/parametric-cube.mdx @@ -69,7 +69,7 @@ Your Blockly workspace should now look something like this interactive example: sizesize3size000","version":"0.20.6","type":"blockly"}} + script={{"script":"sizesize3size000","version":"0.20.7","type":"blockly"}} title="Parametric cube example" description="Draws the parametrically controlled cube." /> diff --git a/docs/learn/getting-started/rete/hello-world.mdx b/docs/learn/getting-started/rete/hello-world.mdx index 7e2c8433..20e72293 100644 --- a/docs/learn/getting-started/rete/hello-world.mdx +++ b/docs/learn/getting-started/rete/hello-world.mdx @@ -41,7 +41,7 @@ If you've done it correctly, your canvas should have the "Draw Grid Mesh" compon @@ -79,7 +79,7 @@ The setup should resemble this: @@ -109,7 +109,7 @@ Here's the final result you should aim for: diff --git a/docs/learn/getting-started/rete/parametric-cube.mdx b/docs/learn/getting-started/rete/parametric-cube.mdx index ba6584b9..19cbf1a2 100644 --- a/docs/learn/getting-started/rete/parametric-cube.mdx +++ b/docs/learn/getting-started/rete/parametric-cube.mdx @@ -44,7 +44,7 @@ We'll use the OpenCascade Technology (OCCT) geometry kernel to create our cube. @@ -69,7 +69,7 @@ If you've connected them correctly, your setup should resemble the following int diff --git a/docs/learn/getting-started/typescript/hello-world.mdx b/docs/learn/getting-started/typescript/hello-world.mdx index d63679a9..f08b0f73 100644 --- a/docs/learn/getting-started/typescript/hello-world.mdx +++ b/docs/learn/getting-started/typescript/hello-world.mdx @@ -26,7 +26,7 @@ Check out the script below: {\n const gridOptions = new Bit.Inputs.Draw.SceneDrawGridMeshDto();\n bitbybit.draw.drawGridMesh(gridOptions);\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const gridOptions = new Bit.Inputs.Draw.SceneDrawGridMeshDto();\n bitbybit.draw.drawGridMesh(gridOptions);\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Draw the grid" description="Draws the grid mesh with lines in 3D space." /> @@ -51,7 +51,7 @@ The script below shows a working example. We've set the `rotation` to -90 degree {\n const gridOptions = new Bit.Inputs.Draw.SceneDrawGridMeshDto();\n bitbybit.draw.drawGridMesh(gridOptions);\n\n const textOpt = new Bit.Advanced.Text3D.Text3DDto();\n textOpt.text = \"Hello World!\";\n textOpt.rotation = -90;\n textOpt.originAlignment = Bit.Advanced.Text3D.recAlignmentEnum.centerBottom;\n textOpt.direction = [0, 0, -1];\n const text3D = await bitbybit.advanced.text3d.create(textOpt);\n\n bitbybit.draw.drawAnyAsync({\n entity: text3D\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const gridOptions = new Bit.Inputs.Draw.SceneDrawGridMeshDto();\n bitbybit.draw.drawGridMesh(gridOptions);\n\n const textOpt = new Bit.Advanced.Text3D.Text3DDto();\n textOpt.text = \"Hello World!\";\n textOpt.rotation = -90;\n textOpt.originAlignment = Bit.Advanced.Text3D.recAlignmentEnum.centerBottom;\n textOpt.direction = [0, 0, -1];\n const text3D = await bitbybit.advanced.text3d.create(textOpt);\n\n bitbybit.draw.drawAnyAsync({\n entity: text3D\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Draw the text & grid" description="Draws the grid mesh with text in 3D space." /> diff --git a/docs/learn/getting-started/typescript/how-to-code-in-monaco.md b/docs/learn/getting-started/typescript/how-to-code-in-monaco.md index c6acf4bd..58d05e19 100644 --- a/docs/learn/getting-started/typescript/how-to-code-in-monaco.md +++ b/docs/learn/getting-started/typescript/how-to-code-in-monaco.md @@ -197,7 +197,7 @@ start(); {\n // Step 3a: Create input objects (DTOs) and set their properties for a cube\n const cubeOptions = new CubeDto(); // Instantiate the DTO\n cubeOptions.size = 6; // Set the cube's size\n // Call the bitbybit function to create the cube, awaiting its promise\n const cube: TopoDSShapePointer = await solid.createCube(cubeOptions);\n\n // Step 3b: Create input objects (DTOs) for a sphere\n const sphereOptions = new SphereDto();\n sphereOptions.radius = 3;\n sphereOptions.center = [3, 3, -3]; // Define center as [x, y, z] coordinates\n const sphere: TopoDSShapePointer = await solid.createSphere(sphereOptions);\n\n // Step 4: Perform geometric operations\n // Example: Boolean difference (subtract sphere from cube)\n const diffOptions = new DifferenceDto(); // Generic type for the shapes involved\n diffOptions.shape = cube; // The base shape\n diffOptions.shapes = [sphere]; // An array of shapes to subtract\n const diff: TopoDSShapePointer = await booleans.difference(diffOptions);\n\n // Example: Apply fillets (round edges) to the result of the difference\n const roundingOptions = new FilletDto();\n roundingOptions.shape = diff; // The shape to fillet\n roundingOptions.radius = 1; // The radius of the fillet\n // Note: Some operations might have specific methods like 'filletEdges' for common tasks\n const solidRoundedCorners: TopoDSShapePointer = await fillets.filletEdges(roundingOptions);\n\n // Step 5: Visualize the result in the 3D viewer\n // Prepare drawing options to customize appearance\n const occtDrawOptions = new DrawOcctShapeOptions();\n occtDrawOptions.faceColour = \"#0000ff\"; // Blue faces\n occtDrawOptions.edgeColour = \"#ff00ff\"; // Magenta edges\n occtDrawOptions.edgeWidth = 5; // Width of the edges\n occtDrawOptions.precision = 0.001; // Rendering precision for complex shapes (lower is finer)\n // Draw the final shape. 'drawAnyAsync' is a versatile function for drawing various entity types.\n draw.drawAnyAsync({ entity: solidRoundedCorners, options: occtDrawOptions });\n\n // Step 6: (Optional) Adjust scene elements like lighting for better visualization\n const dirLight = new DirectionalLightDto();\n dirLight.shadowGeneratorMapSize = 2000; // Higher values for better shadow quality\n dirLight.intensity = 3; // Light intensity\n scene.drawDirectionalLight(dirLight); // Adds or updates a directional light in the scene\n\n // Step 7: (Optional) Export your model to common CAD file formats\n // Export as STEP file (a common format for solid models)\n const stepExportOptions = new SaveStepDto();\n stepExportOptions.shape = solidRoundedCorners;\n stepExportOptions.adjustYtoZ = true; // Optional: Adjusts coordinate system (Y-up to Z-up) if needed\n stepExportOptions.fileName = \"cube_with_sphere_cutout.step\";\n stepExportOptions.tryDownload = true; // Attempts to trigger a browser download of the file\n await io.saveShapeSTEP(stepExportOptions); // Use the destructured 'io'\n\n // Export as STL file (a common format for 3D printing)\n const stlExportOptions = new SaveStlDto();\n stlExportOptions.shape = solidRoundedCorners;\n stlExportOptions.adjustYtoZ = true;\n stlExportOptions.fileName = \"cube_with_sphere_cutout.stl\";\n stlExportOptions.precision = 0.001; // Affects STL mesh quality (smaller values for finer mesh)\n stlExportOptions.tryDownload = true;\n await io.saveShapeStl(stlExportOptions); // Use the destructured 'io'\n};\n\n// Step 8: Call the start function to execute your script\nstart();","version":"0.20.6","type":"typescript"}} + script={{"script":"// Step 1: (Optional but Recommended) Destructure for convenience\n// This makes your code less verbose and easier to read.\nconst { solid } = bitbybit.occt.shapes;\nconst { booleans, fillets, io } = bitbybit.occt; // Added 'io' for export functions\nconst { draw } = bitbybit;\nconst { scene } = bitbybit.babylon;\n\n// Step 2: Import type definitions for input objects and shapes\n// This enables type checking and autocompletion.\ntype TopoDSShapePointer = Bit.Inputs.OCCT.TopoDSShapePointer; // Represents an OCCT shape\n\nconst { CubeDto, SphereDto, FilletDto, DifferenceDto, SaveStepDto, SaveStlDto } = Bit.Inputs.OCCT;\nconst DrawOcctShapeOptions = Bit.Inputs.Draw.DrawOcctShapeOptions;\nconst DirectionalLightDto = Bit.Inputs.BabylonScene.DirectionalLightDto;\n\n// Step 3: Define your main logic within an async function\nconst start = async () => {\n // Step 3a: Create input objects (DTOs) and set their properties for a cube\n const cubeOptions = new CubeDto(); // Instantiate the DTO\n cubeOptions.size = 6; // Set the cube's size\n // Call the bitbybit function to create the cube, awaiting its promise\n const cube: TopoDSShapePointer = await solid.createCube(cubeOptions);\n\n // Step 3b: Create input objects (DTOs) for a sphere\n const sphereOptions = new SphereDto();\n sphereOptions.radius = 3;\n sphereOptions.center = [3, 3, -3]; // Define center as [x, y, z] coordinates\n const sphere: TopoDSShapePointer = await solid.createSphere(sphereOptions);\n\n // Step 4: Perform geometric operations\n // Example: Boolean difference (subtract sphere from cube)\n const diffOptions = new DifferenceDto(); // Generic type for the shapes involved\n diffOptions.shape = cube; // The base shape\n diffOptions.shapes = [sphere]; // An array of shapes to subtract\n const diff: TopoDSShapePointer = await booleans.difference(diffOptions);\n\n // Example: Apply fillets (round edges) to the result of the difference\n const roundingOptions = new FilletDto();\n roundingOptions.shape = diff; // The shape to fillet\n roundingOptions.radius = 1; // The radius of the fillet\n // Note: Some operations might have specific methods like 'filletEdges' for common tasks\n const solidRoundedCorners: TopoDSShapePointer = await fillets.filletEdges(roundingOptions);\n\n // Step 5: Visualize the result in the 3D viewer\n // Prepare drawing options to customize appearance\n const occtDrawOptions = new DrawOcctShapeOptions();\n occtDrawOptions.faceColour = \"#0000ff\"; // Blue faces\n occtDrawOptions.edgeColour = \"#ff00ff\"; // Magenta edges\n occtDrawOptions.edgeWidth = 5; // Width of the edges\n occtDrawOptions.precision = 0.001; // Rendering precision for complex shapes (lower is finer)\n // Draw the final shape. 'drawAnyAsync' is a versatile function for drawing various entity types.\n draw.drawAnyAsync({ entity: solidRoundedCorners, options: occtDrawOptions });\n\n // Step 6: (Optional) Adjust scene elements like lighting for better visualization\n const dirLight = new DirectionalLightDto();\n dirLight.shadowGeneratorMapSize = 2000; // Higher values for better shadow quality\n dirLight.intensity = 3; // Light intensity\n scene.drawDirectionalLight(dirLight); // Adds or updates a directional light in the scene\n\n // Step 7: (Optional) Export your model to common CAD file formats\n // Export as STEP file (a common format for solid models)\n const stepExportOptions = new SaveStepDto();\n stepExportOptions.shape = solidRoundedCorners;\n stepExportOptions.adjustYtoZ = true; // Optional: Adjusts coordinate system (Y-up to Z-up) if needed\n stepExportOptions.fileName = \"cube_with_sphere_cutout.step\";\n stepExportOptions.tryDownload = true; // Attempts to trigger a browser download of the file\n await io.saveShapeSTEP(stepExportOptions); // Use the destructured 'io'\n\n // Export as STL file (a common format for 3D printing)\n const stlExportOptions = new SaveStlDto();\n stlExportOptions.shape = solidRoundedCorners;\n stlExportOptions.adjustYtoZ = true;\n stlExportOptions.fileName = \"cube_with_sphere_cutout.stl\";\n stlExportOptions.precision = 0.001; // Affects STL mesh quality (smaller values for finer mesh)\n stlExportOptions.tryDownload = true;\n await io.saveShapeStl(stlExportOptions); // Use the destructured 'io'\n};\n\n// Step 8: Call the start function to execute your script\nstart();","version":"0.20.7","type":"typescript"}} title="Create And Download STEP & STL 3D Models" description="Contains example code that can be executed directly inside the editor by clicking Run button." /> diff --git a/docs/learn/getting-started/typescript/parametric-cube.mdx b/docs/learn/getting-started/typescript/parametric-cube.mdx index 5dcf4ec6..84de087e 100644 --- a/docs/learn/getting-started/typescript/parametric-cube.mdx +++ b/docs/learn/getting-started/typescript/parametric-cube.mdx @@ -35,7 +35,7 @@ The script shown in the editor below is fairly straightforward, but let's break {\n const size = 10;\n const cubeOptions = new Bit.Inputs.OCCT.CubeDto();\n cubeOptions.size = size;\n const cube = await bitbybit.occt.shapes.solid.createCube(cubeOptions);\n\n bitbybit.draw.drawAnyAsync({\n entity: cube\n });\n}\n\nstart();\n","version":"0.20.6","type":"typescript"}} + script={{"script":"const start = async () => {\n const size = 10;\n const cubeOptions = new Bit.Inputs.OCCT.CubeDto();\n cubeOptions.size = size;\n const cube = await bitbybit.occt.shapes.solid.createCube(cubeOptions);\n\n bitbybit.draw.drawAnyAsync({\n entity: cube\n });\n}\n\nstart();\n","version":"0.20.7","type":"typescript"}} title="Draw the grid" description="Draws the grid mesh with lines in 3D space." /> diff --git a/docs/learn/runners/intro-blockly.mdx b/docs/learn/runners/intro-blockly.mdx index 6b72c1d6..46931d93 100644 --- a/docs/learn/runners/intro-blockly.mdx +++ b/docs/learn/runners/intro-blockly.mdx @@ -48,7 +48,7 @@ The following Bitbybit Blockly script is the visual program we'll be creating. T sizecubeMeshsizesizesizesize1cubeMeshsize0000.40.005TRUE#000099TRUE#ffffff1cubeMeshcubeMesh","version":"0.20.6","type":"blockly"}} + script={{"script":"sizecubeMeshsizesizesizesize1cubeMeshsize0000.40.005TRUE#000099TRUE#ffffff1cubeMeshcubeMesh","version":"0.20.7","type":"blockly"}} title="Bitbybit Blockly Editor - Simple Cube for Runner Tutorial" description="Draws 3D Cube and controls its size via inputs coming from external executing program" /> @@ -68,7 +68,7 @@ Below are the `index.html` and `script.js` files you would use on StackBlitz or - + diff --git a/docs/learn/runners/intro-rete.mdx b/docs/learn/runners/intro-rete.mdx index 25f90094..39288234 100644 --- a/docs/learn/runners/intro-rete.mdx +++ b/docs/learn/runners/intro-rete.mdx @@ -51,7 +51,7 @@ The following Bitbybit Rete script is the visual program we'll be creating. The diff --git a/docs/learn/runners/intro-typescript.mdx b/docs/learn/runners/intro-typescript.mdx index 9066feda..e70d57ee 100644 --- a/docs/learn/runners/intro-typescript.mdx +++ b/docs/learn/runners/intro-typescript.mdx @@ -46,7 +46,7 @@ The following is the Bitbybit TypeScript script we'll be creating. The JavaScrip {\n const cube = await occt.shapes.solid.createCube({\n size: inputs.size,\n center: [0, 0, 0],\n });\n const filletCube = await occt.fillets.filletEdges({\n shape: cube,\n radius: 0.4\n });\n const drawOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n drawOptions.faceColour = \"#0000ff\";\n drawOptions.edgeWidth = 1;\n drawOptions.precision = 0.005;\n const cubeMesh = await bitbybit.draw.drawAnyAsync({\n entity: filletCube,\n options: drawOptions,\n });\n return { cubeMesh };\n}\n\nconst runnerOutput = start();\nBit.setBitbybitRunnerResult(runnerOutput);\n","version":"0.20.6","type":"typescript"}} + script={{"script":"type Inputs = {\n size: number;\n}\n\nBit.mockBitbybitRunnerInputs({ size: 1 });\nconst inputs: Inputs = Bit.getBitbybitRunnerInputs();\n\nconst { occt } = bitbybit;\n\nconst start = async () => {\n const cube = await occt.shapes.solid.createCube({\n size: inputs.size,\n center: [0, 0, 0],\n });\n const filletCube = await occt.fillets.filletEdges({\n shape: cube,\n radius: 0.4\n });\n const drawOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n drawOptions.faceColour = \"#0000ff\";\n drawOptions.edgeWidth = 1;\n drawOptions.precision = 0.005;\n const cubeMesh = await bitbybit.draw.drawAnyAsync({\n entity: filletCube,\n options: drawOptions,\n });\n return { cubeMesh };\n}\n\nconst runnerOutput = start();\nBit.setBitbybitRunnerResult(runnerOutput);\n","version":"0.20.7","type":"typescript"}} title="Bitbybit TypeScript Editor - Simple Cube for Runner Tutorial" description="Draws 3D Cube and controls its size via inputs coming from external executing program" /> diff --git a/docs/learn/runners/live-examples/configurable-cad-part.mdx b/docs/learn/runners/live-examples/configurable-cad-part.mdx index 5f4a1ba2..aff97798 100644 --- a/docs/learn/runners/live-examples/configurable-cad-part.mdx +++ b/docs/learn/runners/live-examples/configurable-cad-part.mdx @@ -30,7 +30,7 @@ Below is an interactive preview of the Rete visual program. Notice how this scri diff --git a/docs/learn/runners/table-configurator-blockly.mdx b/docs/learn/runners/table-configurator-blockly.mdx index 5e371a57..e0ec77a5 100644 --- a/docs/learn/runners/table-configurator-blockly.mdx +++ b/docs/learn/runners/table-configurator-blockly.mdx @@ -46,7 +46,7 @@ The following Bitbybit Blockly script is the visual program that defines the log widthlengthlegHeightheighthalfLegheightthicknesshalfThicknesswidthOffsetlengthOffsetlegShapecompoundShapetable'clearSky'10000.10.7-100-100-1003#ffffff#ffffff1024TRUE0legHeightMINUSheightthicknesshalfLegheightDIVIDElegHeight2halfThicknessDIVIDEthickness2widthOffsetMINUSDIVIDEwidth2halfThicknesslengthOffsetMINUSDIVIDElength2halfThicknesslegShapethicknessthicknesslegHeight000compoundShapewidthlengththickness0MINUSheighthalfThickness0legShapewidthOffsethalfLegheightlengthOffsetlegShapeNEGwidthOffsethalfLegheightlengthOffsetlegShapewidthOffsethalfLegheightNEGlengthOffsetlegShapeNEGwidthOffsethalfLegheightNEGlengthOffset2000010tablecompoundShape0.01TRUE#999999TRUE#ffffff1tabletablesetupParamsDescribe this function...widthwidthlengthlengthheightheightthicknessthicknesswidthwidth1lengthlength1heightheight0.5thicknessthickness0.05","version":"0.20.6","type":"blockly"}} + script={{"script":"widthlengthlegHeightheighthalfLegheightthicknesshalfThicknesswidthOffsetlengthOffsetlegShapecompoundShapetable'clearSky'10000.10.7-100-100-1003#ffffff#ffffff1024TRUE0legHeightMINUSheightthicknesshalfLegheightDIVIDElegHeight2halfThicknessDIVIDEthickness2widthOffsetMINUSDIVIDEwidth2halfThicknesslengthOffsetMINUSDIVIDElength2halfThicknesslegShapethicknessthicknesslegHeight000compoundShapewidthlengththickness0MINUSheighthalfThickness0legShapewidthOffsethalfLegheightlengthOffsetlegShapeNEGwidthOffsethalfLegheightlengthOffsetlegShapewidthOffsethalfLegheightNEGlengthOffsetlegShapeNEGwidthOffsethalfLegheightNEGlengthOffset2000010tablecompoundShape0.01TRUE#999999TRUE#ffffff1tabletablesetupParamsDescribe this function...widthwidthlengthlengthheightheightthicknessthicknesswidthwidth1lengthlength1heightheight0.5thicknessthickness0.05","version":"0.20.7","type":"blockly"}} title="Bitbybit Blockly Editor - Simple Cube for Runner Tutorial" description="Draws 3D Table and controls its size via inputs coming from external executing program" /> @@ -66,7 +66,7 @@ Below are the `index.html` and `script.js` files you would use on StackBlitz or - + diff --git a/docs/learn/runners/table-configurator-rete.mdx b/docs/learn/runners/table-configurator-rete.mdx index 0a643f4c..1f0dc346 100644 --- a/docs/learn/runners/table-configurator-rete.mdx +++ b/docs/learn/runners/table-configurator-rete.mdx @@ -46,7 +46,7 @@ The following Bitbybit Rete script is the visual program that defines the logic diff --git a/docs/learn/runners/table-configurator-typescript.mdx b/docs/learn/runners/table-configurator-typescript.mdx index 50a2f2b1..543c618e 100644 --- a/docs/learn/runners/table-configurator-typescript.mdx +++ b/docs/learn/runners/table-configurator-typescript.mdx @@ -51,7 +51,7 @@ The following Bitbybit TypeScript script is the program that defines the logic f {\n\n const skyboxOptions = new Bit.Inputs.BabylonScene.SkyboxDto();\n skyboxOptions.skybox = Bit.Inputs.Base.skyboxEnum.clearSky;\n bitbybit.babylon.scene.enableSkybox(skyboxOptions);\n\n const lightOptions = new Bit.Inputs.BabylonScene.DirectionalLightDto();\n lightOptions.intensity = 3;\n bitbybit.babylon.scene.drawDirectionalLight(lightOptions);\n\n const tableTopShape = await solid.createBox({\n width: inputs.width,\n length: inputs.length,\n height: inputs.thickness,\n center: [0, inputs.height - halfThickness, 0],\n });\n\n const leg1Shape = await solid.createBox({\n width: inputs.thickness,\n length: inputs.thickness,\n height: legHeight,\n center: [widthOffset, halfLegHeight, lengthOffset],\n });\n const leg2Shape = await solid.createBox({\n width: inputs.thickness,\n length: inputs.thickness,\n height: legHeight,\n center: [-widthOffset, halfLegHeight, lengthOffset],\n });\n const leg3Shape = await solid.createBox({\n width: inputs.thickness,\n length: inputs.thickness,\n height: legHeight,\n center: [widthOffset, halfLegHeight, -lengthOffset],\n });\n const leg4Shape = await solid.createBox({\n width: inputs.thickness,\n length: inputs.thickness,\n height: legHeight,\n center: [-widthOffset, halfLegHeight, -lengthOffset],\n });\n\n const groundShape = await face.createCircleFace({\n radius: 2,\n center: [0, 0, 0],\n direction: [0, 1, 0]\n });\n\n const compoundShape = await compound.makeCompound({\n shapes: [tableTopShape, leg1Shape, leg2Shape, leg3Shape, leg4Shape, groundShape],\n });\n\n const drawOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n drawOptions.faceColour = \"#555577\";\n drawOptions.edgeWidth = 1;\n const table = await bitbybit.draw.drawAnyAsync({ entity: compoundShape, options: drawOptions });\n return { table };\n}\n\nconst runnerOutput = start();\nBit.setBitbybitRunnerResult(runnerOutput);\n","version":"0.20.6","type":"typescript"}} + script={{"script":"type Inputs = {\n width: number;\n length: number;\n height: number;\n thickness: number;\n};\n\nconst defaultValues: Inputs = {\n width: 1,\n length: 1,\n height: 0.5,\n thickness: 0.05,\n};\n\nBit.mockBitbybitRunnerInputs(defaultValues);\nconst inputs: Inputs = Bit.getBitbybitRunnerInputs();\n\nconst { solid, compound, face } = bitbybit.occt.shapes;\n\nconst legHeight = inputs.height - inputs.thickness;\nconst halfLegHeight = legHeight / 2;\nconst halfThickness = inputs.thickness / 2;\nconst widthOffset = inputs.width / 2 - halfThickness;\nconst lengthOffset = inputs.length / 2 - halfThickness;\n\n\nconst start = async () => {\n\n const skyboxOptions = new Bit.Inputs.BabylonScene.SkyboxDto();\n skyboxOptions.skybox = Bit.Inputs.Base.skyboxEnum.clearSky;\n bitbybit.babylon.scene.enableSkybox(skyboxOptions);\n\n const lightOptions = new Bit.Inputs.BabylonScene.DirectionalLightDto();\n lightOptions.intensity = 3;\n bitbybit.babylon.scene.drawDirectionalLight(lightOptions);\n\n const tableTopShape = await solid.createBox({\n width: inputs.width,\n length: inputs.length,\n height: inputs.thickness,\n center: [0, inputs.height - halfThickness, 0],\n });\n\n const leg1Shape = await solid.createBox({\n width: inputs.thickness,\n length: inputs.thickness,\n height: legHeight,\n center: [widthOffset, halfLegHeight, lengthOffset],\n });\n const leg2Shape = await solid.createBox({\n width: inputs.thickness,\n length: inputs.thickness,\n height: legHeight,\n center: [-widthOffset, halfLegHeight, lengthOffset],\n });\n const leg3Shape = await solid.createBox({\n width: inputs.thickness,\n length: inputs.thickness,\n height: legHeight,\n center: [widthOffset, halfLegHeight, -lengthOffset],\n });\n const leg4Shape = await solid.createBox({\n width: inputs.thickness,\n length: inputs.thickness,\n height: legHeight,\n center: [-widthOffset, halfLegHeight, -lengthOffset],\n });\n\n const groundShape = await face.createCircleFace({\n radius: 2,\n center: [0, 0, 0],\n direction: [0, 1, 0]\n });\n\n const compoundShape = await compound.makeCompound({\n shapes: [tableTopShape, leg1Shape, leg2Shape, leg3Shape, leg4Shape, groundShape],\n });\n\n const drawOptions = new Bit.Inputs.Draw.DrawOcctShapeSimpleOptions();\n drawOptions.faceColour = \"#555577\";\n drawOptions.edgeWidth = 1;\n const table = await bitbybit.draw.drawAnyAsync({ entity: compoundShape, options: drawOptions });\n return { table };\n}\n\nconst runnerOutput = start();\nBit.setBitbybitRunnerResult(runnerOutput);\n","version":"0.20.7","type":"typescript"}} title="Bitbybit TypeScript Editor - 3D Table Configurator" description="Draws 3D Table and controls its size via inputs coming from external executing program" /> diff --git a/examples/angular/babylonjs/laptop-holder/package-lock.json b/examples/angular/babylonjs/laptop-holder/package-lock.json index 8cbf6be5..a43b0780 100644 --- a/examples/angular/babylonjs/laptop-holder/package-lock.json +++ b/examples/angular/babylonjs/laptop-holder/package-lock.json @@ -17,7 +17,7 @@ "@angular/platform-browser": "13.3.0", "@angular/platform-browser-dynamic": "13.3.0", "@angular/router": "13.3.0", - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "rxjs": "7.5.5", "tslib": "2.3.1", "zone.js": "0.11.5" @@ -2331,15 +2331,15 @@ } }, "node_modules/@babylonjs/core": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.26.2.tgz", - "integrity": "sha512-wzAm6l/StYBIZQdXLrXKg8YmexeQCsLPWgC6K8ypitKnpjuztbEdaXhwvlpLyeE8ammF6ZsQlPzODMfawDwAHg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.29.1.tgz", + "integrity": "sha512-hZZjiR1FvfWN/Mg07Bo/pzLKfkGYMCMnPsq1ic5UngAvfeVcNmK70l18/2iQlBrC94uSrMeMtCVY6cPxHWKsgg==", "license": "Apache-2.0" }, "node_modules/@babylonjs/gui": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.26.2.tgz", - "integrity": "sha512-hyT1lyFaYfQBdWdbyFj7H5xlhJOcTxXi8oOMGE3Qqg6Ib2RTiUBQZ+QHf1eNzy29WsW3KOQ4lrYVMm1p/cLVfg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.29.1.tgz", + "integrity": "sha512-z115xTfoNc8t2MkDkeTOg+Fk8FdNNMj/EtWYzXnjO2HS3cSixM/ZawA4MgEqhWOvEmODKBJKvFokxPLaPSRZiQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0" @@ -2354,9 +2354,9 @@ } }, "node_modules/@babylonjs/loaders": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.26.2.tgz", - "integrity": "sha512-Me/bhbbeqGvuX4+UsIP3p4kmPCBrKB1iZJh1bYG5/bk8VQA0R4teOu5nQ/Y4lfYjdVtfDDm/UfeRPKPv3Pd0Kg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.29.1.tgz", + "integrity": "sha512-tBJv24VAdZW30BYxvwrMERDLHnxBjnC68NrMmb66B9Hs7sEl+e59nluEc2zpSSQVtdY8P8+c9F+LbqqliQLuwA==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -2364,18 +2364,18 @@ } }, "node_modules/@babylonjs/materials": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.26.2.tgz", - "integrity": "sha512-/fp8CxH+frcXaPHL7o2JlDvlHrmU0qKRVy6R+HejofVa8cvMMbZkUZJ9MTZdQZGCeEm58DfDbx4SrVDTZtRp5w==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.29.1.tgz", + "integrity": "sha512-bJZPDOfm1IWMMPEUTD416z8/dGpQ3mb0xF543cyEKNuZfiofpvxm6/3jF3SKf9PAVi5+hTgsRI9isCkoVehiYQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.6.0" } }, "node_modules/@babylonjs/serializers": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.26.2.tgz", - "integrity": "sha512-qAyb58bJALeQxomgCBFUky9OPgCKavzUtWgYw5AoKioMkFXKZEvWPvEmAlqCU9ZJfJUsaA4l2EvR3SX8+0I7yQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.29.1.tgz", + "integrity": "sha512-t7aNW5rh3LXBGeD8KfeEG0s5mzOsqgWHJ+VXQtb9lPkpnSeNj2nl7yY2QuRUuapNITJhvlee2J61CRIdyWNPfg==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -2383,49 +2383,49 @@ } }, "node_modules/@bitbybit-dev/babylonjs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.6.tgz", - "integrity": "sha512-npnhjj3JiAyKgtS5fnuSxnKBPIjIkkWCcIP+6NfFyO1yFk8s68bm1LTkYgBnhCIS51tXIFwJ4WLDmjqHRtw8OA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.7.tgz", + "integrity": "sha512-PjjAZj5Ovdj0qHkh6EE89fhWReGBZ7M7ymJrQuVmhVKjLoKWd86Wn1in61JLoCJfwFUDvPw6I3NWn9yETMO62g==", "license": "MIT", "dependencies": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", "@babylonjs/havok": "1.3.10", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", - "@bitbybit-dev/core": "0.20.6", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", + "@bitbybit-dev/core": "0.20.7", "earcut": "2.2.3" } }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -2434,50 +2434,50 @@ } }, "node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, "node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -3688,9 +3688,9 @@ } }, "node_modules/babylonjs-gltf2interface": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.26.2.tgz", - "integrity": "sha512-ByWxrtoyE0LalDiJ/rtuqy6h3tWApJ42uVNwCNuuBHyHZE6Hh6U1k6LW4uQxeppfXQWvRRGzEpkmlftttAS58Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.29.1.tgz", + "integrity": "sha512-H3wfdujcU+sEirffc55ucZyaH15+x4q+woem7QuabdcqN18ShPYedcDTl6kyuMjsDF3O6UA0z7VxyG60mA1pJg==", "license": "Apache-2.0", "peer": true }, @@ -13719,14 +13719,14 @@ } }, "@babylonjs/core": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.26.2.tgz", - "integrity": "sha512-wzAm6l/StYBIZQdXLrXKg8YmexeQCsLPWgC6K8ypitKnpjuztbEdaXhwvlpLyeE8ammF6ZsQlPzODMfawDwAHg==" + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.29.1.tgz", + "integrity": "sha512-hZZjiR1FvfWN/Mg07Bo/pzLKfkGYMCMnPsq1ic5UngAvfeVcNmK70l18/2iQlBrC94uSrMeMtCVY6cPxHWKsgg==" }, "@babylonjs/gui": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.26.2.tgz", - "integrity": "sha512-hyT1lyFaYfQBdWdbyFj7H5xlhJOcTxXi8oOMGE3Qqg6Ib2RTiUBQZ+QHf1eNzy29WsW3KOQ4lrYVMm1p/cLVfg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.29.1.tgz", + "integrity": "sha512-z115xTfoNc8t2MkDkeTOg+Fk8FdNNMj/EtWYzXnjO2HS3cSixM/ZawA4MgEqhWOvEmODKBJKvFokxPLaPSRZiQ==", "requires": {} }, "@babylonjs/havok": { @@ -13738,63 +13738,63 @@ } }, "@babylonjs/loaders": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.26.2.tgz", - "integrity": "sha512-Me/bhbbeqGvuX4+UsIP3p4kmPCBrKB1iZJh1bYG5/bk8VQA0R4teOu5nQ/Y4lfYjdVtfDDm/UfeRPKPv3Pd0Kg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.29.1.tgz", + "integrity": "sha512-tBJv24VAdZW30BYxvwrMERDLHnxBjnC68NrMmb66B9Hs7sEl+e59nluEc2zpSSQVtdY8P8+c9F+LbqqliQLuwA==", "requires": {} }, "@babylonjs/materials": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.26.2.tgz", - "integrity": "sha512-/fp8CxH+frcXaPHL7o2JlDvlHrmU0qKRVy6R+HejofVa8cvMMbZkUZJ9MTZdQZGCeEm58DfDbx4SrVDTZtRp5w==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.29.1.tgz", + "integrity": "sha512-bJZPDOfm1IWMMPEUTD416z8/dGpQ3mb0xF543cyEKNuZfiofpvxm6/3jF3SKf9PAVi5+hTgsRI9isCkoVehiYQ==", "requires": {} }, "@babylonjs/serializers": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.26.2.tgz", - "integrity": "sha512-qAyb58bJALeQxomgCBFUky9OPgCKavzUtWgYw5AoKioMkFXKZEvWPvEmAlqCU9ZJfJUsaA4l2EvR3SX8+0I7yQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.29.1.tgz", + "integrity": "sha512-t7aNW5rh3LXBGeD8KfeEG0s5mzOsqgWHJ+VXQtb9lPkpnSeNj2nl7yY2QuRUuapNITJhvlee2J61CRIdyWNPfg==", "requires": {} }, "@bitbybit-dev/babylonjs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.6.tgz", - "integrity": "sha512-npnhjj3JiAyKgtS5fnuSxnKBPIjIkkWCcIP+6NfFyO1yFk8s68bm1LTkYgBnhCIS51tXIFwJ4WLDmjqHRtw8OA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.7.tgz", + "integrity": "sha512-PjjAZj5Ovdj0qHkh6EE89fhWReGBZ7M7ymJrQuVmhVKjLoKWd86Wn1in61JLoCJfwFUDvPw6I3NWn9yETMO62g==", "requires": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", "@babylonjs/havok": "1.3.10", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", - "@bitbybit-dev/core": "0.20.6", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", + "@bitbybit-dev/core": "0.20.7", "earcut": "2.2.3" } }, "@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==" + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==" }, "@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", - "requires": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", + "requires": { + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "requires": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -13803,45 +13803,45 @@ } }, "@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "requires": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "requires": { "manifold-3d": "3.0.0" } }, "@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "requires": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "requires": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "requires": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -14847,9 +14847,9 @@ } }, "babylonjs-gltf2interface": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.26.2.tgz", - "integrity": "sha512-ByWxrtoyE0LalDiJ/rtuqy6h3tWApJ42uVNwCNuuBHyHZE6Hh6U1k6LW4uQxeppfXQWvRRGzEpkmlftttAS58Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.29.1.tgz", + "integrity": "sha512-H3wfdujcU+sEirffc55ucZyaH15+x4q+woem7QuabdcqN18ShPYedcDTl6kyuMjsDF3O6UA0z7VxyG60mA1pJg==", "peer": true }, "balanced-match": { diff --git a/examples/angular/babylonjs/laptop-holder/package.json b/examples/angular/babylonjs/laptop-holder/package.json index f4f3a4f2..b35797a5 100644 --- a/examples/angular/babylonjs/laptop-holder/package.json +++ b/examples/angular/babylonjs/laptop-holder/package.json @@ -10,7 +10,7 @@ }, "private": true, "dependencies": { - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "@angular/animations": "13.3.0", "@angular/common": "13.3.0", "@angular/compiler": "13.3.0", diff --git a/examples/angular/threejs/simple/package-lock.json b/examples/angular/threejs/simple/package-lock.json index ea07ddf7..bf8fd374 100644 --- a/examples/angular/threejs/simple/package-lock.json +++ b/examples/angular/threejs/simple/package-lock.json @@ -17,7 +17,7 @@ "@angular/platform-browser": "13.3.0", "@angular/platform-browser-dynamic": "13.3.0", "@angular/router": "13.3.0", - "@bitbybit-dev/threejs": "0.20.6", + "@bitbybit-dev/threejs": "0.20.7", "rxjs": "7.5.5", "tslib": "2.3.1", "zone.js": "0.11.5" @@ -2330,44 +2330,34 @@ "node": ">=6.9.0" } }, - "node_modules/@bitbybit-dev/threejs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-0.20.6.tgz", - "integrity": "sha512-b7XdWXGmDZM7NhgU5XDErRAwI94VqBL1CDYSOYailnpZOXPp/QNHXZkOSg+zElUMWP8iTYptpzgVoTqmHlxEwg==", - "license": "MIT", - "dependencies": { - "@bitbybit-dev/core": "0.20.6", - "three": "0.179.1" - } - }, - "node_modules/@bitbybit-dev/threejs/node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "node_modules/@bitbybit-dev/base": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, - "node_modules/@bitbybit-dev/threejs/node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "node_modules/@bitbybit-dev/core": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, - "node_modules/@bitbybit-dev/threejs/node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "node_modules/@bitbybit-dev/jscad": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -2375,54 +2365,64 @@ "@jscad/stl-serializer": "2.1.18" } }, - "node_modules/@bitbybit-dev/threejs/node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "node_modules/@bitbybit-dev/jscad-worker": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, - "node_modules/@bitbybit-dev/threejs/node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "node_modules/@bitbybit-dev/manifold": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, - "node_modules/@bitbybit-dev/threejs/node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "node_modules/@bitbybit-dev/manifold-worker": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, - "node_modules/@bitbybit-dev/threejs/node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "node_modules/@bitbybit-dev/occt": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, - "node_modules/@bitbybit-dev/threejs/node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "node_modules/@bitbybit-dev/occt-worker": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, + "node_modules/@bitbybit-dev/threejs": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-0.20.7.tgz", + "integrity": "sha512-sa/PHehdMQ/vDsacuvrsD5tkwnAnpviQAEC9Jr+ng2YDswAGGdUc7Gq5ITlxNMx1/9lhuXEwGGDGYIhAHXyj0w==", + "license": "MIT", + "dependencies": { + "@bitbybit-dev/core": "0.20.7", + "three": "0.180.0" + } + }, "node_modules/@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", @@ -2528,6 +2528,7 @@ "version": "2.1.12", "resolved": "https://registry.npmjs.org/@jscad/3mf-serializer/-/3mf-serializer-2.1.12.tgz", "integrity": "sha512-+rxAIKIHCpaplupwwsdXtG1IdimPXFFB45nrjy6gdFHi36bEQW6y/RQD/ngenRiKnYSxu7/M0LatHcjve8z64A==", + "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", "@jscad/modeling": "2.12.3", @@ -2538,12 +2539,14 @@ "node_modules/@jscad/array-utils": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@jscad/array-utils/-/array-utils-2.1.4.tgz", - "integrity": "sha512-c31r4zSKsE+4Xfwk2V8monDA0hx5G89QGzaakWVUvuGNowYS9WSsYCwHiTIXodjR+HEnDu4okQ7k/whmP0Ne2g==" + "integrity": "sha512-c31r4zSKsE+4Xfwk2V8monDA0hx5G89QGzaakWVUvuGNowYS9WSsYCwHiTIXodjR+HEnDu4okQ7k/whmP0Ne2g==", + "license": "MIT" }, "node_modules/@jscad/dxf-serializer": { "version": "2.1.18", "resolved": "https://registry.npmjs.org/@jscad/dxf-serializer/-/dxf-serializer-2.1.18.tgz", "integrity": "sha512-T5Qe2jbEphcWAk7GaOY8PCMD4DPhTm6gWk/MPJCExphhnUwJqcU/1RiMb5hiD+N6hHzmlxD59I8QTjlp9LbLSA==", + "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", "@jscad/modeling": "2.12.3" @@ -2552,17 +2555,20 @@ "node_modules/@jscad/io-utils": { "version": "2.0.28", "resolved": "https://registry.npmjs.org/@jscad/io-utils/-/io-utils-2.0.28.tgz", - "integrity": "sha512-spXh37wAgmwjKztoH/HANLgImcqRHX5+H/cRIxPfpqDIWvu7I5bRg2ZTwh25SYlKIzxPk4qX5Nu7Ax5+Kg+QXQ==" + "integrity": "sha512-spXh37wAgmwjKztoH/HANLgImcqRHX5+H/cRIxPfpqDIWvu7I5bRg2ZTwh25SYlKIzxPk4qX5Nu7Ax5+Kg+QXQ==", + "license": "MIT" }, "node_modules/@jscad/modeling": { "version": "2.12.3", "resolved": "https://registry.npmjs.org/@jscad/modeling/-/modeling-2.12.3.tgz", - "integrity": "sha512-DnAacXq3zhlYWIixGlFD7RMpgZAMuCaMZNQov0NaoFfs2GaBuTC5eqkqKcEVbhEerBmTllbjjF5IXjJMt9jcOA==" + "integrity": "sha512-DnAacXq3zhlYWIixGlFD7RMpgZAMuCaMZNQov0NaoFfs2GaBuTC5eqkqKcEVbhEerBmTllbjjF5IXjJMt9jcOA==", + "license": "MIT" }, "node_modules/@jscad/stl-serializer": { "version": "2.1.18", "resolved": "https://registry.npmjs.org/@jscad/stl-serializer/-/stl-serializer-2.1.18.tgz", "integrity": "sha512-pz++TRjHI7jBPnnxQUi4B/uYUG3yCDsKlw8+xL2kumwjb+auc6Ng6Rnr/GqUTkgHrnGut08wg/8AekyWjvBwYg==", + "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", "@jscad/modeling": "2.12.3" @@ -2572,6 +2578,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", + "license": "MIT", "engines": { "node": ">= 10.16.0" }, @@ -2583,6 +2590,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", + "license": "MIT", "engines": { "node": ">= 10.16.0" }, @@ -3688,6 +3696,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" @@ -5865,7 +5874,8 @@ "node_modules/fflate": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.3.tgz", - "integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==" + "integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==", + "license": "MIT" }, "node_modules/figures": { "version": "3.2.0", @@ -5969,6 +5979,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", "optional": true }, "node_modules/fill-range": { @@ -7263,6 +7274,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", + "license": "MIT", "engines": { "node": ">= 10.16.0" } @@ -7340,6 +7352,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.1.0.tgz", "integrity": "sha512-gHfV1IYqH8uJHYVTs8BJX1XKy2/rR93+f8QQi0xhx95aCiXn1ettYAd5T+7FU6wfqyDoX/wy0pm/fL3jOKJ9Lg==", + "license": "MIT", "dependencies": { "@jsep-plugin/assignment": "^1.2.1", "@jsep-plugin/regex": "^1.0.3", @@ -7915,7 +7928,8 @@ "node_modules/manifold-3d": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/manifold-3d/-/manifold-3d-3.0.0.tgz", - "integrity": "sha512-6XxRf5LH4s7WIlRrvtzLMg+CHio5TznIE0w0PU/Ad8IzD36QLjb64QdSeQp9ISrk4tGtIqVAycevpPe1ExGTKg==" + "integrity": "sha512-6XxRf5LH4s7WIlRrvtzLMg+CHio5TznIE0w0PU/Ad8IzD36QLjb64QdSeQp9ISrk4tGtIqVAycevpPe1ExGTKg==", + "license": "Apache-2.0" }, "node_modules/media-typer": { "version": "0.3.0", @@ -8232,6 +8246,7 @@ "version": "2.23.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", + "license": "MIT", "optional": true }, "node_modules/nanoid": { @@ -8749,6 +8764,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/onml/-/onml-1.2.0.tgz", "integrity": "sha512-olqYAg18XoHAhm7tK9DdBCOVdts70DGmMgCNLOWyqZokht2utgGSKBB4JHi6pBZpmioAhcYlxK+91L3tsrz+GA==", + "license": "MIT", "dependencies": { "sax": "^1.2.1" } @@ -11157,9 +11173,9 @@ "dev": true }, "node_modules/three": { - "version": "0.179.1", - "resolved": "https://registry.npmjs.org/three/-/three-0.179.1.tgz", - "integrity": "sha512-5y/elSIQbrvKOISxpwXCR4sQqHtGiOI+MKLc3SsBdDXA2hz3Mdp3X59aUp8DyybMa34aeBwbFTpdoLJaUDEWSw==", + "version": "0.180.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz", + "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==", "license": "MIT" }, "node_modules/through": { @@ -11497,6 +11513,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/verb-nurbs-web/-/verb-nurbs-web-2.1.3.tgz", "integrity": "sha512-2PvI2bx7dn0r3kWtk+JuDIDZ+p7I5Piu8y6/ZNhUVpilOyHKK1nNzLHtgown+dFOmBnKnuAKIMh1xn/5kzrxZA==", + "license": "MIT", "optionalDependencies": { "webworker-threads": "^0.7.12" } @@ -11847,6 +11864,7 @@ "resolved": "https://registry.npmjs.org/webworker-threads/-/webworker-threads-0.7.17.tgz", "integrity": "sha512-Y2w2aXBbDLk9IzTEb9u+MsODC3s4YlGI7g4h0t+1OAwIO8yBI9rQL35ZYlyayiCuWu1dZMH/P7kGU8OwW7YsyA==", "hasInstallScript": true, + "license": "(MIT AND Apache-2.0)", "optional": true, "dependencies": { "bindings": "^1.3.0", @@ -13631,90 +13649,88 @@ "to-fast-properties": "^2.0.0" } }, + "@bitbybit-dev/base": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==" + }, + "@bitbybit-dev/core": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", + "requires": { + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", + "jsonpath-plus": "10.1.0", + "rxjs": "7.5.5", + "verb-nurbs-web": "2.1.3" + } + }, + "@bitbybit-dev/jscad": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", + "requires": { + "@bitbybit-dev/base": "0.20.7", + "@jscad/3mf-serializer": "2.1.12", + "@jscad/dxf-serializer": "2.1.18", + "@jscad/io-utils": "2.0.28", + "@jscad/modeling": "2.12.3", + "@jscad/stl-serializer": "2.1.18" + } + }, + "@bitbybit-dev/jscad-worker": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", + "requires": { + "@bitbybit-dev/jscad": "0.20.7", + "rxjs": "7.5.5" + } + }, + "@bitbybit-dev/manifold": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", + "requires": { + "manifold-3d": "3.0.0" + } + }, + "@bitbybit-dev/manifold-worker": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", + "requires": { + "@bitbybit-dev/manifold": "0.20.7", + "rxjs": "7.5.5" + } + }, + "@bitbybit-dev/occt": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", + "requires": { + "@bitbybit-dev/base": "0.20.7" + } + }, + "@bitbybit-dev/occt-worker": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", + "requires": { + "@bitbybit-dev/occt": "0.20.7", + "rxjs": "7.5.5" + } + }, "@bitbybit-dev/threejs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-0.20.6.tgz", - "integrity": "sha512-b7XdWXGmDZM7NhgU5XDErRAwI94VqBL1CDYSOYailnpZOXPp/QNHXZkOSg+zElUMWP8iTYptpzgVoTqmHlxEwg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-0.20.7.tgz", + "integrity": "sha512-sa/PHehdMQ/vDsacuvrsD5tkwnAnpviQAEC9Jr+ng2YDswAGGdUc7Gq5ITlxNMx1/9lhuXEwGGDGYIhAHXyj0w==", "requires": { - "@bitbybit-dev/core": "0.20.6", - "three": "0.179.1" - }, - "dependencies": { - "@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==" - }, - "@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", - "requires": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", - "jsonpath-plus": "10.1.0", - "rxjs": "7.5.5", - "verb-nurbs-web": "2.1.3" - } - }, - "@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", - "requires": { - "@bitbybit-dev/base": "0.20.6", - "@jscad/3mf-serializer": "2.1.12", - "@jscad/dxf-serializer": "2.1.18", - "@jscad/io-utils": "2.0.28", - "@jscad/modeling": "2.12.3", - "@jscad/stl-serializer": "2.1.18" - } - }, - "@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", - "requires": { - "@bitbybit-dev/jscad": "0.20.6", - "rxjs": "7.5.5" - } - }, - "@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", - "requires": { - "manifold-3d": "3.0.0" - } - }, - "@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", - "requires": { - "@bitbybit-dev/manifold": "0.20.6", - "rxjs": "7.5.5" - } - }, - "@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", - "requires": { - "@bitbybit-dev/base": "0.20.6" - } - }, - "@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", - "requires": { - "@bitbybit-dev/occt": "0.20.6", - "rxjs": "7.5.5" - } - } + "@bitbybit-dev/core": "0.20.7", + "three": "0.180.0" } }, "@cspotcode/source-map-consumer": { @@ -20247,9 +20263,9 @@ "dev": true }, "three": { - "version": "0.179.1", - "resolved": "https://registry.npmjs.org/three/-/three-0.179.1.tgz", - "integrity": "sha512-5y/elSIQbrvKOISxpwXCR4sQqHtGiOI+MKLc3SsBdDXA2hz3Mdp3X59aUp8DyybMa34aeBwbFTpdoLJaUDEWSw==" + "version": "0.180.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz", + "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==" }, "through": { "version": "2.3.8", diff --git a/examples/angular/threejs/simple/package.json b/examples/angular/threejs/simple/package.json index 468a0896..6876deea 100644 --- a/examples/angular/threejs/simple/package.json +++ b/examples/angular/threejs/simple/package.json @@ -10,7 +10,7 @@ }, "private": true, "dependencies": { - "@bitbybit-dev/threejs": "0.20.6", + "@bitbybit-dev/threejs": "0.20.7", "@angular/animations": "13.3.0", "@angular/common": "13.3.0", "@angular/compiler": "13.3.0", diff --git a/examples/angular/threejs/vite-basic-example/package-lock.json b/examples/angular/threejs/vite-basic-example/package-lock.json index 49cd091d..f8372cbf 100644 --- a/examples/angular/threejs/vite-basic-example/package-lock.json +++ b/examples/angular/threejs/vite-basic-example/package-lock.json @@ -13,7 +13,7 @@ "@angular/forms": "^20.0.0", "@angular/platform-browser": "^20.0.0", "@angular/router": "^20.0.0", - "@bitbybit-dev/threejs": "0.20.6", + "@bitbybit-dev/threejs": "0.20.7", "rxjs": "7.5.5", "tslib": "^2.5.0", "zone.js": "~0.15.0" @@ -929,33 +929,33 @@ } }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -964,61 +964,61 @@ } }, "node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, "node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/threejs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-0.20.6.tgz", - "integrity": "sha512-b7XdWXGmDZM7NhgU5XDErRAwI94VqBL1CDYSOYailnpZOXPp/QNHXZkOSg+zElUMWP8iTYptpzgVoTqmHlxEwg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-0.20.7.tgz", + "integrity": "sha512-sa/PHehdMQ/vDsacuvrsD5tkwnAnpviQAEC9Jr+ng2YDswAGGdUc7Gq5ITlxNMx1/9lhuXEwGGDGYIhAHXyj0w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/core": "0.20.6", - "three": "0.179.1" + "@bitbybit-dev/core": "0.20.7", + "three": "0.180.0" } }, "node_modules/@dimforge/rapier3d-compat": { @@ -8111,9 +8111,9 @@ "license": "ISC" }, "node_modules/three": { - "version": "0.179.1", - "resolved": "https://registry.npmjs.org/three/-/three-0.179.1.tgz", - "integrity": "sha512-5y/elSIQbrvKOISxpwXCR4sQqHtGiOI+MKLc3SsBdDXA2hz3Mdp3X59aUp8DyybMa34aeBwbFTpdoLJaUDEWSw==", + "version": "0.180.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz", + "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==", "license": "MIT" }, "node_modules/tinyglobby": { diff --git a/examples/angular/threejs/vite-basic-example/package.json b/examples/angular/threejs/vite-basic-example/package.json index 07308b27..ea60e452 100644 --- a/examples/angular/threejs/vite-basic-example/package.json +++ b/examples/angular/threejs/vite-basic-example/package.json @@ -14,7 +14,7 @@ "@angular/forms": "^20.0.0", "@angular/platform-browser": "^20.0.0", "@angular/router": "^20.0.0", - "@bitbybit-dev/threejs": "0.20.6", + "@bitbybit-dev/threejs": "0.20.7", "rxjs": "7.5.5", "tslib": "^2.5.0", "zone.js": "~0.15.0" diff --git a/examples/angular/threejs/vite-basic-example/src/workers/manifold.worker.ts b/examples/angular/threejs/vite-basic-example/src/workers/manifold.worker.ts index 6512b09d..40119847 100644 --- a/examples/angular/threejs/vite-basic-example/src/workers/manifold.worker.ts +++ b/examples/angular/threejs/vite-basic-example/src/workers/manifold.worker.ts @@ -7,7 +7,7 @@ import Module from "manifold-3d"; const init = async () => { const wasm = await Module({ locateFile: () => { - return "https://cdn.jsdelivr.net/gh/bitbybit-dev/bitbybit-assets@0.20.6/wasm/manifold.cc2ddd38.wasm"; + return "https://cdn.jsdelivr.net/gh/bitbybit-dev/bitbybit-assets@0.20.7/wasm/manifold.cc2ddd38.wasm"; }, }); wasm.setup(); diff --git a/examples/nextjs/babylonjs/simple/package-lock.json b/examples/nextjs/babylonjs/simple/package-lock.json index 7d36c1da..fd8a5ad4 100644 --- a/examples/nextjs/babylonjs/simple/package-lock.json +++ b/examples/nextjs/babylonjs/simple/package-lock.json @@ -8,7 +8,7 @@ "name": "simple", "version": "0.1.0", "dependencies": { - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "file-loader": "6.2.0", "next": "15.0.1", "react": "19.0.0-rc-69d4b800-20241021", @@ -38,15 +38,15 @@ } }, "node_modules/@babylonjs/core": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.26.2.tgz", - "integrity": "sha512-wzAm6l/StYBIZQdXLrXKg8YmexeQCsLPWgC6K8ypitKnpjuztbEdaXhwvlpLyeE8ammF6ZsQlPzODMfawDwAHg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.29.1.tgz", + "integrity": "sha512-hZZjiR1FvfWN/Mg07Bo/pzLKfkGYMCMnPsq1ic5UngAvfeVcNmK70l18/2iQlBrC94uSrMeMtCVY6cPxHWKsgg==", "license": "Apache-2.0" }, "node_modules/@babylonjs/gui": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.26.2.tgz", - "integrity": "sha512-hyT1lyFaYfQBdWdbyFj7H5xlhJOcTxXi8oOMGE3Qqg6Ib2RTiUBQZ+QHf1eNzy29WsW3KOQ4lrYVMm1p/cLVfg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.29.1.tgz", + "integrity": "sha512-z115xTfoNc8t2MkDkeTOg+Fk8FdNNMj/EtWYzXnjO2HS3cSixM/ZawA4MgEqhWOvEmODKBJKvFokxPLaPSRZiQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0" @@ -61,9 +61,9 @@ } }, "node_modules/@babylonjs/loaders": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.26.2.tgz", - "integrity": "sha512-Me/bhbbeqGvuX4+UsIP3p4kmPCBrKB1iZJh1bYG5/bk8VQA0R4teOu5nQ/Y4lfYjdVtfDDm/UfeRPKPv3Pd0Kg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.29.1.tgz", + "integrity": "sha512-tBJv24VAdZW30BYxvwrMERDLHnxBjnC68NrMmb66B9Hs7sEl+e59nluEc2zpSSQVtdY8P8+c9F+LbqqliQLuwA==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -71,18 +71,18 @@ } }, "node_modules/@babylonjs/materials": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.26.2.tgz", - "integrity": "sha512-/fp8CxH+frcXaPHL7o2JlDvlHrmU0qKRVy6R+HejofVa8cvMMbZkUZJ9MTZdQZGCeEm58DfDbx4SrVDTZtRp5w==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.29.1.tgz", + "integrity": "sha512-bJZPDOfm1IWMMPEUTD416z8/dGpQ3mb0xF543cyEKNuZfiofpvxm6/3jF3SKf9PAVi5+hTgsRI9isCkoVehiYQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.6.0" } }, "node_modules/@babylonjs/serializers": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.26.2.tgz", - "integrity": "sha512-qAyb58bJALeQxomgCBFUky9OPgCKavzUtWgYw5AoKioMkFXKZEvWPvEmAlqCU9ZJfJUsaA4l2EvR3SX8+0I7yQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.29.1.tgz", + "integrity": "sha512-t7aNW5rh3LXBGeD8KfeEG0s5mzOsqgWHJ+VXQtb9lPkpnSeNj2nl7yY2QuRUuapNITJhvlee2J61CRIdyWNPfg==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -90,49 +90,49 @@ } }, "node_modules/@bitbybit-dev/babylonjs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.6.tgz", - "integrity": "sha512-npnhjj3JiAyKgtS5fnuSxnKBPIjIkkWCcIP+6NfFyO1yFk8s68bm1LTkYgBnhCIS51tXIFwJ4WLDmjqHRtw8OA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.7.tgz", + "integrity": "sha512-PjjAZj5Ovdj0qHkh6EE89fhWReGBZ7M7ymJrQuVmhVKjLoKWd86Wn1in61JLoCJfwFUDvPw6I3NWn9yETMO62g==", "license": "MIT", "dependencies": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", "@babylonjs/havok": "1.3.10", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", - "@bitbybit-dev/core": "0.20.6", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", + "@bitbybit-dev/core": "0.20.7", "earcut": "2.2.3" } }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -141,50 +141,50 @@ } }, "node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, "node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -1773,9 +1773,9 @@ } }, "node_modules/babylonjs-gltf2interface": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.26.2.tgz", - "integrity": "sha512-ByWxrtoyE0LalDiJ/rtuqy6h3tWApJ42uVNwCNuuBHyHZE6Hh6U1k6LW4uQxeppfXQWvRRGzEpkmlftttAS58Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.29.1.tgz", + "integrity": "sha512-H3wfdujcU+sEirffc55ucZyaH15+x4q+woem7QuabdcqN18ShPYedcDTl6kyuMjsDF3O6UA0z7VxyG60mA1pJg==", "license": "Apache-2.0", "peer": true }, diff --git a/examples/nextjs/babylonjs/simple/package.json b/examples/nextjs/babylonjs/simple/package.json index 0e59c6b0..4fea21ac 100644 --- a/examples/nextjs/babylonjs/simple/package.json +++ b/examples/nextjs/babylonjs/simple/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "react": "19.0.0-rc-69d4b800-20241021", "react-dom": "19.0.0-rc-69d4b800-20241021", "next": "15.0.1", diff --git a/examples/node/basic/package-lock.json b/examples/node/basic/package-lock.json index 1ba7423a..255bf496 100644 --- a/examples/node/basic/package-lock.json +++ b/examples/node/basic/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "^0.20.6" + "@bitbybit-dev/occt": "^0.20.7" }, "devDependencies": { "concurrently": "^7.6.0", @@ -34,18 +34,18 @@ } }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/ansi-regex": { diff --git a/examples/node/basic/package.json b/examples/node/basic/package.json index 8eaf7f6f..8ee43a3d 100644 --- a/examples/node/basic/package.json +++ b/examples/node/basic/package.json @@ -15,7 +15,7 @@ "node": ">=20.19.4" }, "dependencies": { - "@bitbybit-dev/occt": "^0.20.6" + "@bitbybit-dev/occt": "^0.20.7" }, "devDependencies": { "extensionless": "1.9.9", diff --git a/examples/node/express-app/package-lock.json b/examples/node/express-app/package-lock.json index 852d70ca..8f0b801a 100644 --- a/examples/node/express-app/package-lock.json +++ b/examples/node/express-app/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@bitbybit-dev/core": "0.20.6", + "@bitbybit-dev/core": "0.20.7", "cors": "^2.8.5", "dotenv": "^16.0.3", "express": "^4.18.2", @@ -23,6 +23,9 @@ "extensionless": "1.9.9", "nodemon": "^2.0.20", "typescript": "^4.9.4" + }, + "engines": { + "node": ">=20.19.4" } }, "node_modules/@babel/runtime": { @@ -38,33 +41,33 @@ } }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -73,50 +76,50 @@ } }, "node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, "node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -1850,30 +1853,30 @@ } }, "@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==" + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==" }, "@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", - "requires": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", + "requires": { + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "requires": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -1882,45 +1885,45 @@ } }, "@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "requires": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "requires": { "manifold-3d": "3.0.0" } }, "@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "requires": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "requires": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "requires": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, diff --git a/examples/node/express-app/package.json b/examples/node/express-app/package.json index fda3b760..0e1ca9c6 100644 --- a/examples/node/express-app/package.json +++ b/examples/node/express-app/package.json @@ -11,7 +11,7 @@ "author": "Bit By Bit Developers", "license": "MIT", "dependencies": { - "@bitbybit-dev/core": "0.20.6", + "@bitbybit-dev/core": "0.20.7", "cors": "^2.8.5", "dotenv": "^16.0.3", "express": "^4.18.2", diff --git a/examples/nuxt/babylonjs/basic/package-lock.json b/examples/nuxt/babylonjs/basic/package-lock.json index c83ef517..52cd5c7d 100644 --- a/examples/nuxt/babylonjs/basic/package-lock.json +++ b/examples/nuxt/babylonjs/basic/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "@pinia/nuxt": "^0.5.4", "nuxt": "^3.13.0", "pinia": "^2.2.2", @@ -486,15 +486,15 @@ } }, "node_modules/@babylonjs/core": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.26.2.tgz", - "integrity": "sha512-wzAm6l/StYBIZQdXLrXKg8YmexeQCsLPWgC6K8ypitKnpjuztbEdaXhwvlpLyeE8ammF6ZsQlPzODMfawDwAHg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.29.1.tgz", + "integrity": "sha512-hZZjiR1FvfWN/Mg07Bo/pzLKfkGYMCMnPsq1ic5UngAvfeVcNmK70l18/2iQlBrC94uSrMeMtCVY6cPxHWKsgg==", "license": "Apache-2.0" }, "node_modules/@babylonjs/gui": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.26.2.tgz", - "integrity": "sha512-hyT1lyFaYfQBdWdbyFj7H5xlhJOcTxXi8oOMGE3Qqg6Ib2RTiUBQZ+QHf1eNzy29WsW3KOQ4lrYVMm1p/cLVfg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.29.1.tgz", + "integrity": "sha512-z115xTfoNc8t2MkDkeTOg+Fk8FdNNMj/EtWYzXnjO2HS3cSixM/ZawA4MgEqhWOvEmODKBJKvFokxPLaPSRZiQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0" @@ -509,9 +509,9 @@ } }, "node_modules/@babylonjs/loaders": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.26.2.tgz", - "integrity": "sha512-Me/bhbbeqGvuX4+UsIP3p4kmPCBrKB1iZJh1bYG5/bk8VQA0R4teOu5nQ/Y4lfYjdVtfDDm/UfeRPKPv3Pd0Kg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.29.1.tgz", + "integrity": "sha512-tBJv24VAdZW30BYxvwrMERDLHnxBjnC68NrMmb66B9Hs7sEl+e59nluEc2zpSSQVtdY8P8+c9F+LbqqliQLuwA==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -519,18 +519,18 @@ } }, "node_modules/@babylonjs/materials": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.26.2.tgz", - "integrity": "sha512-/fp8CxH+frcXaPHL7o2JlDvlHrmU0qKRVy6R+HejofVa8cvMMbZkUZJ9MTZdQZGCeEm58DfDbx4SrVDTZtRp5w==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.29.1.tgz", + "integrity": "sha512-bJZPDOfm1IWMMPEUTD416z8/dGpQ3mb0xF543cyEKNuZfiofpvxm6/3jF3SKf9PAVi5+hTgsRI9isCkoVehiYQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.6.0" } }, "node_modules/@babylonjs/serializers": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.26.2.tgz", - "integrity": "sha512-qAyb58bJALeQxomgCBFUky9OPgCKavzUtWgYw5AoKioMkFXKZEvWPvEmAlqCU9ZJfJUsaA4l2EvR3SX8+0I7yQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.29.1.tgz", + "integrity": "sha512-t7aNW5rh3LXBGeD8KfeEG0s5mzOsqgWHJ+VXQtb9lPkpnSeNj2nl7yY2QuRUuapNITJhvlee2J61CRIdyWNPfg==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -538,49 +538,49 @@ } }, "node_modules/@bitbybit-dev/babylonjs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.6.tgz", - "integrity": "sha512-npnhjj3JiAyKgtS5fnuSxnKBPIjIkkWCcIP+6NfFyO1yFk8s68bm1LTkYgBnhCIS51tXIFwJ4WLDmjqHRtw8OA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.7.tgz", + "integrity": "sha512-PjjAZj5Ovdj0qHkh6EE89fhWReGBZ7M7ymJrQuVmhVKjLoKWd86Wn1in61JLoCJfwFUDvPw6I3NWn9yETMO62g==", "license": "MIT", "dependencies": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", "@babylonjs/havok": "1.3.10", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", - "@bitbybit-dev/core": "0.20.6", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", + "@bitbybit-dev/core": "0.20.7", "earcut": "2.2.3" } }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -589,50 +589,50 @@ } }, "node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, "node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -3028,9 +3028,9 @@ "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" }, "node_modules/babylonjs-gltf2interface": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.26.2.tgz", - "integrity": "sha512-ByWxrtoyE0LalDiJ/rtuqy6h3tWApJ42uVNwCNuuBHyHZE6Hh6U1k6LW4uQxeppfXQWvRRGzEpkmlftttAS58Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.29.1.tgz", + "integrity": "sha512-H3wfdujcU+sEirffc55ucZyaH15+x4q+woem7QuabdcqN18ShPYedcDTl6kyuMjsDF3O6UA0z7VxyG60mA1pJg==", "license": "Apache-2.0", "peer": true }, diff --git a/examples/nuxt/babylonjs/basic/package.json b/examples/nuxt/babylonjs/basic/package.json index ff0d3b5d..87689997 100644 --- a/examples/nuxt/babylonjs/basic/package.json +++ b/examples/nuxt/babylonjs/basic/package.json @@ -11,7 +11,7 @@ "postinstall": "nuxt prepare" }, "dependencies": { - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "@pinia/nuxt": "^0.5.4", "nuxt": "^3.13.0", "pinia": "^2.2.2", diff --git a/examples/react/babylonjs/cup/package-lock.json b/examples/react/babylonjs/cup/package-lock.json index 0534cd29..19809344 100644 --- a/examples/react/babylonjs/cup/package-lock.json +++ b/examples/react/babylonjs/cup/package-lock.json @@ -8,7 +8,7 @@ "name": "cup", "version": "0.1.0", "dependencies": { - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "@emotion/react": "11.9.0", "@emotion/styled": "11.8.1", "@mui/icons-material": "5.6.2", @@ -1809,15 +1809,15 @@ } }, "node_modules/@babylonjs/core": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.26.2.tgz", - "integrity": "sha512-wzAm6l/StYBIZQdXLrXKg8YmexeQCsLPWgC6K8ypitKnpjuztbEdaXhwvlpLyeE8ammF6ZsQlPzODMfawDwAHg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.29.1.tgz", + "integrity": "sha512-hZZjiR1FvfWN/Mg07Bo/pzLKfkGYMCMnPsq1ic5UngAvfeVcNmK70l18/2iQlBrC94uSrMeMtCVY6cPxHWKsgg==", "license": "Apache-2.0" }, "node_modules/@babylonjs/gui": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.26.2.tgz", - "integrity": "sha512-hyT1lyFaYfQBdWdbyFj7H5xlhJOcTxXi8oOMGE3Qqg6Ib2RTiUBQZ+QHf1eNzy29WsW3KOQ4lrYVMm1p/cLVfg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.29.1.tgz", + "integrity": "sha512-z115xTfoNc8t2MkDkeTOg+Fk8FdNNMj/EtWYzXnjO2HS3cSixM/ZawA4MgEqhWOvEmODKBJKvFokxPLaPSRZiQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0" @@ -1832,9 +1832,9 @@ } }, "node_modules/@babylonjs/loaders": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.26.2.tgz", - "integrity": "sha512-Me/bhbbeqGvuX4+UsIP3p4kmPCBrKB1iZJh1bYG5/bk8VQA0R4teOu5nQ/Y4lfYjdVtfDDm/UfeRPKPv3Pd0Kg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.29.1.tgz", + "integrity": "sha512-tBJv24VAdZW30BYxvwrMERDLHnxBjnC68NrMmb66B9Hs7sEl+e59nluEc2zpSSQVtdY8P8+c9F+LbqqliQLuwA==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -1842,18 +1842,18 @@ } }, "node_modules/@babylonjs/materials": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.26.2.tgz", - "integrity": "sha512-/fp8CxH+frcXaPHL7o2JlDvlHrmU0qKRVy6R+HejofVa8cvMMbZkUZJ9MTZdQZGCeEm58DfDbx4SrVDTZtRp5w==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.29.1.tgz", + "integrity": "sha512-bJZPDOfm1IWMMPEUTD416z8/dGpQ3mb0xF543cyEKNuZfiofpvxm6/3jF3SKf9PAVi5+hTgsRI9isCkoVehiYQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.6.0" } }, "node_modules/@babylonjs/serializers": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.26.2.tgz", - "integrity": "sha512-qAyb58bJALeQxomgCBFUky9OPgCKavzUtWgYw5AoKioMkFXKZEvWPvEmAlqCU9ZJfJUsaA4l2EvR3SX8+0I7yQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.29.1.tgz", + "integrity": "sha512-t7aNW5rh3LXBGeD8KfeEG0s5mzOsqgWHJ+VXQtb9lPkpnSeNj2nl7yY2QuRUuapNITJhvlee2J61CRIdyWNPfg==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -1866,49 +1866,49 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "node_modules/@bitbybit-dev/babylonjs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.6.tgz", - "integrity": "sha512-npnhjj3JiAyKgtS5fnuSxnKBPIjIkkWCcIP+6NfFyO1yFk8s68bm1LTkYgBnhCIS51tXIFwJ4WLDmjqHRtw8OA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.7.tgz", + "integrity": "sha512-PjjAZj5Ovdj0qHkh6EE89fhWReGBZ7M7ymJrQuVmhVKjLoKWd86Wn1in61JLoCJfwFUDvPw6I3NWn9yETMO62g==", "license": "MIT", "dependencies": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", "@babylonjs/havok": "1.3.10", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", - "@bitbybit-dev/core": "0.20.6", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", + "@bitbybit-dev/core": "0.20.7", "earcut": "2.2.3" } }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -1917,50 +1917,50 @@ } }, "node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, "node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -5694,9 +5694,9 @@ } }, "node_modules/babylonjs-gltf2interface": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.26.2.tgz", - "integrity": "sha512-ByWxrtoyE0LalDiJ/rtuqy6h3tWApJ42uVNwCNuuBHyHZE6Hh6U1k6LW4uQxeppfXQWvRRGzEpkmlftttAS58Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.29.1.tgz", + "integrity": "sha512-H3wfdujcU+sEirffc55ucZyaH15+x4q+woem7QuabdcqN18ShPYedcDTl6kyuMjsDF3O6UA0z7VxyG60mA1pJg==", "license": "Apache-2.0", "peer": true }, @@ -19074,14 +19074,14 @@ } }, "@babylonjs/core": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.26.2.tgz", - "integrity": "sha512-wzAm6l/StYBIZQdXLrXKg8YmexeQCsLPWgC6K8ypitKnpjuztbEdaXhwvlpLyeE8ammF6ZsQlPzODMfawDwAHg==" + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.29.1.tgz", + "integrity": "sha512-hZZjiR1FvfWN/Mg07Bo/pzLKfkGYMCMnPsq1ic5UngAvfeVcNmK70l18/2iQlBrC94uSrMeMtCVY6cPxHWKsgg==" }, "@babylonjs/gui": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.26.2.tgz", - "integrity": "sha512-hyT1lyFaYfQBdWdbyFj7H5xlhJOcTxXi8oOMGE3Qqg6Ib2RTiUBQZ+QHf1eNzy29WsW3KOQ4lrYVMm1p/cLVfg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.29.1.tgz", + "integrity": "sha512-z115xTfoNc8t2MkDkeTOg+Fk8FdNNMj/EtWYzXnjO2HS3cSixM/ZawA4MgEqhWOvEmODKBJKvFokxPLaPSRZiQ==", "requires": {} }, "@babylonjs/havok": { @@ -19093,21 +19093,21 @@ } }, "@babylonjs/loaders": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.26.2.tgz", - "integrity": "sha512-Me/bhbbeqGvuX4+UsIP3p4kmPCBrKB1iZJh1bYG5/bk8VQA0R4teOu5nQ/Y4lfYjdVtfDDm/UfeRPKPv3Pd0Kg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.29.1.tgz", + "integrity": "sha512-tBJv24VAdZW30BYxvwrMERDLHnxBjnC68NrMmb66B9Hs7sEl+e59nluEc2zpSSQVtdY8P8+c9F+LbqqliQLuwA==", "requires": {} }, "@babylonjs/materials": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.26.2.tgz", - "integrity": "sha512-/fp8CxH+frcXaPHL7o2JlDvlHrmU0qKRVy6R+HejofVa8cvMMbZkUZJ9MTZdQZGCeEm58DfDbx4SrVDTZtRp5w==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.29.1.tgz", + "integrity": "sha512-bJZPDOfm1IWMMPEUTD416z8/dGpQ3mb0xF543cyEKNuZfiofpvxm6/3jF3SKf9PAVi5+hTgsRI9isCkoVehiYQ==", "requires": {} }, "@babylonjs/serializers": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.26.2.tgz", - "integrity": "sha512-qAyb58bJALeQxomgCBFUky9OPgCKavzUtWgYw5AoKioMkFXKZEvWPvEmAlqCU9ZJfJUsaA4l2EvR3SX8+0I7yQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.29.1.tgz", + "integrity": "sha512-t7aNW5rh3LXBGeD8KfeEG0s5mzOsqgWHJ+VXQtb9lPkpnSeNj2nl7yY2QuRUuapNITJhvlee2J61CRIdyWNPfg==", "requires": {} }, "@bcoe/v8-coverage": { @@ -19116,45 +19116,45 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "@bitbybit-dev/babylonjs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.6.tgz", - "integrity": "sha512-npnhjj3JiAyKgtS5fnuSxnKBPIjIkkWCcIP+6NfFyO1yFk8s68bm1LTkYgBnhCIS51tXIFwJ4WLDmjqHRtw8OA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.7.tgz", + "integrity": "sha512-PjjAZj5Ovdj0qHkh6EE89fhWReGBZ7M7ymJrQuVmhVKjLoKWd86Wn1in61JLoCJfwFUDvPw6I3NWn9yETMO62g==", "requires": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", "@babylonjs/havok": "1.3.10", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", - "@bitbybit-dev/core": "0.20.6", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", + "@bitbybit-dev/core": "0.20.7", "earcut": "2.2.3" } }, "@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==" + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==" }, "@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", - "requires": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", + "requires": { + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "requires": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -19163,45 +19163,45 @@ } }, "@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "requires": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "requires": { "manifold-3d": "3.0.0" } }, "@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "requires": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "requires": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "requires": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -21830,9 +21830,9 @@ } }, "babylonjs-gltf2interface": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.26.2.tgz", - "integrity": "sha512-ByWxrtoyE0LalDiJ/rtuqy6h3tWApJ42uVNwCNuuBHyHZE6Hh6U1k6LW4uQxeppfXQWvRRGzEpkmlftttAS58Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.29.1.tgz", + "integrity": "sha512-H3wfdujcU+sEirffc55ucZyaH15+x4q+woem7QuabdcqN18ShPYedcDTl6kyuMjsDF3O6UA0z7VxyG60mA1pJg==", "peer": true }, "balanced-match": { diff --git a/examples/react/babylonjs/cup/package.json b/examples/react/babylonjs/cup/package.json index a090cac9..e9cbac32 100644 --- a/examples/react/babylonjs/cup/package.json +++ b/examples/react/babylonjs/cup/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "https://app-store.bitbybit.dev/cup", "dependencies": { - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "@emotion/react": "11.9.0", "@emotion/styled": "11.8.1", "web-ifc": "0.0.68", diff --git a/examples/react/babylonjs/laptop-holder/package-lock.json b/examples/react/babylonjs/laptop-holder/package-lock.json index 250064d8..8d7a7c21 100644 --- a/examples/react/babylonjs/laptop-holder/package-lock.json +++ b/examples/react/babylonjs/laptop-holder/package-lock.json @@ -8,7 +8,7 @@ "name": "laptop-holder", "version": "0.1.0", "dependencies": { - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "@emotion/react": "11.9.0", "@emotion/styled": "11.8.1", "@mui/icons-material": "5.6.2", @@ -1847,15 +1847,15 @@ } }, "node_modules/@babylonjs/core": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.26.2.tgz", - "integrity": "sha512-wzAm6l/StYBIZQdXLrXKg8YmexeQCsLPWgC6K8ypitKnpjuztbEdaXhwvlpLyeE8ammF6ZsQlPzODMfawDwAHg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.29.1.tgz", + "integrity": "sha512-hZZjiR1FvfWN/Mg07Bo/pzLKfkGYMCMnPsq1ic5UngAvfeVcNmK70l18/2iQlBrC94uSrMeMtCVY6cPxHWKsgg==", "license": "Apache-2.0" }, "node_modules/@babylonjs/gui": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.26.2.tgz", - "integrity": "sha512-hyT1lyFaYfQBdWdbyFj7H5xlhJOcTxXi8oOMGE3Qqg6Ib2RTiUBQZ+QHf1eNzy29WsW3KOQ4lrYVMm1p/cLVfg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.29.1.tgz", + "integrity": "sha512-z115xTfoNc8t2MkDkeTOg+Fk8FdNNMj/EtWYzXnjO2HS3cSixM/ZawA4MgEqhWOvEmODKBJKvFokxPLaPSRZiQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0" @@ -1870,9 +1870,9 @@ } }, "node_modules/@babylonjs/loaders": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.26.2.tgz", - "integrity": "sha512-Me/bhbbeqGvuX4+UsIP3p4kmPCBrKB1iZJh1bYG5/bk8VQA0R4teOu5nQ/Y4lfYjdVtfDDm/UfeRPKPv3Pd0Kg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.29.1.tgz", + "integrity": "sha512-tBJv24VAdZW30BYxvwrMERDLHnxBjnC68NrMmb66B9Hs7sEl+e59nluEc2zpSSQVtdY8P8+c9F+LbqqliQLuwA==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -1880,18 +1880,18 @@ } }, "node_modules/@babylonjs/materials": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.26.2.tgz", - "integrity": "sha512-/fp8CxH+frcXaPHL7o2JlDvlHrmU0qKRVy6R+HejofVa8cvMMbZkUZJ9MTZdQZGCeEm58DfDbx4SrVDTZtRp5w==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.29.1.tgz", + "integrity": "sha512-bJZPDOfm1IWMMPEUTD416z8/dGpQ3mb0xF543cyEKNuZfiofpvxm6/3jF3SKf9PAVi5+hTgsRI9isCkoVehiYQ==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.6.0" } }, "node_modules/@babylonjs/serializers": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.26.2.tgz", - "integrity": "sha512-qAyb58bJALeQxomgCBFUky9OPgCKavzUtWgYw5AoKioMkFXKZEvWPvEmAlqCU9ZJfJUsaA4l2EvR3SX8+0I7yQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.29.1.tgz", + "integrity": "sha512-t7aNW5rh3LXBGeD8KfeEG0s5mzOsqgWHJ+VXQtb9lPkpnSeNj2nl7yY2QuRUuapNITJhvlee2J61CRIdyWNPfg==", "license": "Apache-2.0", "peerDependencies": { "@babylonjs/core": "^8.0.0", @@ -1904,49 +1904,49 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "node_modules/@bitbybit-dev/babylonjs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.6.tgz", - "integrity": "sha512-npnhjj3JiAyKgtS5fnuSxnKBPIjIkkWCcIP+6NfFyO1yFk8s68bm1LTkYgBnhCIS51tXIFwJ4WLDmjqHRtw8OA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.7.tgz", + "integrity": "sha512-PjjAZj5Ovdj0qHkh6EE89fhWReGBZ7M7ymJrQuVmhVKjLoKWd86Wn1in61JLoCJfwFUDvPw6I3NWn9yETMO62g==", "license": "MIT", "dependencies": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", "@babylonjs/havok": "1.3.10", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", - "@bitbybit-dev/core": "0.20.6", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", + "@bitbybit-dev/core": "0.20.7", "earcut": "2.2.3" } }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -1955,50 +1955,50 @@ } }, "node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, "node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -5400,9 +5400,9 @@ } }, "node_modules/babylonjs-gltf2interface": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.26.2.tgz", - "integrity": "sha512-ByWxrtoyE0LalDiJ/rtuqy6h3tWApJ42uVNwCNuuBHyHZE6Hh6U1k6LW4uQxeppfXQWvRRGzEpkmlftttAS58Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.29.1.tgz", + "integrity": "sha512-H3wfdujcU+sEirffc55ucZyaH15+x4q+woem7QuabdcqN18ShPYedcDTl6kyuMjsDF3O6UA0z7VxyG60mA1pJg==", "license": "Apache-2.0", "peer": true }, @@ -18179,14 +18179,14 @@ } }, "@babylonjs/core": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.26.2.tgz", - "integrity": "sha512-wzAm6l/StYBIZQdXLrXKg8YmexeQCsLPWgC6K8ypitKnpjuztbEdaXhwvlpLyeE8ammF6ZsQlPzODMfawDwAHg==" + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-8.29.1.tgz", + "integrity": "sha512-hZZjiR1FvfWN/Mg07Bo/pzLKfkGYMCMnPsq1ic5UngAvfeVcNmK70l18/2iQlBrC94uSrMeMtCVY6cPxHWKsgg==" }, "@babylonjs/gui": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.26.2.tgz", - "integrity": "sha512-hyT1lyFaYfQBdWdbyFj7H5xlhJOcTxXi8oOMGE3Qqg6Ib2RTiUBQZ+QHf1eNzy29WsW3KOQ4lrYVMm1p/cLVfg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-8.29.1.tgz", + "integrity": "sha512-z115xTfoNc8t2MkDkeTOg+Fk8FdNNMj/EtWYzXnjO2HS3cSixM/ZawA4MgEqhWOvEmODKBJKvFokxPLaPSRZiQ==", "requires": {} }, "@babylonjs/havok": { @@ -18198,21 +18198,21 @@ } }, "@babylonjs/loaders": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.26.2.tgz", - "integrity": "sha512-Me/bhbbeqGvuX4+UsIP3p4kmPCBrKB1iZJh1bYG5/bk8VQA0R4teOu5nQ/Y4lfYjdVtfDDm/UfeRPKPv3Pd0Kg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-8.29.1.tgz", + "integrity": "sha512-tBJv24VAdZW30BYxvwrMERDLHnxBjnC68NrMmb66B9Hs7sEl+e59nluEc2zpSSQVtdY8P8+c9F+LbqqliQLuwA==", "requires": {} }, "@babylonjs/materials": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.26.2.tgz", - "integrity": "sha512-/fp8CxH+frcXaPHL7o2JlDvlHrmU0qKRVy6R+HejofVa8cvMMbZkUZJ9MTZdQZGCeEm58DfDbx4SrVDTZtRp5w==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-8.29.1.tgz", + "integrity": "sha512-bJZPDOfm1IWMMPEUTD416z8/dGpQ3mb0xF543cyEKNuZfiofpvxm6/3jF3SKf9PAVi5+hTgsRI9isCkoVehiYQ==", "requires": {} }, "@babylonjs/serializers": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.26.2.tgz", - "integrity": "sha512-qAyb58bJALeQxomgCBFUky9OPgCKavzUtWgYw5AoKioMkFXKZEvWPvEmAlqCU9ZJfJUsaA4l2EvR3SX8+0I7yQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-8.29.1.tgz", + "integrity": "sha512-t7aNW5rh3LXBGeD8KfeEG0s5mzOsqgWHJ+VXQtb9lPkpnSeNj2nl7yY2QuRUuapNITJhvlee2J61CRIdyWNPfg==", "requires": {} }, "@bcoe/v8-coverage": { @@ -18221,45 +18221,45 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "@bitbybit-dev/babylonjs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.6.tgz", - "integrity": "sha512-npnhjj3JiAyKgtS5fnuSxnKBPIjIkkWCcIP+6NfFyO1yFk8s68bm1LTkYgBnhCIS51tXIFwJ4WLDmjqHRtw8OA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/babylonjs/-/babylonjs-0.20.7.tgz", + "integrity": "sha512-PjjAZj5Ovdj0qHkh6EE89fhWReGBZ7M7ymJrQuVmhVKjLoKWd86Wn1in61JLoCJfwFUDvPw6I3NWn9yETMO62g==", "requires": { - "@babylonjs/core": "8.26.2", - "@babylonjs/gui": "8.26.2", + "@babylonjs/core": "8.29.1", + "@babylonjs/gui": "8.29.1", "@babylonjs/havok": "1.3.10", - "@babylonjs/loaders": "8.26.2", - "@babylonjs/materials": "8.26.2", - "@babylonjs/serializers": "8.26.2", - "@bitbybit-dev/core": "0.20.6", + "@babylonjs/loaders": "8.29.1", + "@babylonjs/materials": "8.29.1", + "@babylonjs/serializers": "8.29.1", + "@bitbybit-dev/core": "0.20.7", "earcut": "2.2.3" } }, "@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==" + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==" }, "@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", - "requires": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", + "requires": { + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "requires": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -18268,45 +18268,45 @@ } }, "@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "requires": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "requires": { "manifold-3d": "3.0.0" } }, "@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "requires": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "requires": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "requires": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, @@ -20738,9 +20738,9 @@ } }, "babylonjs-gltf2interface": { - "version": "8.26.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.26.2.tgz", - "integrity": "sha512-ByWxrtoyE0LalDiJ/rtuqy6h3tWApJ42uVNwCNuuBHyHZE6Hh6U1k6LW4uQxeppfXQWvRRGzEpkmlftttAS58Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.29.1.tgz", + "integrity": "sha512-H3wfdujcU+sEirffc55ucZyaH15+x4q+woem7QuabdcqN18ShPYedcDTl6kyuMjsDF3O6UA0z7VxyG60mA1pJg==", "peer": true }, "balanced-match": { diff --git a/examples/react/babylonjs/laptop-holder/package.json b/examples/react/babylonjs/laptop-holder/package.json index a2d8a14a..c89410c9 100644 --- a/examples/react/babylonjs/laptop-holder/package.json +++ b/examples/react/babylonjs/laptop-holder/package.json @@ -16,7 +16,7 @@ "react-scripts": "5.0.1", "typescript": "^4.6.2", "web-vitals": "^2.1.4", - "@bitbybit-dev/babylonjs": "0.20.6", + "@bitbybit-dev/babylonjs": "0.20.7", "file-loader": "6.2.0", "@mui/icons-material": "5.6.2", "@mui/material": "5.6.4", diff --git a/examples/react/threejs/vase/package-lock.json b/examples/react/threejs/vase/package-lock.json index d293470f..b7ed0c9a 100644 --- a/examples/react/threejs/vase/package-lock.json +++ b/examples/react/threejs/vase/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "@babel/plugin-proposal-private-property-in-object": "7.21.11", - "@bitbybit-dev/threejs": "0.20.6", + "@bitbybit-dev/threejs": "0.20.7", "@emotion/react": "11.11.0", "@emotion/styled": "11.11.0", "@mui/icons-material": "5.11.16", @@ -1995,33 +1995,33 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "node_modules/@bitbybit-dev/base": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.6.tgz", - "integrity": "sha512-JDUekYVTBzuMXFxSYRSN2QK5oFaEx58LIA1DP9wholAIrYP0y0b+zqrIvsWEHFt/ZfG7c3OmxiMqoKYUEEVg2Q==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/base/-/base-0.20.7.tgz", + "integrity": "sha512-GZ8NhT+I/SQOh0816t6tuQvN05aH0Li8TKwtR+cNKBH+dcgNVqMp6VOcg4Ann6/F2SDiasJspVmAtE78TwCg3g==", "license": "MIT" }, "node_modules/@bitbybit-dev/core": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.6.tgz", - "integrity": "sha512-1vYe7QFm8E13SuvFd65ZOqEEKQz7avLuNWDHGeod4Fbd47XdWoQq4Q5hNGl9Qbe4y4PQkD01RUKTUSDfUt2mqw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/core/-/core-0.20.7.tgz", + "integrity": "sha512-t6g5Jh9A8bTI6cdyVqjKmyEU/JpToNbqkzPx7iOSLS2gsQ6hsnS3qQFJgL1HX0DejqvVSH9KmAbF7RWUyMyDgA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", - "@bitbybit-dev/jscad-worker": "0.20.6", - "@bitbybit-dev/manifold-worker": "0.20.6", - "@bitbybit-dev/occt-worker": "0.20.6", + "@bitbybit-dev/base": "0.20.7", + "@bitbybit-dev/jscad-worker": "0.20.7", + "@bitbybit-dev/manifold-worker": "0.20.7", + "@bitbybit-dev/occt-worker": "0.20.7", "jsonpath-plus": "10.1.0", "rxjs": "7.5.5", "verb-nurbs-web": "2.1.3" } }, "node_modules/@bitbybit-dev/jscad": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.6.tgz", - "integrity": "sha512-VmvqJSJpJQjNP5HrRgQELRmmBlGsqiFdboY4eEeisw0FFgenbosdU7pldBAdLHmlqKQhWvyu03lz/I83U7kxNg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad/-/jscad-0.20.7.tgz", + "integrity": "sha512-WVp6SaSSux7Cd7e1vU+wLwOi6QhqpKyPgQR1lFrnkwy8iv5BdnXwYTCmd7RmY1jYIHc9Xv7QMFWet6VD8F/77w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6", + "@bitbybit-dev/base": "0.20.7", "@jscad/3mf-serializer": "2.1.12", "@jscad/dxf-serializer": "2.1.18", "@jscad/io-utils": "2.0.28", @@ -2030,61 +2030,61 @@ } }, "node_modules/@bitbybit-dev/jscad-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.6.tgz", - "integrity": "sha512-Al1ODd7t8ehUZtdq2P2FhNvgo/+KrAtUAJSAWJy58eq522BLyEmWaxcx+7ozQwebPXgT/nuh4Xhiu3zrbOt8bw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/jscad-worker/-/jscad-worker-0.20.7.tgz", + "integrity": "sha512-/iWUVc/QnW5p5V+YcJTW5UXU98Ou1LEexyu21ZTb3yKjB2KZF35RYFjOQ2M5SFUfNnyqWHSJZ6JuXjCAx9sjsw==", "license": "MIT", "dependencies": { - "@bitbybit-dev/jscad": "0.20.6", + "@bitbybit-dev/jscad": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/manifold": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.6.tgz", - "integrity": "sha512-S9x2SV9kC8Va+JmnIpbE/2xiva8VckdcWCauXK65D1i/QJ+EX8XZxdMtujhVaw5kW60FEhnTEjfwbfh/sjqEAg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold/-/manifold-0.20.7.tgz", + "integrity": "sha512-PbtZhjkmzxDK6zyezIIgQG4GWXxC+S5R+UyNFrFkGA5zkH29e9LKdst+j7+8ElfZQIdEi/Rc+orWAtZo5Wntfw==", "license": "MIT", "dependencies": { "manifold-3d": "3.0.0" } }, "node_modules/@bitbybit-dev/manifold-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.6.tgz", - "integrity": "sha512-9Mvju+3YswNgAju6WyyhZhXzSoDtAB8BUdUZW7EJcl/kBqyPtDsfqr7y175nw/eA4BQRdYUd+s6QIfxpOC8thQ==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/manifold-worker/-/manifold-worker-0.20.7.tgz", + "integrity": "sha512-LbayLKzNclMP75UD1KRQJ201KJkJvd0p+ir3U4CfPQLsKYMPNMq6BwIta8U73ZBqb75IV8yxH1yveGCcf7PzZQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/manifold": "0.20.6", + "@bitbybit-dev/manifold": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/occt": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.6.tgz", - "integrity": "sha512-1+5oFNSmBz8l0Ct0ciSUdoWC6jy1DW24SaCynHhjxz3J7Q1ka0m1G8o6VnFw/Rs/94Zg1+h0p/MOZ/TYV2xNoA==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt/-/occt-0.20.7.tgz", + "integrity": "sha512-f2dRg4NWhXqX3iLxvXBFOVg0v2oN5ryuvipFPCNhw8BckPKx31TwZKaTA49b/Q7a8lRUoft/nb9WlKGHFrYjoA==", "license": "MIT", "dependencies": { - "@bitbybit-dev/base": "0.20.6" + "@bitbybit-dev/base": "0.20.7" } }, "node_modules/@bitbybit-dev/occt-worker": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.6.tgz", - "integrity": "sha512-rz1TOpSaf8xmp9vDe9fKnp+fAALuzF3tpm7HvenwuP/1xMcvN3YDhdi4Fei/OTMNHDWsSO5RGIA2nVnL7M0KKw==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/occt-worker/-/occt-worker-0.20.7.tgz", + "integrity": "sha512-phh+AT3Idj5TOAyflnC+7gakdIFDGkIbctu+9pbKePyuuIq9AVsu6aqvl4475nR8KMJrqM0dXUs6GafhsjlxvQ==", "license": "MIT", "dependencies": { - "@bitbybit-dev/occt": "0.20.6", + "@bitbybit-dev/occt": "0.20.7", "rxjs": "7.5.5" } }, "node_modules/@bitbybit-dev/threejs": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-0.20.6.tgz", - "integrity": "sha512-b7XdWXGmDZM7NhgU5XDErRAwI94VqBL1CDYSOYailnpZOXPp/QNHXZkOSg+zElUMWP8iTYptpzgVoTqmHlxEwg==", + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/@bitbybit-dev/threejs/-/threejs-0.20.7.tgz", + "integrity": "sha512-sa/PHehdMQ/vDsacuvrsD5tkwnAnpviQAEC9Jr+ng2YDswAGGdUc7Gq5ITlxNMx1/9lhuXEwGGDGYIhAHXyj0w==", "license": "MIT", "dependencies": { - "@bitbybit-dev/core": "0.20.6", - "three": "0.179.1" + "@bitbybit-dev/core": "0.20.7", + "three": "0.180.0" } }, "node_modules/@csstools/normalize.css": { @@ -17106,9 +17106,10 @@ } }, "node_modules/three": { - "version": "0.179.1", - "resolved": "https://registry.npmjs.org/three/-/three-0.179.1.tgz", - "integrity": "sha512-5y/elSIQbrvKOISxpwXCR4sQqHtGiOI+MKLc3SsBdDXA2hz3Mdp3X59aUp8DyybMa34aeBwbFTpdoLJaUDEWSw==" + "version": "0.180.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz", + "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==", + "license": "MIT" }, "node_modules/throat": { "version": "6.0.2", diff --git a/examples/react/threejs/vase/package.json b/examples/react/threejs/vase/package.json index 64b6421a..6ec5e228 100644 --- a/examples/react/threejs/vase/package.json +++ b/examples/react/threejs/vase/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "https://app-store.bitbybit.dev/bitbybit-threejs", "dependencies": { - "@bitbybit-dev/threejs": "0.20.6", + "@bitbybit-dev/threejs": "0.20.7", "@testing-library/jest-dom": "5.16.5", "@testing-library/react": "14.0.0", "@testing-library/user-event": "14.4.3", diff --git a/examples/runner/babylon/full/inline-include/index.html b/examples/runner/babylon/full/inline-include/index.html index 012a6be6..c6b83ddc 100644 --- a/examples/runner/babylon/full/inline-include/index.html +++ b/examples/runner/babylon/full/inline-include/index.html @@ -34,7 +34,7 @@ // This function simply outputs the script that was exported from the Rete editor by clicking "Export to Runner" and selecting Minify option. function exportedScript() { - return '{\"type\":\"rete\",\"version\":\"0.20.6\",\"script\":\"!async function(e,t,s,n,r){let a={};a={x:[0],y:[0],z:[1],...a};const o=[{result:e.HS.executeBasedOnType(a,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let i={};i={text:[\\"[true,false]\\"],...i};const c=[{result:e.HS.executeBasedOnType(i,!1,(e=>t.json.parse(e))),transformers:[]}];let p={};p={text:[\\"[false,true]\\"],...p};const u=[{result:e.HS.executeBasedOnType(p,!1,(e=>t.json.parse(e))),transformers:[]}],l=[{result:[5],transformers:[]}];let d={};d={x:[1],y:[0],z:[0],...d};const m=[{result:e.HS.executeBasedOnType(d,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],y=[{result:[12],transformers:[]}],S=[{result:[7],transformers:[]}];let H={};H={x:[0],y:[1],z:[0],...H};const f=[{result:e.HS.executeBasedOnType(H,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let h={};h={x:[0],y:[0],z:[1],...h};const x=[{result:e.HS.executeBasedOnType(h,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let v={};v={number:[.4],...v};const O=[{result:e.HS.executeBasedOnType(v,!1,(e=>t.math.number(e))),transformers:[]}];let I={};I={x:[0],y:[0],z:[-1],...I};const L=[{result:e.HS.executeBasedOnType(I,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let B={};B={x:[0],y:[0],z:[-2],...B};const w=[{result:e.HS.executeBasedOnType(B,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let T={};T={x:[0],y:[0],z:[1],...T};const g=[{result:e.HS.executeBasedOnType(T,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let A={};A={x:[0],y:[1.5],z:[0],...A};const E=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let b={};b={...{faceOpacity:[.5],edgeOpacity:[.5],edgeColour:[\\"#000000\\"],faceColour:[\\"#212121\\"],vertexColour:[\\"#ff00ff\\"],faceMaterial:[void 0],edgeWidth:[2],vertexSize:[.03],drawEdges:[!0],drawFaces:[!0],drawVertices:[!1],precision:[.02],drawEdgeIndexes:[!1],edgeIndexHeight:[.06],edgeIndexColour:[\\"ff00ff\\"],drawFaceIndexes:[!1],faceIndexHeight:[.06],faceIndexColour:[\\"#0000ff\\"]},...b};const z=[{result:e.HS.executeBasedOnType(b,!1,(e=>t.draw.optionsOcctShape(e))),transformers:[]}];let W={};W={name:[\\"Custom Material\\"],baseColor:[\\"#9c9cba\\"],emissiveColor:[\\"#000000\\"],metallic:[.9],roughness:[.1],alpha:[1],backFaceCulling:[!1],zOffset:[2],...W};const C=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.babylon.material.pbrMetallicRoughness.create(e))),transformers:[]}];let P={};P={x:[0],y:[0],z:[-1],...P};const X=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Y={};Y={x:[0],y:[0],z:[-1.5],...Y};const Z=[{result:e.HS.executeBasedOnType(Y,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let N={};N={x:[0],y:[0],z:[1],...N};const k=[{result:e.HS.executeBasedOnType(N,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let M={};M={skybox:[\\"city\\"],size:[1e3],blur:[.4],environmentIntensity:[.4],...M};e.HS.executeBasedOnType(M,!1,(e=>t.babylon.scene.enableSkybox(e)));let F={number:[{result:[20],transformers:[]}]};e.HS.updateListInputs(F),F={number:[20],...F};const D=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.number(e))),transformers:[]}];let R={};R.y=y,e.HS.updateListInputs(R),R={x:[0],y:[0],z:[0],...R};const j=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.item=y,e.HS.updateListInputs(q),q={...q};const V=[{result:q.item}];let G={};G.first=S,e.HS.updateListInputs(G),G={first:[1],second:[-2],operation:[\\"divide\\"],...G};const J=[{result:e.HS.executeBasedOnType(G,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let K={};K.first=S,e.HS.updateListInputs(K),K={first:[1],second:[-4],operation:[\\"divide\\"],...K};const Q=[{result:e.HS.executeBasedOnType(K,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let U={};U.first=y,U.second=O,e.HS.updateListInputs(U),U={first:[1],second:[.4],operation:[\\"add\\"],...U};const $=[{result:e.HS.executeBasedOnType(U,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let _={};_.item=S,e.HS.updateListInputs(_),_={..._};const ee=[{result:_.item}],te={faceOpacity:[1],edgeOpacity:[1],edgeColour:[\\"#1c1c1c\\"],faceColour:[\\"#bdbdbd\\"],vertexColour:[\\"#ff00ff\\"],faceMaterial:[void 0],edgeWidth:[2],vertexSize:[.03],drawEdges:[!0],drawFaces:[!0],drawVertices:[!1],precision:[.01],drawEdgeIndexes:[!1],edgeIndexHeight:[.06],edgeIndexColour:[\\"ff00ff\\"],drawFaceIndexes:[!1],faceIndexHeight:[.06],faceIndexColour:[\\"#0000ff\\"]};let se={};se.faceMaterial=C,e.HS.updateListInputs(se),se={...te,...se};const ne=[{result:e.HS.executeBasedOnType(se,!1,(e=>t.draw.optionsOcctShape(e))),transformers:[]}];let re={};re.center=Z,re.direction=X,e.HS.updateListInputs(re),re={radius:[3],height:[1.9],center:[[0,0,0]],direction:[[0,1,0]],...re};const ae=[{result:await e.HS.executeBasedOnTypeAsync(re,!1,(e=>t.occt.shapes.solid.createCylinder(e))),transformers:[]}];let oe={};oe.y=$,e.HS.updateListInputs(oe),oe={x:[0],y:[12],z:[0],...oe};const ie=[{result:e.HS.executeBasedOnType(oe,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let ce={};ce.first=D,e.HS.updateListInputs(ce),ce={first:[1],second:[3],operation:[\\"multiply\\"],...ce};const pe=[{result:e.HS.executeBasedOnType(ce,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let ue={};ue.first=V,ue.second=O,e.HS.updateListInputs(ue),ue={first:[1],second:[.4],operation:[\\"add\\"],...ue};const le=[{result:e.HS.executeBasedOnType(ue,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let de={};de.first=V,de.second=O,e.HS.updateListInputs(de),de={first:[1],second:[.4],operation:[\\"subtract\\"],...de};const me=[{result:e.HS.executeBasedOnType(de,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let ye={};ye.first=ee,e.HS.updateListInputs(ye),ye={first:[1],second:[-.2],operation:[\\"multiply\\"],...ye};const Se=[{result:e.HS.executeBasedOnType(ye,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let He={};He.second=D,e.HS.updateListInputs(He),He={first:[360],second:[1],operation:[\\"divide\\"],...He};const fe=[{result:e.HS.executeBasedOnType(He,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}],he={shape:[void 0],radius:[.3],radiusList:[void 0],indexes:[void 0]};let xe={};xe.shape=ae,e.HS.updateListInputs(xe),xe={...he,...xe};const ve=[{result:await e.HS.executeBasedOnTypeAsync(xe,!1,(e=>t.occt.fillets.filletEdges(e))),transformers:[]}];let Oe={};Oe.start=L,Oe.end=ie,e.HS.updateListInputs(Oe),Oe={start:[[0,0,0]],end:[[0,1,0]],...Oe};const Ie=[{result:await e.HS.executeBasedOnTypeAsync(Oe,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];let Le={};Le.second=pe,e.HS.updateListInputs(Le),Le={first:[360],second:[1],operation:[\\"divide\\"],...Le};const Be=[{result:e.HS.executeBasedOnType(Le,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let we={};we.start=w,we.end=ie,e.HS.updateListInputs(we),we={start:[[0,0,0]],end:[[0,1,0]],...we};const Te=[{result:await e.HS.executeBasedOnTypeAsync(we,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];let ge={};ge.y=le,e.HS.updateListInputs(ge),ge={x:[0],y:[0],z:[.05],...ge};const Ae=[{result:e.HS.executeBasedOnType(ge,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Ee={};Ee.y=me,Ee.z=Q,e.HS.updateListInputs(Ee),Ee={x:[0],y:[0],z:[-1],...Ee};const be=[{result:e.HS.executeBasedOnType(Ee,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let ze={};ze.y=me,ze.z=J,e.HS.updateListInputs(ze),ze={x:[0],y:[0],z:[0],...ze};const We=[{result:e.HS.executeBasedOnType(ze,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Ce={};Ce.z=Se,e.HS.updateListInputs(Ce),Ce={x:[0],y:[0],z:[0],...Ce};const Pe=[{result:e.HS.executeBasedOnType(Ce,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Xe={};Xe.step=fe,e.HS.updateListInputs(Xe),Xe={step:[.1],min:[0],max:[360],...Xe};const Ye=e.HS.executeBasedOnType(Xe,!1,(e=>t.vector.span(e))),Ze=[];for(let e=0;e<1;e++)Ze.push({type:\\"flat\\"});const Ne=[{result:Ye,transformers:Ze}];let ke={};ke.first=Se,e.HS.updateListInputs(ke),ke={first:[2],second:[-2],operation:[\\"multiply\\"],...ke};e.HS.executeBasedOnType(ke,!1,(e=>t.math.twoNrOperation(e)));let Me={};Me.listElements=ve,e.HS.updateListInputs(Me),Me={...Me};const Fe=[{result:[Me.listElements?Me.listElements:[]]}],De={shape:[void 0],axis:[[0,0,1]],angle:[0]};let Re={};Re.shape=Ie,Re.axis=o,Re.angle=Be,e.HS.updateListInputs(Re),Re={...De,...Re};const je=[{result:await e.HS.executeBasedOnTypeAsync(Re,!1,(e=>t.occt.transforms.rotate(e))),transformers:[]}];let qe={};qe.first=Be,e.HS.updateListInputs(qe),qe={first:[1],second:[.4],operation:[\\"multiply\\"],...qe};const Ve=[{result:e.HS.executeBasedOnType(qe,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Ge={};Ge.first=Be,e.HS.updateListInputs(Ge),Ge={first:[1],second:[.6],operation:[\\"multiply\\"],...Ge};const Je=[{result:e.HS.executeBasedOnType(Ge,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Ke={};Ke.listElements=[Ae[0],j[0],be[0],We[0]],e.HS.updateListInputs(Ke),Ke={...Ke};const Qe=[{result:[Ke.listElements?Ke.listElements:[]]}];let Ue={};Ue.item=Ne,e.HS.updateListInputs(Ue),Ue={...Ue};const $e=[{result:Ue.item}],_e={shape:[void 0],nrOfDivisions:[11],removeStartPoint:[!1],removeEndPoint:[!1]};let et={};et.shape=je,et.nrOfDivisions=l,e.HS.updateListInputs(et),et={..._e,...et};const tt=[{result:await e.HS.executeBasedOnTypeAsync(et,!1,(e=>t.occt.shapes.wire.divideWireByEqualDistanceToPoints(e))),transformers:[]}],st={shape:[void 0],axis:[[0,0,1]],angle:[0]};let nt={};nt.shape=Te,nt.axis=o,nt.angle=[Ve[0],Je[0]],e.HS.updateListInputs(nt),nt={...st,...nt};const rt=[{result:await e.HS.executeBasedOnTypeAsync(nt,!1,(e=>t.occt.transforms.rotate(e))),transformers:[]}];let at={};at.number=Ve,e.HS.updateListInputs(at),at={number:[1],operation:[\\"negate\\"],...at};const ot=[{result:e.HS.executeBasedOnType(at,!1,(e=>t.math.oneNrOperation(e))),transformers:[]}],it={points:[void 0]};let ct={};ct.points=Qe,e.HS.updateListInputs(ct),ct={...it,...ct};const pt=[{result:await e.HS.executeBasedOnTypeAsync(ct,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];e.HS.drawNodeMeshes(pt,t);const ut={list:[void 0],pattern:[[!0,!0,!1]]};let lt={};lt.list=tt,lt.pattern=u,e.HS.updateListInputs(lt),lt={...ut,...lt};const dt=[{result:e.HS.executeBasedOnType(lt,!0,(e=>t.lists.getByPattern(e))),transformers:[]}];let mt={};mt.listElements=rt,e.HS.updateListInputs(mt),mt={...mt};const yt=[{result:[mt.listElements?mt.listElements:[]]}],St={shape:[void 0],origin:[[0,0,0]],direction:[[0,0,1]]};let Ht={};Ht.shape=pt,Ht.origin=We,Ht.direction=f,e.HS.updateListInputs(Ht),Ht={...St,...Ht};const ft=[{result:await e.HS.executeBasedOnTypeAsync(Ht,!1,(e=>t.occt.transforms.mirror(e))),transformers:[]}],ht={shape:[void 0]};let xt={};xt.shape=pt,e.HS.updateListInputs(xt),xt={...ht,...xt};const vt=await e.HS.executeBasedOnTypeAsync(xt,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),Ot=[];for(let e=0;e<1;e++)Ot.push({type:\\"flat\\"});const It=[{result:vt,transformers:Ot}],Lt={list:[void 0],index:[0],clone:[!0]};let Bt={};Bt.list=yt,e.HS.updateListInputs(Bt),Bt={...Lt,...Bt};const wt=[{result:e.HS.executeBasedOnType(Bt,!1,(e=>t.lists.getItem(e))),transformers:[]}],Tt={shape:[void 0]};let gt={};gt.shape=ft,e.HS.updateListInputs(gt),gt={...Tt,...gt};const At=[{result:await e.HS.executeBasedOnTypeAsync(gt,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}],Et={shape:[void 0],nrOfDivisions:[11],removeStartPoint:[!1],removeEndPoint:[!1]};let bt={};bt.shape=wt,bt.nrOfDivisions=l,e.HS.updateListInputs(bt),bt={...Et,...bt};const zt=[{result:await e.HS.executeBasedOnTypeAsync(bt,!1,(e=>t.occt.shapes.wire.divideWireByEqualDistanceToPoints(e))),transformers:[]}],Wt={list:[void 0],index:[3],clone:[!0]};let Ct={};Ct.list=At,e.HS.updateListInputs(Ct),Ct={...Wt,...Ct};const Pt=[{result:e.HS.executeBasedOnType(Ct,!1,(e=>t.lists.removeItemAtIndex(e))),transformers:[]}],Xt={list:[void 0],pattern:[[!0,!0,!1]]};let Yt={};Yt.list=zt,Yt.pattern=c,e.HS.updateListInputs(Yt),Yt={...Xt,...Yt};const Zt=[{result:e.HS.executeBasedOnType(Yt,!1,(e=>t.lists.getByPattern(e))),transformers:[]}],Nt={list:[void 0],clone:[!0]};let kt={};kt.list=Pt,e.HS.updateListInputs(kt),kt={...Nt,...kt};const Mt=e.HS.executeBasedOnType(kt,!1,(e=>t.lists.reverse(e))),Ft=[];for(let e=0;e<1;e++)Ft.push({type:\\"flat\\"});const Dt=[{result:Mt,transformers:Ft}];let Rt={};Rt.listElements=[Zt[0],dt[0]],e.HS.updateListInputs(Rt),Rt={...Rt};const jt=[{result:[Rt.listElements?Rt.listElements:[]]}];let qt={};qt.listElements=[It[0],Dt[0]],e.HS.updateListInputs(qt),qt={...qt};const Vt=[{result:[qt.listElements?qt.listElements:[]]}],Gt={list:[void 0],clone:[!0]};let Jt={};Jt.list=jt,e.HS.updateListInputs(Jt),Jt={...Gt,...Jt};const Kt=e.HS.executeBasedOnType(Jt,!1,(e=>t.lists.flipLists(e))),Qt=[];for(let e=0;e<2;e++)Qt.push({type:\\"flat\\"});const Ut=[{result:Kt,transformers:Qt}],$t={points:[void 0]};let _t={};_t.points=Vt,e.HS.updateListInputs(_t),_t={...$t,..._t};const es=[{result:await e.HS.executeBasedOnTypeAsync(_t,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];let ts={};ts.listElements=Ut,e.HS.updateListInputs(ts),ts={...ts};const ss=[{result:[ts.listElements?ts.listElements:[]]}],ns={shape:[void 0],radius:[.3],radiusList:[void 0],indexes:[void 0]};let rs={};rs.shape=es,e.HS.updateListInputs(rs),rs={...ns,...rs};const as=[{result:await e.HS.executeBasedOnTypeAsync(rs,!1,(e=>t.occt.fillets.fillet2d(e))),transformers:[]}],os={points:[void 0]};let is={};is.points=ss,e.HS.updateListInputs(is),is={...os,...is};const cs=[{result:await e.HS.executeBasedOnTypeAsync(is,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}],ps={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let us={};us.shape=as,us.direction=x,e.HS.updateListInputs(us),us={...ps,...us};const ls=[{result:await e.HS.executeBasedOnTypeAsync(us,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],ds={shape:[void 0]};let ms={};ms.shape=as,e.HS.updateListInputs(ms),ms={...ds,...ms};const ys=[{result:await e.HS.executeBasedOnTypeAsync(ms,!1,(e=>t.occt.shapes.wire.startPointOnWire(e))),transformers:[]}],Ss={shape:[void 0]};let Hs={};Hs.shape=as,e.HS.updateListInputs(Hs),Hs={...Ss,...Hs};const fs=[{result:await e.HS.executeBasedOnTypeAsync(Hs,!1,(e=>t.occt.shapes.wire.endPointOnWire(e))),transformers:[]}],hs={shape:[void 0]};let xs={};xs.shape=as,e.HS.updateListInputs(xs),xs={...hs,...xs};const vs=[{result:await e.HS.executeBasedOnTypeAsync(xs,!1,(e=>t.occt.shapes.wire.closeOpenWire(e))),transformers:[]}],Os={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let Is={};Is.shape=vs,Is.direction=x,e.HS.updateListInputs(Is),Is={...Os,...Is};const Ls=[{result:await e.HS.executeBasedOnTypeAsync(Is,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],Bs={shape:[void 0],radius:[1],radiusList:[void 0],indexes:[void 0],direction:[[0,1,0]]};let ws={};ws.shape=cs,ws.direction=g,e.HS.updateListInputs(ws),ws={...Bs,...ws};const Ts=[{result:await e.HS.executeBasedOnTypeAsync(ws,!1,(e=>t.occt.fillets.fillet3DWire(e))),transformers:[]}],gs={shape:[void 0],face:[void 0],distance:[-.2],tolerance:[.1]};let As={};As.shape=ls,e.HS.updateListInputs(As),As={...gs,...As};const Es=[{result:await e.HS.executeBasedOnTypeAsync(As,!1,(e=>t.occt.operations.offset(e))),transformers:[]}],bs={shape:[void 0],index:[0]};let zs={};zs.shape=ls,e.HS.updateListInputs(zs),zs={...bs,...zs};const Ws=[{result:await e.HS.executeBasedOnTypeAsync(zs,!1,(e=>t.occt.shapes.wire.getWire(e))),transformers:[]}];let Cs={};Cs.item=ys,e.HS.updateListInputs(Cs),Cs={...Cs};const Ps=[{result:Cs.item}];let Xs={};Xs.item=fs,e.HS.updateListInputs(Xs),Xs={...Xs};const Ys=[{result:Xs.item}];let Zs={};Zs.start=fs,Zs.end=ys,e.HS.updateListInputs(Zs),Zs={start:[[0,0,0]],end:[[0,1,0]],...Zs};const Ns=[{result:await e.HS.executeBasedOnTypeAsync(Zs,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];e.HS.drawNodeMeshes(Ns,t);const ks={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let Ms={};Ms.shape=Ts,Ms.angle=ot,Ms.direction=o,e.HS.updateListInputs(Ms),Ms={...ks,...Ms};const Fs=[{result:await e.HS.executeBasedOnTypeAsync(Ms,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],Ds={shape:[void 0]};let Rs={};Rs.shape=Ls,e.HS.updateListInputs(Rs),Rs={...Ds,...Rs};const js=[{result:await e.HS.executeBasedOnTypeAsync(Rs,!1,(e=>t.occt.shapes.solid.fromClosedShell(e))),transformers:[]}],qs={shape:[void 0],index:[1]};let Vs={};Vs.shape=Ws,e.HS.updateListInputs(Vs),Vs={...qs,...Vs};const Gs=[{result:await e.HS.executeBasedOnTypeAsync(Vs,!1,(e=>t.occt.shapes.edge.getEdge(e))),transformers:[]}],Js={shape:[void 0],index:[0]};let Ks={};Ks.shape=Es,e.HS.updateListInputs(Ks),Ks={...Js,...Ks};const Qs=[{result:await e.HS.executeBasedOnTypeAsync(Ks,!1,(e=>t.occt.shapes.wire.getWire(e))),transformers:[]}],Us={shape:[void 0],translation:[[0,0,0]]};let $s={};$s.shape=Ns,$s.translation=E,e.HS.updateListInputs($s),$s={...Us,...$s};const _s=[{result:await e.HS.executeBasedOnTypeAsync($s,!1,(e=>t.occt.transforms.translate(e))),transformers:[]}],en={shape:[void 0],direction:[[0,1,0]]};let tn={};tn.shape=Fs,tn.direction=Pe,e.HS.updateListInputs(tn),tn={...en,...tn};const sn=[{result:await e.HS.executeBasedOnTypeAsync(tn,!1,(e=>t.occt.operations.extrude(e))),transformers:[]}];let nn={};nn.listElements=js,e.HS.updateListInputs(nn),nn={...nn};const rn=[{result:[nn.listElements?nn.listElements:[]]}],an={shape:[void 0],index:[1]};let on={};on.shape=Qs,e.HS.updateListInputs(on),on={...an,...on};const cn=[{result:await e.HS.executeBasedOnTypeAsync(on,!1,(e=>t.occt.shapes.edge.getEdge(e))),transformers:[]}];let pn={};pn.listElements=Gs,e.HS.updateListInputs(pn),pn={...pn};const un=[{result:[pn.listElements?pn.listElements:[]]}],ln={shape:[void 0]};let dn={};dn.shape=_s,e.HS.updateListInputs(dn),dn={...ln,...dn};const mn=[{result:await e.HS.executeBasedOnTypeAsync(dn,!1,(e=>t.occt.shapes.wire.startPointOnWire(e))),transformers:[]}],yn={shape:[void 0]};let Sn={};Sn.shape=_s,e.HS.updateListInputs(Sn),Sn={...yn,...Sn};const Hn=[{result:await e.HS.executeBasedOnTypeAsync(Sn,!1,(e=>t.occt.shapes.wire.endPointOnWire(e))),transformers:[]}],fn={shapes:[void 0]};let hn={};hn.shapes=un,e.HS.updateListInputs(hn),hn={...fn,...hn};const xn=[{result:await e.HS.executeBasedOnTypeAsync(hn,!1,(e=>t.occt.shapes.wire.combineEdgesAndWiresIntoAWire(e))),transformers:[]}];let vn={};vn.listElements=cn,e.HS.updateListInputs(vn),vn={...vn};const On=[{result:[vn.listElements?vn.listElements:[]]}],In={shape:[void 0],shapes:[void 0],keepEdges:[!1]};let Ln={};Ln.shape=sn,Ln.shapes=Fe,e.HS.updateListInputs(Ln),Ln={...In,...Ln};const Bn=[{result:await e.HS.executeBasedOnTypeAsync(Ln,!1,(e=>t.occt.booleans.difference(e))),transformers:[]}];let wn={};wn.item=Hn,e.HS.updateListInputs(wn),wn={...wn};const Tn=[{result:wn.item}];let gn={};gn.item=mn,e.HS.updateListInputs(gn),gn={...gn};const An=[{result:gn.item}],En={shape:[void 0],shapes:[void 0],keepEdges:[!1]};let bn={};bn.shape=Bn,bn.shapes=rn,e.HS.updateListInputs(bn),bn={...En,...bn};const zn=[{result:await e.HS.executeBasedOnTypeAsync(bn,!1,(e=>t.occt.booleans.difference(e))),transformers:[]}],Wn={shapes:[void 0]};let Cn={};Cn.shapes=On,e.HS.updateListInputs(Cn),Cn={...Wn,...Cn};const Pn=[{result:await e.HS.executeBasedOnTypeAsync(Cn,!1,(e=>t.occt.shapes.wire.combineEdgesAndWiresIntoAWire(e))),transformers:[]}];let Xn={};Xn.listElements=[Ps[0],Tn[0],An[0],Ys[0]],e.HS.updateListInputs(Xn),Xn={...Xn};const Yn=[{result:[Xn.listElements?Xn.listElements:[]]}],Zn={shape:[void 0],origin:[[0,0,0]],normal:[[0,0,1]]};let Nn={};Nn.shape=zn,Nn.normal=m,e.HS.updateListInputs(Nn),Nn={...Zn,...Nn};const kn=[{result:await e.HS.executeBasedOnTypeAsync(Nn,!1,(e=>t.occt.transforms.mirrorAlongNormal(e))),transformers:[]}];let Mn={};Mn.listElements=[xn[0],Pn[0]],e.HS.updateListInputs(Mn),Mn={...Mn};const Fn=[{result:[Mn.listElements?Mn.listElements:[]]}],Dn={points:[void 0]};let Rn={};Rn.points=Yn,e.HS.updateListInputs(Rn),Rn={...Dn,...Rn};const jn=[{result:await e.HS.executeBasedOnTypeAsync(Rn,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];let qn={};qn.listElements=[kn[0],zn[0]],e.HS.updateListInputs(qn),qn={...qn};const Vn=[{result:[qn.listElements?qn.listElements:[]]}],Gn={shapes:[void 0],makeSolid:[!1]};let Jn={};Jn.shapes=Fn,e.HS.updateListInputs(Jn),Jn={...Gn,...Jn};const Kn=[{result:await e.HS.executeBasedOnTypeAsync(Jn,!1,(e=>t.occt.operations.loft(e))),transformers:[]}],Qn={shape:[void 0],radius:[.5],radiusList:[void 0],indexes:[void 0]};let Un={};Un.shape=jn,e.HS.updateListInputs(Un),Un={...Qn,...Un};const $n=[{result:await e.HS.executeBasedOnTypeAsync(Un,!1,(e=>t.occt.fillets.fillet2d(e))),transformers:[]}],_n={shapes:[void 0]};let er={};er.shapes=Vn,e.HS.updateListInputs(er),er={..._n,...er};const tr=[{result:await e.HS.executeBasedOnTypeAsync(er,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],sr={shape:[void 0],origin:[[0,0,0]],direction:[[0,0,1]]};let nr={};nr.shape=Kn,nr.origin=We,nr.direction=f,e.HS.updateListInputs(nr),nr={...sr,...nr};const rr=[{result:await e.HS.executeBasedOnTypeAsync(nr,!1,(e=>t.occt.transforms.mirror(e))),transformers:[]}],ar={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let or={};or.shape=$n,or.direction=x,e.HS.updateListInputs(or),or={...ar,...or};const ir=[{result:await e.HS.executeBasedOnTypeAsync(or,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}];let cr={};cr.listElements=[ls[0],Es[0],Kn[0],rr[0]],e.HS.updateListInputs(cr),cr={...cr};const pr=[{result:[cr.listElements?cr.listElements:[]]}],ur={shape:[void 0],offset:[-.1]};let lr={};lr.shape=ir,e.HS.updateListInputs(lr),lr={...ur,...lr};const dr=[{result:await e.HS.executeBasedOnTypeAsync(lr,!1,(e=>t.occt.operations.makeThickSolidSimple(e))),transformers:[]}],mr={shape:[void 0],angle:[0],center:[[0,0,0]],axis:[[0,0,1]]};let yr={};yr.shape=tr,yr.angle=$e,yr.axis=k,e.HS.updateListInputs(yr),yr={...mr,...yr};const Sr=[{result:await e.HS.executeBasedOnTypeAsync(yr,!1,(e=>t.occt.transforms.rotateAroundCenter(e))),transformers:[]}],Hr={shapes:[void 0],tolerance:[1e-7]};let fr={};fr.shapes=pr,e.HS.updateListInputs(fr),fr={...Hr,...fr};const hr=[{result:await e.HS.executeBasedOnTypeAsync(fr,!1,(e=>t.occt.shapes.shell.sewFaces(e))),transformers:[]}],xr={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let vr={};vr.entity=dr,vr.options=z,e.HS.updateListInputs(vr),vr={...xr,...vr};await e.HS.executeBasedOnTypeAsync(vr,!1,(e=>t.draw.drawAnyAsync(e)));let Or={};Or.listElements=Sr,e.HS.updateListInputs(Or),Or={...Or};const Ir=[{result:[Or.listElements?Or.listElements:[]]}],Lr={shapes:[void 0]};let Br={};Br.shapes=Ir,e.HS.updateListInputs(Br),Br={...Lr,...Br};const wr=[{result:await e.HS.executeBasedOnTypeAsync(Br,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}];let Tr={};Tr.listElements=[hr[0],ve[0],wr[0]],e.HS.updateListInputs(Tr),Tr={...Tr};const gr=[{result:[Tr.listElements?Tr.listElements:[]]}],Ar={shapes:[void 0]};let Er={};Er.shapes=gr,e.HS.updateListInputs(Er),Er={...Ar,...Er};const br=[{result:await e.HS.executeBasedOnTypeAsync(Er,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],zr={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let Wr={};Wr.entity=br,Wr.options=ne,e.HS.updateListInputs(Wr),Wr={...zr,...Wr};await e.HS.executeBasedOnTypeAsync(Wr,!1,(e=>t.draw.drawAnyAsync(e)))}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);\"}' + return '{\"type\":\"rete\",\"version\":\"0.20.7\",\"script\":\"!async function(e,t,s,n,r){let a={};a={x:[0],y:[0],z:[1],...a};const o=[{result:e.HS.executeBasedOnType(a,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let i={};i={text:[\\"[true,false]\\"],...i};const c=[{result:e.HS.executeBasedOnType(i,!1,(e=>t.json.parse(e))),transformers:[]}];let p={};p={text:[\\"[false,true]\\"],...p};const u=[{result:e.HS.executeBasedOnType(p,!1,(e=>t.json.parse(e))),transformers:[]}],l=[{result:[5],transformers:[]}];let d={};d={x:[1],y:[0],z:[0],...d};const m=[{result:e.HS.executeBasedOnType(d,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}],y=[{result:[12],transformers:[]}],S=[{result:[7],transformers:[]}];let H={};H={x:[0],y:[1],z:[0],...H};const f=[{result:e.HS.executeBasedOnType(H,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let h={};h={x:[0],y:[0],z:[1],...h};const x=[{result:e.HS.executeBasedOnType(h,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let v={};v={number:[.4],...v};const O=[{result:e.HS.executeBasedOnType(v,!1,(e=>t.math.number(e))),transformers:[]}];let I={};I={x:[0],y:[0],z:[-1],...I};const L=[{result:e.HS.executeBasedOnType(I,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let B={};B={x:[0],y:[0],z:[-2],...B};const w=[{result:e.HS.executeBasedOnType(B,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let T={};T={x:[0],y:[0],z:[1],...T};const g=[{result:e.HS.executeBasedOnType(T,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let A={};A={x:[0],y:[1.5],z:[0],...A};const E=[{result:e.HS.executeBasedOnType(A,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let b={};b={...{faceOpacity:[.5],edgeOpacity:[.5],edgeColour:[\\"#000000\\"],faceColour:[\\"#212121\\"],vertexColour:[\\"#ff00ff\\"],faceMaterial:[void 0],edgeWidth:[2],vertexSize:[.03],drawEdges:[!0],drawFaces:[!0],drawVertices:[!1],precision:[.02],drawEdgeIndexes:[!1],edgeIndexHeight:[.06],edgeIndexColour:[\\"ff00ff\\"],drawFaceIndexes:[!1],faceIndexHeight:[.06],faceIndexColour:[\\"#0000ff\\"]},...b};const z=[{result:e.HS.executeBasedOnType(b,!1,(e=>t.draw.optionsOcctShape(e))),transformers:[]}];let W={};W={name:[\\"Custom Material\\"],baseColor:[\\"#9c9cba\\"],emissiveColor:[\\"#000000\\"],metallic:[.9],roughness:[.1],alpha:[1],backFaceCulling:[!1],zOffset:[2],...W};const C=[{result:e.HS.executeBasedOnType(W,!1,(e=>t.babylon.material.pbrMetallicRoughness.create(e))),transformers:[]}];let P={};P={x:[0],y:[0],z:[-1],...P};const X=[{result:e.HS.executeBasedOnType(P,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Y={};Y={x:[0],y:[0],z:[-1.5],...Y};const Z=[{result:e.HS.executeBasedOnType(Y,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let N={};N={x:[0],y:[0],z:[1],...N};const k=[{result:e.HS.executeBasedOnType(N,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let M={};M={skybox:[\\"city\\"],size:[1e3],blur:[.4],environmentIntensity:[.4],...M};e.HS.executeBasedOnType(M,!1,(e=>t.babylon.scene.enableSkybox(e)));let F={number:[{result:[20],transformers:[]}]};e.HS.updateListInputs(F),F={number:[20],...F};const D=[{result:e.HS.executeBasedOnType(F,!1,(e=>t.math.number(e))),transformers:[]}];let R={};R.y=y,e.HS.updateListInputs(R),R={x:[0],y:[0],z:[0],...R};const j=[{result:e.HS.executeBasedOnType(R,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let q={};q.item=y,e.HS.updateListInputs(q),q={...q};const V=[{result:q.item}];let G={};G.first=S,e.HS.updateListInputs(G),G={first:[1],second:[-2],operation:[\\"divide\\"],...G};const J=[{result:e.HS.executeBasedOnType(G,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let K={};K.first=S,e.HS.updateListInputs(K),K={first:[1],second:[-4],operation:[\\"divide\\"],...K};const Q=[{result:e.HS.executeBasedOnType(K,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let U={};U.first=y,U.second=O,e.HS.updateListInputs(U),U={first:[1],second:[.4],operation:[\\"add\\"],...U};const $=[{result:e.HS.executeBasedOnType(U,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let _={};_.item=S,e.HS.updateListInputs(_),_={..._};const ee=[{result:_.item}],te={faceOpacity:[1],edgeOpacity:[1],edgeColour:[\\"#1c1c1c\\"],faceColour:[\\"#bdbdbd\\"],vertexColour:[\\"#ff00ff\\"],faceMaterial:[void 0],edgeWidth:[2],vertexSize:[.03],drawEdges:[!0],drawFaces:[!0],drawVertices:[!1],precision:[.01],drawEdgeIndexes:[!1],edgeIndexHeight:[.06],edgeIndexColour:[\\"ff00ff\\"],drawFaceIndexes:[!1],faceIndexHeight:[.06],faceIndexColour:[\\"#0000ff\\"]};let se={};se.faceMaterial=C,e.HS.updateListInputs(se),se={...te,...se};const ne=[{result:e.HS.executeBasedOnType(se,!1,(e=>t.draw.optionsOcctShape(e))),transformers:[]}];let re={};re.center=Z,re.direction=X,e.HS.updateListInputs(re),re={radius:[3],height:[1.9],center:[[0,0,0]],direction:[[0,1,0]],...re};const ae=[{result:await e.HS.executeBasedOnTypeAsync(re,!1,(e=>t.occt.shapes.solid.createCylinder(e))),transformers:[]}];let oe={};oe.y=$,e.HS.updateListInputs(oe),oe={x:[0],y:[12],z:[0],...oe};const ie=[{result:e.HS.executeBasedOnType(oe,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let ce={};ce.first=D,e.HS.updateListInputs(ce),ce={first:[1],second:[3],operation:[\\"multiply\\"],...ce};const pe=[{result:e.HS.executeBasedOnType(ce,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let ue={};ue.first=V,ue.second=O,e.HS.updateListInputs(ue),ue={first:[1],second:[.4],operation:[\\"add\\"],...ue};const le=[{result:e.HS.executeBasedOnType(ue,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let de={};de.first=V,de.second=O,e.HS.updateListInputs(de),de={first:[1],second:[.4],operation:[\\"subtract\\"],...de};const me=[{result:e.HS.executeBasedOnType(de,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let ye={};ye.first=ee,e.HS.updateListInputs(ye),ye={first:[1],second:[-.2],operation:[\\"multiply\\"],...ye};const Se=[{result:e.HS.executeBasedOnType(ye,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let He={};He.second=D,e.HS.updateListInputs(He),He={first:[360],second:[1],operation:[\\"divide\\"],...He};const fe=[{result:e.HS.executeBasedOnType(He,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}],he={shape:[void 0],radius:[.3],radiusList:[void 0],indexes:[void 0]};let xe={};xe.shape=ae,e.HS.updateListInputs(xe),xe={...he,...xe};const ve=[{result:await e.HS.executeBasedOnTypeAsync(xe,!1,(e=>t.occt.fillets.filletEdges(e))),transformers:[]}];let Oe={};Oe.start=L,Oe.end=ie,e.HS.updateListInputs(Oe),Oe={start:[[0,0,0]],end:[[0,1,0]],...Oe};const Ie=[{result:await e.HS.executeBasedOnTypeAsync(Oe,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];let Le={};Le.second=pe,e.HS.updateListInputs(Le),Le={first:[360],second:[1],operation:[\\"divide\\"],...Le};const Be=[{result:e.HS.executeBasedOnType(Le,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let we={};we.start=w,we.end=ie,e.HS.updateListInputs(we),we={start:[[0,0,0]],end:[[0,1,0]],...we};const Te=[{result:await e.HS.executeBasedOnTypeAsync(we,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];let ge={};ge.y=le,e.HS.updateListInputs(ge),ge={x:[0],y:[0],z:[.05],...ge};const Ae=[{result:e.HS.executeBasedOnType(ge,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Ee={};Ee.y=me,Ee.z=Q,e.HS.updateListInputs(Ee),Ee={x:[0],y:[0],z:[-1],...Ee};const be=[{result:e.HS.executeBasedOnType(Ee,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let ze={};ze.y=me,ze.z=J,e.HS.updateListInputs(ze),ze={x:[0],y:[0],z:[0],...ze};const We=[{result:e.HS.executeBasedOnType(ze,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Ce={};Ce.z=Se,e.HS.updateListInputs(Ce),Ce={x:[0],y:[0],z:[0],...Ce};const Pe=[{result:e.HS.executeBasedOnType(Ce,!1,(e=>t.vector.vectorXYZ(e))),transformers:[]}];let Xe={};Xe.step=fe,e.HS.updateListInputs(Xe),Xe={step:[.1],min:[0],max:[360],...Xe};const Ye=e.HS.executeBasedOnType(Xe,!1,(e=>t.vector.span(e))),Ze=[];for(let e=0;e<1;e++)Ze.push({type:\\"flat\\"});const Ne=[{result:Ye,transformers:Ze}];let ke={};ke.first=Se,e.HS.updateListInputs(ke),ke={first:[2],second:[-2],operation:[\\"multiply\\"],...ke};e.HS.executeBasedOnType(ke,!1,(e=>t.math.twoNrOperation(e)));let Me={};Me.listElements=ve,e.HS.updateListInputs(Me),Me={...Me};const Fe=[{result:[Me.listElements?Me.listElements:[]]}],De={shape:[void 0],axis:[[0,0,1]],angle:[0]};let Re={};Re.shape=Ie,Re.axis=o,Re.angle=Be,e.HS.updateListInputs(Re),Re={...De,...Re};const je=[{result:await e.HS.executeBasedOnTypeAsync(Re,!1,(e=>t.occt.transforms.rotate(e))),transformers:[]}];let qe={};qe.first=Be,e.HS.updateListInputs(qe),qe={first:[1],second:[.4],operation:[\\"multiply\\"],...qe};const Ve=[{result:e.HS.executeBasedOnType(qe,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Ge={};Ge.first=Be,e.HS.updateListInputs(Ge),Ge={first:[1],second:[.6],operation:[\\"multiply\\"],...Ge};const Je=[{result:e.HS.executeBasedOnType(Ge,!1,(e=>t.math.twoNrOperation(e))),transformers:[]}];let Ke={};Ke.listElements=[Ae[0],j[0],be[0],We[0]],e.HS.updateListInputs(Ke),Ke={...Ke};const Qe=[{result:[Ke.listElements?Ke.listElements:[]]}];let Ue={};Ue.item=Ne,e.HS.updateListInputs(Ue),Ue={...Ue};const $e=[{result:Ue.item}],_e={shape:[void 0],nrOfDivisions:[11],removeStartPoint:[!1],removeEndPoint:[!1]};let et={};et.shape=je,et.nrOfDivisions=l,e.HS.updateListInputs(et),et={..._e,...et};const tt=[{result:await e.HS.executeBasedOnTypeAsync(et,!1,(e=>t.occt.shapes.wire.divideWireByEqualDistanceToPoints(e))),transformers:[]}],st={shape:[void 0],axis:[[0,0,1]],angle:[0]};let nt={};nt.shape=Te,nt.axis=o,nt.angle=[Ve[0],Je[0]],e.HS.updateListInputs(nt),nt={...st,...nt};const rt=[{result:await e.HS.executeBasedOnTypeAsync(nt,!1,(e=>t.occt.transforms.rotate(e))),transformers:[]}];let at={};at.number=Ve,e.HS.updateListInputs(at),at={number:[1],operation:[\\"negate\\"],...at};const ot=[{result:e.HS.executeBasedOnType(at,!1,(e=>t.math.oneNrOperation(e))),transformers:[]}],it={points:[void 0]};let ct={};ct.points=Qe,e.HS.updateListInputs(ct),ct={...it,...ct};const pt=[{result:await e.HS.executeBasedOnTypeAsync(ct,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];e.HS.drawNodeMeshes(pt,t);const ut={list:[void 0],pattern:[[!0,!0,!1]]};let lt={};lt.list=tt,lt.pattern=u,e.HS.updateListInputs(lt),lt={...ut,...lt};const dt=[{result:e.HS.executeBasedOnType(lt,!0,(e=>t.lists.getByPattern(e))),transformers:[]}];let mt={};mt.listElements=rt,e.HS.updateListInputs(mt),mt={...mt};const yt=[{result:[mt.listElements?mt.listElements:[]]}],St={shape:[void 0],origin:[[0,0,0]],direction:[[0,0,1]]};let Ht={};Ht.shape=pt,Ht.origin=We,Ht.direction=f,e.HS.updateListInputs(Ht),Ht={...St,...Ht};const ft=[{result:await e.HS.executeBasedOnTypeAsync(Ht,!1,(e=>t.occt.transforms.mirror(e))),transformers:[]}],ht={shape:[void 0]};let xt={};xt.shape=pt,e.HS.updateListInputs(xt),xt={...ht,...xt};const vt=await e.HS.executeBasedOnTypeAsync(xt,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),Ot=[];for(let e=0;e<1;e++)Ot.push({type:\\"flat\\"});const It=[{result:vt,transformers:Ot}],Lt={list:[void 0],index:[0],clone:[!0]};let Bt={};Bt.list=yt,e.HS.updateListInputs(Bt),Bt={...Lt,...Bt};const wt=[{result:e.HS.executeBasedOnType(Bt,!1,(e=>t.lists.getItem(e))),transformers:[]}],Tt={shape:[void 0]};let gt={};gt.shape=ft,e.HS.updateListInputs(gt),gt={...Tt,...gt};const At=[{result:await e.HS.executeBasedOnTypeAsync(gt,!1,(e=>t.occt.shapes.edge.getCornerPointsOfEdgesForShape(e))),transformers:[]}],Et={shape:[void 0],nrOfDivisions:[11],removeStartPoint:[!1],removeEndPoint:[!1]};let bt={};bt.shape=wt,bt.nrOfDivisions=l,e.HS.updateListInputs(bt),bt={...Et,...bt};const zt=[{result:await e.HS.executeBasedOnTypeAsync(bt,!1,(e=>t.occt.shapes.wire.divideWireByEqualDistanceToPoints(e))),transformers:[]}],Wt={list:[void 0],index:[3],clone:[!0]};let Ct={};Ct.list=At,e.HS.updateListInputs(Ct),Ct={...Wt,...Ct};const Pt=[{result:e.HS.executeBasedOnType(Ct,!1,(e=>t.lists.removeItemAtIndex(e))),transformers:[]}],Xt={list:[void 0],pattern:[[!0,!0,!1]]};let Yt={};Yt.list=zt,Yt.pattern=c,e.HS.updateListInputs(Yt),Yt={...Xt,...Yt};const Zt=[{result:e.HS.executeBasedOnType(Yt,!1,(e=>t.lists.getByPattern(e))),transformers:[]}],Nt={list:[void 0],clone:[!0]};let kt={};kt.list=Pt,e.HS.updateListInputs(kt),kt={...Nt,...kt};const Mt=e.HS.executeBasedOnType(kt,!1,(e=>t.lists.reverse(e))),Ft=[];for(let e=0;e<1;e++)Ft.push({type:\\"flat\\"});const Dt=[{result:Mt,transformers:Ft}];let Rt={};Rt.listElements=[Zt[0],dt[0]],e.HS.updateListInputs(Rt),Rt={...Rt};const jt=[{result:[Rt.listElements?Rt.listElements:[]]}];let qt={};qt.listElements=[It[0],Dt[0]],e.HS.updateListInputs(qt),qt={...qt};const Vt=[{result:[qt.listElements?qt.listElements:[]]}],Gt={list:[void 0],clone:[!0]};let Jt={};Jt.list=jt,e.HS.updateListInputs(Jt),Jt={...Gt,...Jt};const Kt=e.HS.executeBasedOnType(Jt,!1,(e=>t.lists.flipLists(e))),Qt=[];for(let e=0;e<2;e++)Qt.push({type:\\"flat\\"});const Ut=[{result:Kt,transformers:Qt}],$t={points:[void 0]};let _t={};_t.points=Vt,e.HS.updateListInputs(_t),_t={...$t,..._t};const es=[{result:await e.HS.executeBasedOnTypeAsync(_t,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];let ts={};ts.listElements=Ut,e.HS.updateListInputs(ts),ts={...ts};const ss=[{result:[ts.listElements?ts.listElements:[]]}],ns={shape:[void 0],radius:[.3],radiusList:[void 0],indexes:[void 0]};let rs={};rs.shape=es,e.HS.updateListInputs(rs),rs={...ns,...rs};const as=[{result:await e.HS.executeBasedOnTypeAsync(rs,!1,(e=>t.occt.fillets.fillet2d(e))),transformers:[]}],os={points:[void 0]};let is={};is.points=ss,e.HS.updateListInputs(is),is={...os,...is};const cs=[{result:await e.HS.executeBasedOnTypeAsync(is,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}],ps={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let us={};us.shape=as,us.direction=x,e.HS.updateListInputs(us),us={...ps,...us};const ls=[{result:await e.HS.executeBasedOnTypeAsync(us,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],ds={shape:[void 0]};let ms={};ms.shape=as,e.HS.updateListInputs(ms),ms={...ds,...ms};const ys=[{result:await e.HS.executeBasedOnTypeAsync(ms,!1,(e=>t.occt.shapes.wire.startPointOnWire(e))),transformers:[]}],Ss={shape:[void 0]};let Hs={};Hs.shape=as,e.HS.updateListInputs(Hs),Hs={...Ss,...Hs};const fs=[{result:await e.HS.executeBasedOnTypeAsync(Hs,!1,(e=>t.occt.shapes.wire.endPointOnWire(e))),transformers:[]}],hs={shape:[void 0]};let xs={};xs.shape=as,e.HS.updateListInputs(xs),xs={...hs,...xs};const vs=[{result:await e.HS.executeBasedOnTypeAsync(xs,!1,(e=>t.occt.shapes.wire.closeOpenWire(e))),transformers:[]}],Os={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let Is={};Is.shape=vs,Is.direction=x,e.HS.updateListInputs(Is),Is={...Os,...Is};const Ls=[{result:await e.HS.executeBasedOnTypeAsync(Is,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],Bs={shape:[void 0],radius:[1],radiusList:[void 0],indexes:[void 0],direction:[[0,1,0]]};let ws={};ws.shape=cs,ws.direction=g,e.HS.updateListInputs(ws),ws={...Bs,...ws};const Ts=[{result:await e.HS.executeBasedOnTypeAsync(ws,!1,(e=>t.occt.fillets.fillet3DWire(e))),transformers:[]}],gs={shape:[void 0],face:[void 0],distance:[-.2],tolerance:[.1]};let As={};As.shape=ls,e.HS.updateListInputs(As),As={...gs,...As};const Es=[{result:await e.HS.executeBasedOnTypeAsync(As,!1,(e=>t.occt.operations.offset(e))),transformers:[]}],bs={shape:[void 0],index:[0]};let zs={};zs.shape=ls,e.HS.updateListInputs(zs),zs={...bs,...zs};const Ws=[{result:await e.HS.executeBasedOnTypeAsync(zs,!1,(e=>t.occt.shapes.wire.getWire(e))),transformers:[]}];let Cs={};Cs.item=ys,e.HS.updateListInputs(Cs),Cs={...Cs};const Ps=[{result:Cs.item}];let Xs={};Xs.item=fs,e.HS.updateListInputs(Xs),Xs={...Xs};const Ys=[{result:Xs.item}];let Zs={};Zs.start=fs,Zs.end=ys,e.HS.updateListInputs(Zs),Zs={start:[[0,0,0]],end:[[0,1,0]],...Zs};const Ns=[{result:await e.HS.executeBasedOnTypeAsync(Zs,!1,(e=>t.occt.shapes.wire.createLineWire(e))),transformers:[]}];e.HS.drawNodeMeshes(Ns,t);const ks={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let Ms={};Ms.shape=Ts,Ms.angle=ot,Ms.direction=o,e.HS.updateListInputs(Ms),Ms={...ks,...Ms};const Fs=[{result:await e.HS.executeBasedOnTypeAsync(Ms,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}],Ds={shape:[void 0]};let Rs={};Rs.shape=Ls,e.HS.updateListInputs(Rs),Rs={...Ds,...Rs};const js=[{result:await e.HS.executeBasedOnTypeAsync(Rs,!1,(e=>t.occt.shapes.solid.fromClosedShell(e))),transformers:[]}],qs={shape:[void 0],index:[1]};let Vs={};Vs.shape=Ws,e.HS.updateListInputs(Vs),Vs={...qs,...Vs};const Gs=[{result:await e.HS.executeBasedOnTypeAsync(Vs,!1,(e=>t.occt.shapes.edge.getEdge(e))),transformers:[]}],Js={shape:[void 0],index:[0]};let Ks={};Ks.shape=Es,e.HS.updateListInputs(Ks),Ks={...Js,...Ks};const Qs=[{result:await e.HS.executeBasedOnTypeAsync(Ks,!1,(e=>t.occt.shapes.wire.getWire(e))),transformers:[]}],Us={shape:[void 0],translation:[[0,0,0]]};let $s={};$s.shape=Ns,$s.translation=E,e.HS.updateListInputs($s),$s={...Us,...$s};const _s=[{result:await e.HS.executeBasedOnTypeAsync($s,!1,(e=>t.occt.transforms.translate(e))),transformers:[]}],en={shape:[void 0],direction:[[0,1,0]]};let tn={};tn.shape=Fs,tn.direction=Pe,e.HS.updateListInputs(tn),tn={...en,...tn};const sn=[{result:await e.HS.executeBasedOnTypeAsync(tn,!1,(e=>t.occt.operations.extrude(e))),transformers:[]}];let nn={};nn.listElements=js,e.HS.updateListInputs(nn),nn={...nn};const rn=[{result:[nn.listElements?nn.listElements:[]]}],an={shape:[void 0],index:[1]};let on={};on.shape=Qs,e.HS.updateListInputs(on),on={...an,...on};const cn=[{result:await e.HS.executeBasedOnTypeAsync(on,!1,(e=>t.occt.shapes.edge.getEdge(e))),transformers:[]}];let pn={};pn.listElements=Gs,e.HS.updateListInputs(pn),pn={...pn};const un=[{result:[pn.listElements?pn.listElements:[]]}],ln={shape:[void 0]};let dn={};dn.shape=_s,e.HS.updateListInputs(dn),dn={...ln,...dn};const mn=[{result:await e.HS.executeBasedOnTypeAsync(dn,!1,(e=>t.occt.shapes.wire.startPointOnWire(e))),transformers:[]}],yn={shape:[void 0]};let Sn={};Sn.shape=_s,e.HS.updateListInputs(Sn),Sn={...yn,...Sn};const Hn=[{result:await e.HS.executeBasedOnTypeAsync(Sn,!1,(e=>t.occt.shapes.wire.endPointOnWire(e))),transformers:[]}],fn={shapes:[void 0]};let hn={};hn.shapes=un,e.HS.updateListInputs(hn),hn={...fn,...hn};const xn=[{result:await e.HS.executeBasedOnTypeAsync(hn,!1,(e=>t.occt.shapes.wire.combineEdgesAndWiresIntoAWire(e))),transformers:[]}];let vn={};vn.listElements=cn,e.HS.updateListInputs(vn),vn={...vn};const On=[{result:[vn.listElements?vn.listElements:[]]}],In={shape:[void 0],shapes:[void 0],keepEdges:[!1]};let Ln={};Ln.shape=sn,Ln.shapes=Fe,e.HS.updateListInputs(Ln),Ln={...In,...Ln};const Bn=[{result:await e.HS.executeBasedOnTypeAsync(Ln,!1,(e=>t.occt.booleans.difference(e))),transformers:[]}];let wn={};wn.item=Hn,e.HS.updateListInputs(wn),wn={...wn};const Tn=[{result:wn.item}];let gn={};gn.item=mn,e.HS.updateListInputs(gn),gn={...gn};const An=[{result:gn.item}],En={shape:[void 0],shapes:[void 0],keepEdges:[!1]};let bn={};bn.shape=Bn,bn.shapes=rn,e.HS.updateListInputs(bn),bn={...En,...bn};const zn=[{result:await e.HS.executeBasedOnTypeAsync(bn,!1,(e=>t.occt.booleans.difference(e))),transformers:[]}],Wn={shapes:[void 0]};let Cn={};Cn.shapes=On,e.HS.updateListInputs(Cn),Cn={...Wn,...Cn};const Pn=[{result:await e.HS.executeBasedOnTypeAsync(Cn,!1,(e=>t.occt.shapes.wire.combineEdgesAndWiresIntoAWire(e))),transformers:[]}];let Xn={};Xn.listElements=[Ps[0],Tn[0],An[0],Ys[0]],e.HS.updateListInputs(Xn),Xn={...Xn};const Yn=[{result:[Xn.listElements?Xn.listElements:[]]}],Zn={shape:[void 0],origin:[[0,0,0]],normal:[[0,0,1]]};let Nn={};Nn.shape=zn,Nn.normal=m,e.HS.updateListInputs(Nn),Nn={...Zn,...Nn};const kn=[{result:await e.HS.executeBasedOnTypeAsync(Nn,!1,(e=>t.occt.transforms.mirrorAlongNormal(e))),transformers:[]}];let Mn={};Mn.listElements=[xn[0],Pn[0]],e.HS.updateListInputs(Mn),Mn={...Mn};const Fn=[{result:[Mn.listElements?Mn.listElements:[]]}],Dn={points:[void 0]};let Rn={};Rn.points=Yn,e.HS.updateListInputs(Rn),Rn={...Dn,...Rn};const jn=[{result:await e.HS.executeBasedOnTypeAsync(Rn,!1,(e=>t.occt.shapes.wire.createPolylineWire(e))),transformers:[]}];let qn={};qn.listElements=[kn[0],zn[0]],e.HS.updateListInputs(qn),qn={...qn};const Vn=[{result:[qn.listElements?qn.listElements:[]]}],Gn={shapes:[void 0],makeSolid:[!1]};let Jn={};Jn.shapes=Fn,e.HS.updateListInputs(Jn),Jn={...Gn,...Jn};const Kn=[{result:await e.HS.executeBasedOnTypeAsync(Jn,!1,(e=>t.occt.operations.loft(e))),transformers:[]}],Qn={shape:[void 0],radius:[.5],radiusList:[void 0],indexes:[void 0]};let Un={};Un.shape=jn,e.HS.updateListInputs(Un),Un={...Qn,...Un};const $n=[{result:await e.HS.executeBasedOnTypeAsync(Un,!1,(e=>t.occt.fillets.fillet2d(e))),transformers:[]}],_n={shapes:[void 0]};let er={};er.shapes=Vn,e.HS.updateListInputs(er),er={..._n,...er};const tr=[{result:await e.HS.executeBasedOnTypeAsync(er,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],sr={shape:[void 0],origin:[[0,0,0]],direction:[[0,0,1]]};let nr={};nr.shape=Kn,nr.origin=We,nr.direction=f,e.HS.updateListInputs(nr),nr={...sr,...nr};const rr=[{result:await e.HS.executeBasedOnTypeAsync(nr,!1,(e=>t.occt.transforms.mirror(e))),transformers:[]}],ar={shape:[void 0],angle:[360],direction:[[0,1,0]],copy:[!1]};let or={};or.shape=$n,or.direction=x,e.HS.updateListInputs(or),or={...ar,...or};const ir=[{result:await e.HS.executeBasedOnTypeAsync(or,!1,(e=>t.occt.operations.revolve(e))),transformers:[]}];let cr={};cr.listElements=[ls[0],Es[0],Kn[0],rr[0]],e.HS.updateListInputs(cr),cr={...cr};const pr=[{result:[cr.listElements?cr.listElements:[]]}],ur={shape:[void 0],offset:[-.1]};let lr={};lr.shape=ir,e.HS.updateListInputs(lr),lr={...ur,...lr};const dr=[{result:await e.HS.executeBasedOnTypeAsync(lr,!1,(e=>t.occt.operations.makeThickSolidSimple(e))),transformers:[]}],mr={shape:[void 0],angle:[0],center:[[0,0,0]],axis:[[0,0,1]]};let yr={};yr.shape=tr,yr.angle=$e,yr.axis=k,e.HS.updateListInputs(yr),yr={...mr,...yr};const Sr=[{result:await e.HS.executeBasedOnTypeAsync(yr,!1,(e=>t.occt.transforms.rotateAroundCenter(e))),transformers:[]}],Hr={shapes:[void 0],tolerance:[1e-7]};let fr={};fr.shapes=pr,e.HS.updateListInputs(fr),fr={...Hr,...fr};const hr=[{result:await e.HS.executeBasedOnTypeAsync(fr,!1,(e=>t.occt.shapes.shell.sewFaces(e))),transformers:[]}],xr={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let vr={};vr.entity=dr,vr.options=z,e.HS.updateListInputs(vr),vr={...xr,...vr};await e.HS.executeBasedOnTypeAsync(vr,!1,(e=>t.draw.drawAnyAsync(e)));let Or={};Or.listElements=Sr,e.HS.updateListInputs(Or),Or={...Or};const Ir=[{result:[Or.listElements?Or.listElements:[]]}],Lr={shapes:[void 0]};let Br={};Br.shapes=Ir,e.HS.updateListInputs(Br),Br={...Lr,...Br};const wr=[{result:await e.HS.executeBasedOnTypeAsync(Br,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}];let Tr={};Tr.listElements=[hr[0],ve[0],wr[0]],e.HS.updateListInputs(Tr),Tr={...Tr};const gr=[{result:[Tr.listElements?Tr.listElements:[]]}],Ar={shapes:[void 0]};let Er={};Er.shapes=gr,e.HS.updateListInputs(Er),Er={...Ar,...Er};const br=[{result:await e.HS.executeBasedOnTypeAsync(Er,!1,(e=>t.occt.shapes.compound.makeCompound(e))),transformers:[]}],zr={entity:[void 0],options:[void 0],babylonMesh:[void 0]};let Wr={};Wr.entity=br,Wr.options=ne,e.HS.updateListInputs(Wr),Wr={...zr,...Wr};await e.HS.executeBasedOnTypeAsync(Wr,!1,(e=>t.draw.drawAnyAsync(e)))}(BitByBit,bitbybit,bitbybitRunnerResult,bitbybitRunnerInputs,Bit);\"}' };