UNPKG

awv3

Version:
118 lines (108 loc) 4.32 kB
import Plugin from '../../session/plugin'; import React, { Component, connect } from '../../session/renderer'; import Dimension from '../dimension/'; import { Checkbox, Dropdown, Input, Group, Label, Link, Slider } from '../../session/elements'; const resources = ['extrusion'].reduce( (prev, item) => ({ ...prev, [item]: require('!!url-loader!awv3-icons/32x32/' + item + '.png') }), {}, ); class MemberRow extends Component { render({ name, value: { type, value } }) { if (name === 'extrudeType') return ( <Slider name={name} value={value} onValue={v => this.set(v)} max={2} positions={{ ...['up', 'down', 'symmetric'] }} /> ); else if (name.endsWith('Angle')) return ( <Slider name={name} value={value} onValue={v => this.set(v)} max={360} step={10} positions={{ 0: '0°', 90: '90°', 180: '180°', 270: '270°', 360: '360°' }} /> ); else if (name.startsWith('invert')) return <Checkbox name={name} value={Boolean(value)} onValue={v => this.set(Number(v))} />; else if (type === 'point') return ( <Input name={name} value={value.map(String).join(',')} onValue={v => this.set(v.split(',').map(Number))} format={Input.Format.Vector} /> ); else if (type === 'real') return <Input name={name} value={String(value)} onValue={v => this.set(Number(v))} />; else return <Label name={name} value={String(value)} />; } set(value) { const id = this.props.id, m = JSON.stringify(this.props.name), v = JSON.stringify(value), f = 1; this.plugin.connection.execute(`_C.CADApplication.SetExpressions(${id}, [${m}], [${v}], ${f});`); } } class SketchRow extends Component { render({ name, value: { value } }) { return <Dropdown name={name} value={String(value)} onValue={v => this.set(v)} />; } set(value) { if (true) return; // TODO const sketches = this.tree[this.tree.root].features.map(x => this.tree[x]).filter(x => x.class === 'CC_Sketch'); const items = sketches.map(x => x.name); const t2e = t => (t ? this.tree[t].name : ''); const e2t = e => (sketches.find(x => x.name === e) || { id: 0 }).id; this.connection.execute(`VAR region, sketch; region = CADH_RealToId(${region}); sketch = CADH_RealToId(${e2t(e)}); region.SetCurves(sketch.GetCCCurves());`); } } @connect((state, props) => { const tree = state.connections[props.connection].tree; const extrusion = tree[props.id]; const region = extrusion.children.map(x => tree[x]).find(x => x.class === 'CC_SketchRegion'); return { extrusion, region }; }) class Extrusion extends Component { render({ extrusion, region }) { const id = extrusion.id; return ( <Group format={Group.Format.Table}> {Object.entries(extrusion.members) .filter(([name]) => !name.startsWith('_')) .map(([name, value]) => <MemberRow id={id} name={name} value={value} />)} <SketchRow id={region.id} name="sketch" value={region.members.sketch} /> </Group> ); } } export default class Feature extends Plugin { constructor(session, args) { super(session, { type: 'Extrusion', icon: 'extrusion', resources, ...args }); this.dimension = new Dimension(this.session, { name: 'Dimensions', collapsed: true, closeable: false, parent: this.id, }); this.dependencies.push(this.dimension); } render() { return ( <Group> <Extrusion connection={this.connection.id} id={this.feature} /> <Link value={this.dimension.id} collapsable={true} /> </Group> ); } onEnabled() { this.dimension.enabled = true; } }