reshot animations
BIN
demo/gif/1.xcf
After Width: | Height: | Size: 285 KiB |
After Width: | Height: | Size: 279 KiB |
After Width: | Height: | Size: 272 KiB |
After Width: | Height: | Size: 269 KiB |
After Width: | Height: | Size: 269 KiB |
After Width: | Height: | Size: 269 KiB |
After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 54 KiB |
|
@ -1,5 +1,24 @@
|
||||||
|
|
||||||
|
|
||||||
|
const basicWorkflowTS = [
|
||||||
|
10, 'Sketching on a plane',
|
||||||
|
10, 'Extruding a sketch to a solid',
|
||||||
|
10, 'Sketch on a face of a solid',
|
||||||
|
10, 'Peforming boolean operation between solids',
|
||||||
|
]
|
||||||
|
|
||||||
|
const editWorkflowTS = [
|
||||||
|
10, 'opening a file from disk',
|
||||||
|
10, 'editing an existing sketch',
|
||||||
|
10, 'accepting the edit and exiting',
|
||||||
|
]
|
||||||
|
|
||||||
|
const exportTS = [
|
||||||
|
10, 'selecting a body for export',
|
||||||
|
10, 'initiate export',
|
||||||
|
10, 'loading exported stl into 3dprint slicer',
|
||||||
|
10, 'result',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.1 KiB |
|
@ -1,4 +1,4 @@
|
||||||
import React, { useState, useEffect, useRef, useCallback, useReducer } from "react"
|
import React from "react"
|
||||||
import { MdCancel } from 'react-icons/md'
|
import { MdCancel } from 'react-icons/md'
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ export const Clip = ({ setClip, clip }) => {
|
||||||
|
|
||||||
width = Math.min(width * 0.9, 1024)
|
width = Math.min(width * 0.9, 1024)
|
||||||
const top = (window.innerHeight - (width / 1.6) - 32) / 2
|
const top = (window.innerHeight - (width / 1.6) - 32) / 2
|
||||||
// console.log(width, width/1.6, window.innerHeight, top)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='absolute left-0 right-0 m-auto flex flex-col
|
<div className='absolute left-0 right-0 m-auto flex flex-col
|
||||||
|
@ -23,7 +22,7 @@ export const Clip = ({ setClip, clip }) => {
|
||||||
top,
|
top,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className='text-xl flex justify-center items-center bg-green-900 '>
|
<div className='text-xl flex justify-center items-center bg-green-500 '>
|
||||||
<div className='text-gray-50'>
|
<div className='text-gray-50'>
|
||||||
{clip[1]}
|
{clip[1]}
|
||||||
</div>
|
</div>
|
||||||
|
@ -39,22 +38,3 @@ export const Clip = ({ setClip, clip }) => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const basicWorkflowTS = [
|
|
||||||
10, 'Sketching on a plane',
|
|
||||||
10, 'Extruding a sketch to a solid',
|
|
||||||
10, 'Sketch on a face of a solid',
|
|
||||||
10, 'Peforming boolean operation between solids',
|
|
||||||
]
|
|
||||||
|
|
||||||
const editWorkflowTS = [
|
|
||||||
10, 'opening a file from disk',
|
|
||||||
10, 'editing an existing sketch',
|
|
||||||
10, 'accepting the edit and exiting',
|
|
||||||
]
|
|
||||||
|
|
||||||
const exportTS = [
|
|
||||||
10, 'selecting a body for export',
|
|
||||||
10, 'initiate export',
|
|
||||||
10, 'loading exported stl into 3dprint slicer',
|
|
||||||
10, 'result',
|
|
||||||
]
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ function reducer(state, action) {
|
||||||
case 'drag':
|
case 'drag':
|
||||||
const dragLeft = state.dragLeft - action.move
|
const dragLeft = state.dragLeft - action.move
|
||||||
|
|
||||||
if (dragLeft < 0 || dragLeft > state.rect * arr.length - 1) {
|
if (dragLeft < 0 || dragLeft > state.rect * (arr.length - 1)) {
|
||||||
return state
|
return state
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
|
@ -74,7 +74,7 @@ const transTime = 300
|
||||||
const elastic = `transform ${transTime}ms cubic-bezier(0.4, 0.0, 0.2, 1)`;
|
const elastic = `transform ${transTime}ms cubic-bezier(0.4, 0.0, 0.2, 1)`;
|
||||||
|
|
||||||
const arr = [
|
const arr = [
|
||||||
['Sketch out your idea in a 2D outline.', 'sketch.png'],
|
['Sketch out the 2D outline of your idea.', 'sketch.mp4'],
|
||||||
['Extrude the sketched shape into a 3D solid.', 'extrude.png'],
|
['Extrude the sketched shape into a 3D solid.', 'extrude.png'],
|
||||||
['Use additional sketches to sculpt or extend the model.', 'sculpt.gif'],
|
['Use additional sketches to sculpt or extend the model.', 'sculpt.gif'],
|
||||||
['Export your design to a 3D printer and turn into reality!', '3dprint.mp4'],
|
['Export your design to a 3D printer and turn into reality!', '3dprint.mp4'],
|
||||||
|
@ -178,6 +178,7 @@ export const Help = ({ setModal, setQs }) => {
|
||||||
width: state.rect * 0.8,
|
width: state.rect * 0.8,
|
||||||
height: state.rect * 0.8,
|
height: state.rect * 0.8,
|
||||||
}}
|
}}
|
||||||
|
draggable='false'
|
||||||
></img>
|
></img>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,7 +204,7 @@ export const Help = ({ setModal, setQs }) => {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
className="cursor-pointer text-gray-50 bg-green-500 rounded p-1.5 inline-block hover:bg-green-600"
|
className="cursor-pointer text-gray-50 bg-green-500 rounded p-1.5 inline-block hover:bg-green-500"
|
||||||
// style={{
|
// style={{
|
||||||
// position:'absolute'
|
// position:'absolute'
|
||||||
// bottom: 0.1 * state.rect}}
|
// bottom: 0.1 * state.rect}}
|
||||||
|
|
|
@ -32,7 +32,6 @@ export const NavBar = () => {
|
||||||
const modified = useSelector(state => state.ui.modified)
|
const modified = useSelector(state => state.ui.modified)
|
||||||
const fileName = useSelector(state => state.ui.fileName)
|
const fileName = useSelector(state => state.ui.fileName)
|
||||||
const mode = useSelector(state => state.ui.mode)
|
const mode = useSelector(state => state.ui.mode)
|
||||||
const help = useSelector(state => state.ui.help)
|
|
||||||
|
|
||||||
const boolOp = (code) => {
|
const boolOp = (code) => {
|
||||||
if (sce.selected.length != 2 || !sce.selected.every(e => e.userData.type == 'mesh')) {
|
if (sce.selected.length != 2 || !sce.selected.every(e => e.userData.type == 'mesh')) {
|
||||||
|
@ -190,7 +189,7 @@ export const NavBar = () => {
|
||||||
([Icon, fcn, txt], idx) => (
|
([Icon, fcn, txt], idx) => (
|
||||||
Icon !== undefined ?
|
Icon !== undefined ?
|
||||||
<Icon className={`cursor-pointer fill-current w-auto h-full p-3.5
|
<Icon className={`cursor-pointer fill-current w-auto h-full p-3.5
|
||||||
${idx == buttonIdx[mode] ? 'bg-green-800' : 'hover:bg-gray-600 bg-transparent'}`} tooltip={txt}
|
${idx == buttonIdx[mode] ? 'bg-green-500' : 'hover:bg-gray-600 bg-transparent'}`} tooltip={txt}
|
||||||
onClick={fcn} key={idx}
|
onClick={fcn} key={idx}
|
||||||
/> :
|
/> :
|
||||||
<div className="w-12 h-full"></div>
|
<div className="w-12 h-full"></div>
|
||||||
|
@ -200,7 +199,7 @@ export const NavBar = () => {
|
||||||
<div className='w-auto h-full flex-1 justify-end flex-shrink-1 hidden md:flex'>
|
<div className='w-auto h-full flex-1 justify-end flex-shrink-1 hidden md:flex'>
|
||||||
|
|
||||||
<MdHelpOutline className={`cursor-pointer fill-current w-auto h-full p-3
|
<MdHelpOutline className={`cursor-pointer fill-current w-auto h-full p-3
|
||||||
${modal ? 'bg-green-800' : 'hover:bg-gray-600 bg-transparent'}`} onClick={() => {
|
${modal ? 'bg-green-500' : 'hover:bg-gray-600 bg-transparent'}`} onClick={() => {
|
||||||
setModal(true)
|
setModal(true)
|
||||||
}
|
}
|
||||||
} />
|
} />
|
||||||
|
|
|
@ -59,24 +59,14 @@ export const QuickStart = ({ setModal }) => {
|
||||||
const dispatch = useDispatch()
|
const dispatch = useDispatch()
|
||||||
|
|
||||||
const [clip, setClip] = useState(null)
|
const [clip, setClip] = useState(null)
|
||||||
const [rect, setRect] = useState(Math.min(Math.min(window.innerHeight * 0.8, window.innerWidth * 0.7), 800))
|
|
||||||
|
|
||||||
const updateSize = () => {
|
|
||||||
setRect(Math.min(Math.min(window.innerHeight * 0.8, window.innerWidth * 0.7), 800))
|
|
||||||
}
|
|
||||||
useEffect(() => {
|
|
||||||
window.addEventListener('resize', updateSize)
|
|
||||||
return () => {
|
|
||||||
window.removeEventListener('resize', updateSize)
|
|
||||||
}
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
return <div className="absolute left-0 right-0 mx-auto bg-gray-700 flex flex-col items-center
|
return <div className="absolute left-0 right-0 mx-auto bg-gray-700 flex flex-col items-center
|
||||||
text-sm lg:text-base xl:text-lg text-gray-50"
|
text-sm lg:text-base xl:text-lg text-gray-50"
|
||||||
style={{
|
style={{
|
||||||
width: rect,
|
width: 'min(800px, 70%)',
|
||||||
height: 1.1 * rect,
|
height: '90%' ,
|
||||||
top: (window.innerHeight - 1.1 * rect) / 2,
|
top: 'calc(5% + 14px)' ,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className='w-full h-full bg-transparent overflow-y-auto overflow-x-hidden flex flex-col items-center'>
|
<div className='w-full h-full bg-transparent overflow-y-auto overflow-x-hidden flex flex-col items-center'>
|
||||||
|
@ -175,7 +165,7 @@ export const QuickStart = ({ setModal }) => {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className='absolute -top-7 w-full text-xl flex justify-center items-center bg-green-800'>
|
<div className='absolute -top-7 w-full text-xl flex justify-center items-center bg-green-500'>
|
||||||
<div className='text-gray-50'>
|
<div className='text-gray-50'>
|
||||||
Quick Start
|
Quick Start
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,7 +12,8 @@ raycaster.params.Points.threshold = 1;
|
||||||
|
|
||||||
|
|
||||||
const color = {
|
const color = {
|
||||||
background: 0x18181B,
|
// background: 0x181818,
|
||||||
|
background: 0x404040,
|
||||||
lighting: 0xFFFFFF,
|
lighting: 0xFFFFFF,
|
||||||
emissive: 0x072534,
|
emissive: 0x072534,
|
||||||
meshTempHover: 0x9DCFED,
|
meshTempHover: 0x9DCFED,
|
||||||
|
|