1 /*******************************************************************************
\r
2 * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.g3d.csg.scenegraph2;
\r
14 import org.jcae.opencascade.jni.BRepBuilderAPI_MakeEdge;
\r
15 import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire;
\r
16 import org.jcae.opencascade.jni.BRepOffsetAPI_ThruSections;
\r
17 import org.jcae.opencascade.jni.TopoDS_Edge;
\r
18 import org.jcae.opencascade.jni.TopoDS_Shape;
\r
19 import org.jcae.opencascade.jni.TopoDS_Wire;
\r
20 import org.simantics.g3d.csg.ontology.CSG;
\r
21 import org.simantics.g3d.property.annotations.GetPropertyValue;
\r
22 import org.simantics.g3d.property.annotations.SetPropertyValue;
\r
23 import org.simantics.objmap.graph.annotations.GraphType;
\r
24 import org.simantics.objmap.graph.annotations.RelatedGetValue;
\r
25 import org.simantics.objmap.graph.annotations.RelatedSetValue;
\r
28 @GraphType(CSG.URIs.RectangularSolid)
\r
29 public class RectangularSolidNode extends CSGnode {
\r
38 @RelatedSetValue(CSG.URIs.HasXAxisMinimumSize)
\r
39 @SetPropertyValue(CSG.URIs.HasXAxisMinimumSize)
\r
40 public void setX1(double d) {
\r
44 firePropertyChanged(CSG.URIs.HasXAxisMinimumSize);
\r
47 @RelatedSetValue(CSG.URIs.HasXAxisMaximumSize)
\r
48 @SetPropertyValue(CSG.URIs.HasXAxisMaximumSize)
\r
49 public void setX2(double d) {
\r
53 firePropertyChanged(CSG.URIs.HasXAxisMaximumSize);
\r
56 @RelatedSetValue(CSG.URIs.HasYAxisSize)
\r
57 @SetPropertyValue(CSG.URIs.HasYAxisSize)
\r
58 public void setSY(double d) {
\r
62 firePropertyChanged(CSG.URIs.HasYAxisSize);
\r
65 @RelatedSetValue(CSG.URIs.HasZAxisMinimumSize)
\r
66 @SetPropertyValue(CSG.URIs.HasZAxisMinimumSize)
\r
67 public void setZ1(double d) {
\r
71 firePropertyChanged(CSG.URIs.HasZAxisMinimumSize);
\r
74 @RelatedSetValue(CSG.URIs.HasZAxisMaximumSize)
\r
75 @SetPropertyValue(CSG.URIs.HasZAxisMaximumSize)
\r
76 public void setZ2(double d) {
\r
80 firePropertyChanged(CSG.URIs.HasZAxisMaximumSize);
\r
83 @RelatedGetValue(CSG.URIs.HasXAxisMinimumSize)
\r
84 @GetPropertyValue(value=CSG.URIs.HasXAxisMinimumSize, name = "X Min Size")
\r
85 public double getX1() {
\r
89 @RelatedGetValue(CSG.URIs.HasXAxisMaximumSize)
\r
90 @GetPropertyValue(value=CSG.URIs.HasXAxisMaximumSize, name = "X Max Size")
\r
91 public double getX2() {
\r
95 @RelatedGetValue(CSG.URIs.HasYAxisSize)
\r
96 @GetPropertyValue(value=CSG.URIs.HasYAxisSize, name = "Y Size")
\r
97 public double getY() {
\r
101 @RelatedGetValue(CSG.URIs.HasZAxisMinimumSize)
\r
102 @GetPropertyValue(value=CSG.URIs.HasZAxisMinimumSize, name = "Z Min Size")
\r
103 public double getZ1() {
\r
107 @RelatedGetValue(CSG.URIs.HasZAxisMaximumSize)
\r
108 @GetPropertyValue(value=CSG.URIs.HasZAxisMaximumSize, name = "Z Max Size")
\r
109 public double getZ2() {
\r
114 public TopoDS_Shape getBaseGeometry() {
\r
115 double x1 = this.x1 *0.5;
\r
116 double x2 = this.x2 *0.5;
\r
117 double z1 = this.z1 *0.5;
\r
118 double z2 = this.z2 *0.5;
\r
119 double y = this.y * 0.5;
\r
121 BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire();
\r
122 BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,z1},new double[]{x1,-y,-z1});
\r
123 TopoDS_Edge top_edge = (TopoDS_Edge)edge.shape();
\r
124 wire.add(top_edge);
\r
128 edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,-z1},new double[]{-x1,-y,-z1});
\r
129 top_edge = (TopoDS_Edge)edge.shape();
\r
130 wire.add(top_edge);
\r
134 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,-z1},new double[]{-x1,-y,z1});
\r
135 top_edge = (TopoDS_Edge)edge.shape();
\r
136 wire.add(top_edge);
\r
140 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,z1},new double[]{x1,-y,z1});
\r
141 top_edge = (TopoDS_Edge)edge.shape();
\r
142 wire.add(top_edge);
\r
146 TopoDS_Wire w1 = (TopoDS_Wire)wire.shape();
\r
148 wire = new BRepBuilderAPI_MakeWire();
\r
151 edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,z2},new double[]{x2, y,-z2});
\r
152 top_edge = (TopoDS_Edge)edge.shape();
\r
153 wire.add(top_edge);
\r
157 edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,-z2},new double[]{-x2, y,-z2});
\r
158 top_edge = (TopoDS_Edge)edge.shape();
\r
159 wire.add(top_edge);
\r
163 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,-z2},new double[]{-x2, y,z2});
\r
164 top_edge = (TopoDS_Edge)edge.shape();
\r
165 wire.add(top_edge);
\r
169 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,z2},new double[]{x2, y,z2});
\r
170 top_edge = (TopoDS_Edge)edge.shape();
\r
171 wire.add(top_edge);
\r
175 TopoDS_Wire w2 = (TopoDS_Wire)wire.shape();
\r
178 BRepOffsetAPI_ThruSections generatorb = new BRepOffsetAPI_ThruSections(true, true);
\r
179 generatorb.addWire(w1);
\r
180 generatorb.addWire(w2);
\r
181 generatorb.build();
\r
185 TopoDS_Shape shape = generatorb.shape();
\r
186 generatorb.delete();
\r