Skip to content

Instantly share code, notes, and snippets.

@wallabyway
wallabyway / package.json
Created May 16, 2023 06:12
minimal powerBI visual component with three.js (spinning grid)
View package.json
{
"name": "visual",
"description": "default_template_value",
"repository": {
"type": "default_template_value",
"url": "default_template_value"
},
"license": "MIT",
"scripts": {
"pbiviz": "pbiviz",
@wallabyway
wallabyway / index.html
Last active December 9, 2022 18:33
multi-model-load with glb example / Live site: http://bl.ocks.org/wallabyway/raw/3f3d8631cf3b0994f002f5779d45ce11/
View index.html
<head>
<title>Viewer Loading Multi-Model with GLB</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="data:,">
<style>
#panel {
position: fixed; z-index: 2; margin: 10px;
font-family:arial; font-size:1.5em; }
</style>
@wallabyway
wallabyway / convert-glb.mjs
Created June 30, 2022 04:08
convert 3D-Tiles v1 to v1.1 (3D-Tiles-Next) for point clouds
View convert-glb.mjs
// PURPOSE: convert draco-pnts to glb (ie. 3dTiles v1.0 to v1.1)
// INSTALL: npm install draco3d gltfpack
// RUN:
// > node infolderPNTS outfolderGLB
import fs from 'fs';
import draco3d from 'draco3d';
import gltfpack from 'gltfpack';
const inFolder = process.argv.slice(2)[0] || 'infolder';
@wallabyway
wallabyway / pull-tiles-offline.mjs
Last active June 29, 2022 21:19
handy batch download of 3d-tiles tileset.json from bim360 (using batchPromises for threads)
View pull-tiles-offline.mjs
// PURPOSE: download 3d-tiles files from BIM360, to local drive
// INSTALL: npm install node-fetch
// RUN: add your BIM360 access-token and the base url, then type
// > node pull-tiles-offline.mjs myOutputFolder
import fetch from 'node-fetch';
import fs from 'fs';
import util from 'util';
import stream from 'stream';
@wallabyway
wallabyway / index.html
Created June 16, 2022 23:13
minimal three.js modules (no buildpack)
View index.html
<header>
<style>
body { font-family: arial; margin: 0; }
.nav {
color: white; background-color: rgba(100, 100, 100, 0.5);
text-align: center; width: 100%; top: 0px;
position: fixed; z-index: 1; margin: 0px;
}
</style>
</header>
@wallabyway
wallabyway / clone-three-mesh.html
Created March 31, 2022 19:33
let mesh = viewer.model.getFragmentList().getVizmesh(fragId).clone();
View clone-three-mesh.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="icon" href="data:,">
@wallabyway
wallabyway / unlit-texture.js
Last active March 31, 2022 19:32
solving texture material in forgeViewer, so it is completely unlit (no weird lighting artifacts
View unlit-texture.js
function getFlatTexture_FlatMaterial(textureUrl) {
const shader = {
side: THREE.DoubleSide,
depthWrite: false,
depthTest: true,
uniforms: {
map: { value: THREE.ImageUtils.loadTexture(textureUrl), type: 't' }
},
fragmentShader: `
varying vec2 vUv;
@wallabyway
wallabyway / convert.js
Last active December 23, 2021 00:19
svf2gltf-with-filter
View convert.js
// convert SVF to dstPath/output.glb (with zeux compression)
// but only convert a subset of objects (see filter on line 23)
// INSTALL:
// > npm install forge-convert-utils forge-server-utils fs-extra gltfpack
// RUN:
// > node convert url guid token dstPath
const path = require('path');
@wallabyway
wallabyway / convert-gltf-to-glb.js
Last active September 27, 2022 23:44
gltf to glb test
View convert-gltf-to-glb.js
var fs = require('fs');
function ConvertToGLB(gltf, outputFilename, sourceFilename) {
const Binary = {
Magic: 0x46546C67
};
const bufferMap = new Map();
function decodeBase64(uri) {
@wallabyway
wallabyway / 3dwood-uvw.js
Created August 6, 2021 01:26
apply 3D wood prism...
View 3dwood-uvw.js
function ensureMeshUvws(geometry) {
// If mesh has no uvws, generate them by copying the vertex position vectors
// (x,y,z) => (u,v,w). We apply no transform. All geometry loaded by lmvtk uses
// this interleaved vertex buffer approach. We have to get the vertex position
// vectors out of the interleaved vertex buffer.
if (!geometry.getAttribute('uvw')) {
let vbb = ggeom.vb; // should always be 3