mirror of
https://github.com/yeicor-3d/yet-another-cad-viewer.git
synced 2025-12-19 22:24:17 +01:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2370fd72ed | ||
|
|
aef047a658 | ||
|
|
d5cdd094e8 | ||
|
|
9c71573934 | ||
|
|
8fc5ed7544 | ||
|
|
1fd932dbc6 | ||
|
|
539ac40e3d |
@@ -10,19 +10,19 @@ in a web browser.
|
|||||||
- All [GLTF 2.0](https://www.khronos.org/gltf/) features (textures, PBR materials, animations...).
|
- All [GLTF 2.0](https://www.khronos.org/gltf/) features (textures, PBR materials, animations...).
|
||||||
- All [model-viewer](https://modelviewer.dev/) features (smooth controls, augmented reality...).
|
- All [model-viewer](https://modelviewer.dev/) features (smooth controls, augmented reality...).
|
||||||
- Load multiple models at once, load external models and even images as quads.
|
- Load multiple models at once, load external models and even images as quads.
|
||||||
- View and interact with topological entities: faces, edges, vertices and locations.
|
|
||||||
- Control clipping planes and transparency of each model.
|
- Control clipping planes and transparency of each model.
|
||||||
|
- View and interact with topological entities: faces, edges, vertices and locations.
|
||||||
- Select any entity and measure bounding box size and distances.
|
- Select any entity and measure bounding box size and distances.
|
||||||
- Fully-featured static deployment: just upload the viewer and models to your server.
|
|
||||||
- Hot reloading while editing the CAD model (using the `yacv-server` package).
|
- Hot reloading while editing the CAD model (using the `yacv-server` package).
|
||||||
|
- Fully-featured static deployment: just upload the viewer and models to your server.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
The [example](example) is a fully working project that shows how to use the viewer.
|
The [example](example) is a fully working project that shows how to use the viewer.
|
||||||
|
|
||||||
You can play with the latest
|
You can play with the latest
|
||||||
demo [here](https://yeicor-3d.github.io/yet-another-cad-viewer/?preload=base.glb&preload=fox.glb&preload=img.jpg.glb&preload=location.glb)
|
demo [here](https://yeicor-3d.github.io/yet-another-cad-viewer/?preload=logo.glb&preload=fox.glb&preload=img.jpg.glb&preload=location.glb)
|
||||||
(or
|
(or
|
||||||
[without animation](https://yeicor-3d.github.io/yet-another-cad-viewer/?autoplay=false&preload=base.glb&preload=fox.glb&preload=img.jpg.glb&preload=location.glb)).
|
[without animation](https://yeicor-3d.github.io/yet-another-cad-viewer/?autoplay=false&preload=logo.glb&preload=fox.glb&preload=img.jpg.glb&preload=location.glb)).
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import {settings} from "../misc/settings";
|
|||||||
import {inject, onMounted, type Ref, ref, watch} from "vue";
|
import {inject, onMounted, type Ref, ref, watch} from "vue";
|
||||||
import {VList, VListItem} from "vuetify/lib/components/index.mjs";
|
import {VList, VListItem} from "vuetify/lib/components/index.mjs";
|
||||||
import {$renderer, $scene} from "@google/model-viewer/lib/model-viewer-base";
|
import {$renderer, $scene} from "@google/model-viewer/lib/model-viewer-base";
|
||||||
import Loading from "../misc/Loading.vue";
|
|
||||||
import {ModelViewerElement} from '@google/model-viewer';
|
import {ModelViewerElement} from '@google/model-viewer';
|
||||||
import type {ModelScene} from "@google/model-viewer/lib/three-components/ModelScene";
|
import type {ModelScene} from "@google/model-viewer/lib/three-components/ModelScene";
|
||||||
import {Hotspot} from "@google/model-viewer/lib/three-components/Hotspot";
|
import {Hotspot} from "@google/model-viewer/lib/three-components/Hotspot";
|
||||||
@@ -154,7 +153,7 @@ watch(disableTap, (value) => {
|
|||||||
<v-list v-for="src in settings.preload" :key="src">
|
<v-list v-for="src in settings.preload" :key="src">
|
||||||
<v-list-item>{{ src }}</v-list-item>
|
<v-list-item>{{ src }}</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
<loading></loading>
|
<!-- Too much idle CPU usage: <loading></loading> -->
|
||||||
</div>
|
</div>
|
||||||
</model-viewer>
|
</model-viewer>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "yet-another-cad-viewer",
|
"name": "yet-another-cad-viewer",
|
||||||
"version": "0.6.13",
|
"version": "0.6.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "yacv-server"
|
name = "yacv-server"
|
||||||
version = "0.6.13"
|
version = "0.6.15"
|
||||||
description = "Yet Another CAD Viewer (server)"
|
description = "Yet Another CAD Viewer (server)"
|
||||||
authors = ["Yeicor <4929005+Yeicor@users.noreply.github.com>"]
|
authors = ["Yeicor <4929005+Yeicor@users.noreply.github.com>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ class GLTFMgr:
|
|||||||
textures=[Texture(source=0, sampler=0)],
|
textures=[Texture(source=0, sampler=0)],
|
||||||
images=[Image(bufferView=0, mimeType=image[1])],
|
images=[Image(bufferView=0, mimeType=image[1])],
|
||||||
)
|
)
|
||||||
|
# TODO: Reduce the number of draw calls by merging all faces into a single primitive, and using
|
||||||
|
# color attributes + extension? to differentiate them (same for edges and vertices)
|
||||||
self.gltf.set_binary_blob(image[0])
|
self.gltf.set_binary_blob(image[0])
|
||||||
|
|
||||||
def add_face(self, vertices_raw: List[Tuple[float, float, float]], indices_raw: List[Tuple[int, int, int]],
|
def add_face(self, vertices_raw: List[Tuple[float, float, float]], indices_raw: List[Tuple[int, int, int]],
|
||||||
|
|||||||
@@ -206,13 +206,13 @@ class YACV:
|
|||||||
|
|
||||||
def shown_object_names(self, apply_removes: bool = True) -> List[str]:
|
def shown_object_names(self, apply_removes: bool = True) -> List[str]:
|
||||||
"""Returns the names of all objects that have been shown"""
|
"""Returns the names of all objects that have been shown"""
|
||||||
res = []
|
res = set()
|
||||||
for obj in self.show_events.buffer():
|
for obj in self.show_events.buffer():
|
||||||
if not obj.is_remove or not apply_removes:
|
if not obj.is_remove or not apply_removes:
|
||||||
res.append(obj.name)
|
res.add(obj.name)
|
||||||
else:
|
else:
|
||||||
res.remove(obj.name)
|
res.discard(obj.name)
|
||||||
return res
|
return list(res)
|
||||||
|
|
||||||
def _show_events(self, name: str, apply_removes: bool = True) -> List[UpdatesApiFullData]:
|
def _show_events(self, name: str, apply_removes: bool = True) -> List[UpdatesApiFullData]:
|
||||||
"""Returns the show events with the given name"""
|
"""Returns the show events with the given name"""
|
||||||
|
|||||||
Reference in New Issue
Block a user