├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── LICENSE
├── README.md
├── build-all.bat
├── info-examples
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── solibri
│ │ └── smc
│ │ └── api
│ │ └── examples
│ │ ├── AmountOfDoors.java
│ │ ├── DistanceFromDoors.java
│ │ ├── DoorWidth.java
│ │ ├── DynamicInfoSettingGroup.java
│ │ ├── DynamicInformation.java
│ │ ├── DynamicNameSetting.java
│ │ ├── DynamicValueSetting.java
│ │ ├── ExcelFileLocationSetting.java
│ │ ├── FoundFromExcel.java
│ │ ├── HasDoors.java
│ │ ├── HasFailedChecking.java
│ │ ├── HasPropertySetAndProperty.java
│ │ ├── IfcEntityType.java
│ │ ├── IsInSelectionBasket.java
│ │ ├── RatioOfDoors.java
│ │ ├── SchedulingInformation.java
│ │ ├── WindowFloorAreaPercentage.java
│ │ └── costanalysis
│ │ ├── CostAnalysisSettingDialog.java
│ │ ├── CostFactorSettingGroup.java
│ │ ├── WallMaterialCostClassificationNameSetting.java
│ │ └── WallMaterialCostInformation.java
│ └── resources
│ ├── META-INF
│ └── services
│ │ ├── com.solibri.smc.api.info.Information
│ │ ├── com.solibri.smc.api.info.ParametricInformation
│ │ ├── com.solibri.smc.api.settings.Setting
│ │ ├── com.solibri.smc.api.settings.SettingDialog
│ │ └── com.solibri.smc.api.settings.SettingGroup
│ └── com
│ └── solibri
│ └── smc
│ └── api
│ └── examples
│ ├── DistanceFromDoors.properties
│ ├── DistanceFromDoors_de.properties
│ ├── DistanceFromDoors_fi.properties
│ ├── DistanceFromDoors_fr.properties
│ ├── DistanceFromDoors_ja.properties
│ ├── DistanceFromDoors_pt.properties
│ ├── DistanceFromDoors_ru.properties
│ ├── DynamicInfoSettingGroup.properties
│ ├── DynamicInfoSettingGroup_de.properties
│ ├── DynamicInfoSettingGroup_fi.properties
│ ├── DynamicInfoSettingGroup_fr.properties
│ ├── DynamicInfoSettingGroup_ja.properties
│ ├── DynamicInfoSettingGroup_pt.properties
│ ├── DynamicInfoSettingGroup_ru.properties
│ ├── DynamicNameSetting.properties
│ ├── DynamicNameSetting_de.properties
│ ├── DynamicNameSetting_fi.properties
│ ├── DynamicNameSetting_fr.properties
│ ├── DynamicNameSetting_ja.properties
│ ├── DynamicNameSetting_pt.properties
│ ├── DynamicNameSetting_ru.properties
│ ├── DynamicValueSetting.properties
│ ├── DynamicValueSetting_de.properties
│ ├── DynamicValueSetting_fi.properties
│ ├── DynamicValueSetting_fr.properties
│ ├── DynamicValueSetting_ja.properties
│ ├── DynamicValueSetting_pt.properties
│ ├── DynamicValueSetting_ru.properties
│ ├── ExcelFileLocationSetting.properties
│ ├── ExcelFileLocationSetting_de.properties
│ ├── ExcelFileLocationSetting_fi.properties
│ ├── ExcelFileLocationSetting_fr.properties
│ ├── ExcelFileLocationSetting_ja.properties
│ ├── ExcelFileLocationSetting_pt.properties
│ └── ExcelFileLocationSetting_ru.properties
├── info-template
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── solibri
│ │ └── info
│ │ └── ExampleInfo.java
│ └── resources
│ ├── META-INF
│ └── services
│ │ └── com.solibri.smc.api.info.Information
│ └── com
│ └── solibri
│ └── info
│ ├── ExampleInfo.properties
│ ├── ExampleInfo_de.properties
│ ├── ExampleInfo_fi.properties
│ ├── ExampleInfo_fr.properties
│ ├── ExampleInfo_ja.properties
│ ├── ExampleInfo_pt.properties
│ └── ExampleInfo_ru.properties
├── rule-examples
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── solibri
│ │ └── smc
│ │ └── api
│ │ └── examples
│ │ ├── beginner
│ │ ├── ClashDetectionRule.java
│ │ ├── ClashDetectionRuleUIDefinition.java
│ │ ├── ComponentHeightRule.java
│ │ ├── DistanceVisualizationRule.java
│ │ ├── DistanceVisualizationRuleUIDefinition.java
│ │ ├── HeatmapVisualizationRule.java
│ │ ├── HeatmapVisualizationRuleUIDefinition.java
│ │ └── UIComponentExample.java
│ │ ├── effectivecoveragearearule
│ │ ├── CoverageAreaViolation.java
│ │ ├── DistanceOfTravelChecking.java
│ │ ├── EffectiveAreaVisualizationColor.java
│ │ ├── EffectiveCoverageAreaBehaviour.java
│ │ ├── EffectiveCoverageAreaRule.java
│ │ ├── EffectiveCoverageAreaRuleUIDefinition.java
│ │ ├── EffectiveCoverageChecking.java
│ │ ├── OccludedWithinAreaChecking.java
│ │ ├── UnoccludedChecking.java
│ │ ├── UnoccludedWithinAreaChecking.java
│ │ └── visibility
│ │ │ ├── DirectedGraph.java
│ │ │ ├── DistanceOfTravelEffectCalculator.java
│ │ │ ├── Edge.java
│ │ │ ├── EffectGeometryGraph.java
│ │ │ ├── Vertex.java
│ │ │ ├── VisibilityGraph.java
│ │ │ └── VisibilityPolygonCalculator.java
│ │ ├── parkingrule
│ │ ├── MaximumRectangle.java
│ │ ├── ObstructionChecking.java
│ │ ├── OrientationChecking.java
│ │ ├── ParkingRule.java
│ │ ├── ParkingRuleUIDefinition.java
│ │ ├── ParkingSpace.java
│ │ └── ParkingSpaceSizeRequirement.java
│ │ └── spaceconnectionrule
│ │ ├── SpaceConnectionRule.java
│ │ ├── SpaceConnectionRuleUIDefinition.java
│ │ ├── SpaceToOutsideChecking.java
│ │ └── SpaceToSpaceConnectionChecking.java
│ └── resources
│ └── com
│ └── solibri
│ └── smc
│ └── api
│ └── examples
│ ├── beginner
│ ├── ClashDetectionRule.properties
│ ├── ClashDetectionRule_de.properties
│ ├── ClashDetectionRule_fi.properties
│ ├── ClashDetectionRule_fr.properties
│ ├── ClashDetectionRule_ja.properties
│ ├── ClashDetectionRule_pt.properties
│ ├── ClashDetectionRule_ru.properties
│ ├── ComponentHeightRule.properties
│ ├── ComponentHeightRule_de.properties
│ ├── ComponentHeightRule_fi.properties
│ ├── ComponentHeightRule_fr.properties
│ ├── ComponentHeightRule_ja.properties
│ ├── ComponentHeightRule_pt.properties
│ ├── ComponentHeightRule_ru.properties
│ ├── DistanceVisualizationRule.properties
│ ├── DistanceVisualizationRule_de.properties
│ ├── DistanceVisualizationRule_fi.properties
│ ├── DistanceVisualizationRule_fr.properties
│ ├── DistanceVisualizationRule_ja.properties
│ ├── DistanceVisualizationRule_pt.properties
│ ├── DistanceVisualizationRule_ru.properties
│ ├── HeatmapVisualizationRule.properties
│ ├── HeatmapVisualizationRule_de.properties
│ ├── HeatmapVisualizationRule_fi.properties
│ ├── HeatmapVisualizationRule_fr.properties
│ ├── HeatmapVisualizationRule_ja.properties
│ ├── HeatmapVisualizationRule_pt.properties
│ ├── HeatmapVisualizationRule_ru.properties
│ ├── UIComponentExample.properties
│ ├── UIComponentExample_de.properties
│ ├── UIComponentExample_fi.properties
│ ├── UIComponentExample_fr.properties
│ ├── UIComponentExample_ja.properties
│ ├── UIComponentExample_pt.properties
│ ├── UIComponentExample_ru.properties
│ ├── heatmap_visualization_rule_parameters.png
│ └── images
│ │ ├── image.png
│ │ ├── radio_button_1.png
│ │ ├── radio_button_2.png
│ │ └── radio_button_3.png
│ ├── effectivecoveragearearule
│ ├── 1_unoccluded.png
│ ├── 2_unoccluded_within_area.png
│ ├── 3_occluded_within_area.png
│ ├── 4_distance_of_travel.png
│ ├── EffectiveCoverageAreaRule.properties
│ ├── EffectiveCoverageAreaRule_de.properties
│ ├── EffectiveCoverageAreaRule_fi.properties
│ ├── EffectiveCoverageAreaRule_fr.properties
│ ├── EffectiveCoverageAreaRule_ja.properties
│ ├── EffectiveCoverageAreaRule_pt.properties
│ └── EffectiveCoverageAreaRule_ru.properties
│ ├── parkingrule
│ ├── ParkingRule.properties
│ ├── ParkingRule_de.properties
│ ├── ParkingRule_fi.properties
│ ├── ParkingRule_fr.properties
│ ├── ParkingRule_ja.properties
│ ├── ParkingRule_pt.properties
│ ├── ParkingRule_ru.properties
│ ├── alignment_angle_to_aisle.png
│ ├── alignment_parallel_to_aisle.png
│ ├── alignment_perpendicular_to_aisle.png
│ ├── end_obstructions_both.png
│ ├── end_obstructions_neither.png
│ ├── end_obstructions_one.png
│ ├── side_obstructions_both.png
│ ├── side_obstructions_neither.png
│ └── side_obstructions_oneside.png
│ └── spaceconnectionrule
│ ├── SpaceConnectionRule.properties
│ ├── SpaceConnectionRule_de.properties
│ ├── SpaceConnectionRule_fi.properties
│ ├── SpaceConnectionRule_fr.properties
│ ├── SpaceConnectionRule_ja.properties
│ ├── SpaceConnectionRule_pt.properties
│ └── SpaceConnectionRule_ru.properties
├── rule-template
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── solibri
│ │ └── rule
│ │ └── ExampleRule.java
│ └── resources
│ └── com
│ └── solibri
│ └── rule
│ ├── ExampleRule.properties
│ ├── ExampleRule_de.properties
│ ├── ExampleRule_fi.properties
│ ├── ExampleRule_fr.properties
│ ├── ExampleRule_ja.properties
│ ├── ExampleRule_pt.properties
│ └── ExampleRule_ru.properties
├── view-examples
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── solibri
│ │ └── smc
│ │ └── api
│ │ └── view
│ │ └── examples
│ │ ├── ApiKeySetting.java
│ │ ├── BrowserPanel.java
│ │ ├── CheckingResultsExporterView.java
│ │ ├── EventsView.java
│ │ ├── ExporterSettingDialog.java
│ │ ├── ExporterSettingGroup.java
│ │ ├── IfcView.java
│ │ ├── MaximumExportedResultsSetting.java
│ │ ├── OverwriteOldExportsSetting.java
│ │ └── spaceinformation
│ │ ├── ExportToExcelFileLocationSetting.java
│ │ └── SpaceInformationView.java
│ └── resources
│ ├── META-INF
│ └── services
│ │ ├── com.solibri.smc.api.settings.Setting
│ │ ├── com.solibri.smc.api.settings.SettingDialog
│ │ ├── com.solibri.smc.api.settings.SettingGroup
│ │ └── com.solibri.smc.api.ui.View
│ └── com
│ └── solibri
│ └── smc
│ └── api
│ └── view
│ └── examples
│ ├── ApiKeySetting.properties
│ ├── ApiKeySetting_de.properties
│ ├── ApiKeySetting_fi.properties
│ ├── ApiKeySetting_fr.properties
│ ├── ApiKeySetting_ja.properties
│ ├── ApiKeySetting_pt.properties
│ ├── ApiKeySetting_ru.properties
│ ├── ExporterSettingDialog.properties
│ ├── ExporterSettingDialog_de.properties
│ ├── ExporterSettingDialog_fi.properties
│ ├── ExporterSettingDialog_fr.properties
│ ├── ExporterSettingDialog_ja.properties
│ ├── ExporterSettingDialog_pt.properties
│ ├── ExporterSettingDialog_ru.properties
│ ├── ExporterSettingGroup.properties
│ ├── ExporterSettingGroup_de.properties
│ ├── ExporterSettingGroup_fi.properties
│ ├── ExporterSettingGroup_fr.properties
│ ├── ExporterSettingGroup_ja.properties
│ ├── ExporterSettingGroup_pt.properties
│ ├── ExporterSettingGroup_ru.properties
│ ├── IfcView.properties
│ ├── IfcView_de.properties
│ ├── IfcView_fi.properties
│ ├── IfcView_fr.properties
│ ├── IfcView_ja.properties
│ ├── IfcView_pt.properties
│ ├── IfcView_ru.properties
│ ├── MaximumExportedResultsSetting.properties
│ ├── MaximumExportedResultsSetting_de.properties
│ ├── MaximumExportedResultsSetting_fi.properties
│ ├── MaximumExportedResultsSetting_fr.properties
│ ├── MaximumExportedResultsSetting_ja.properties
│ ├── MaximumExportedResultsSetting_pt.properties
│ ├── MaximumExportedResultsSetting_ru.properties
│ ├── OverwriteOldExportsSetting.properties
│ ├── OverwriteOldExportsSetting_de.properties
│ ├── OverwriteOldExportsSetting_fi.properties
│ ├── OverwriteOldExportsSetting_fr.properties
│ ├── OverwriteOldExportsSetting_ja.properties
│ ├── OverwriteOldExportsSetting_pt.properties
│ ├── OverwriteOldExportsSetting_ru.properties
│ └── icon.png
└── view-template
├── pom.xml
└── src
└── main
├── java
└── com
│ └── solibri
│ ├── layout
│ └── ExampleLayout.java
│ └── view
│ └── ExampleView.java
└── resources
├── META-INF
└── services
│ ├── com.solibri.smc.api.layout.Layout
│ └── com.solibri.smc.api.ui.View
└── com
└── solibri
└── view
├── ExampleView.properties
├── ExampleView_de.properties
├── ExampleView_fi.properties
├── ExampleView_fr.properties
├── ExampleView_ja.properties
├── ExampleView_pt.properties
└── ExampleView_ru.properties
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **OS & Solibri version (please complete the following information):**
27 | - OS: [e.g. WINDOWS]
28 | - Version/build [10, 20H2, 19042.572]
29 | - Solibri Version [9.12.0]
30 |
31 | **Additional context**
32 | Add any other context about the problem here.
33 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .settings/
2 | .classpath
3 | .project
4 | .flattened-pom.xml
5 | ~$*.*
6 | target/
7 | dependency-reduced-pom.xml
8 |
9 | # OS generated files #
10 | .DS_Store
11 | .DS_Store?
12 | .Spotlight-V100
13 | .Trashes
14 | ehthumbs.db
15 | Thumbs.db
16 | .idea/
17 | *.iml
18 | .metadata
19 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Solibri
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # api-examples
2 | [Solibri Developer Platform](https://solibri.github.io/Developer-Platform/) APIs examples
3 |
4 | ## Licensing
5 |
6 | The examples themselves are licensed with the relaxed MIT license. The intention is that anybody can take the examples, use, modify and build on top of them freely, also for commercial purposes.
7 |
8 | Note that while we license the examples with a relaxed license, the dependencies the examples use, might have different licenses, so check the possible restrictions they might have separately.
9 |
10 | ## Versioning
11 |
12 | The repository will host only one version of the examples, but old states can be found from the Git tags.
13 | The API is supposed to be developed in a way that any example will work with the version it was created for and with any newer versions keeping the API fully backwards compatible.
14 |
15 | ## How to use
16 |
17 | The examples are build using Maven build system. Building them should be possible on any major operating system.
18 | To build the examples JDK 17 and Maven installation are needed. We hope to integrate Maven Wrapper to the examples at once that is integrated to the Maven core, removing the need for manual Maven installations. Gradle or any other Java build system can also be used to build the examples, but we do not provide the build configurations for those systems.
19 |
--------------------------------------------------------------------------------
/build-all.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | call mvn -f info-examples\pom.xml install
3 | call mvn -f info-template\pom.xml install
4 | call mvn -f rule-examples\pom.xml install
5 | call mvn -f rule-template\pom.xml install
6 | call mvn -f view-examples\pom.xml install
7 | call mvn -f view-template\pom.xml install
--------------------------------------------------------------------------------
/info-examples/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | jar
8 |
9 | com.solibri
10 | smc-api-info-examples
11 | Solibri API Info Examples
12 | 1.0.0
13 |
14 |
15 |
16 | C:/Program Files/Solibri/SOLIBRI
17 |
18 | 3.11.0
19 | 3.3.0
20 | 2.0.17
21 | 5.4.1
22 |
23 |
24 |
25 |
26 | platform-mac
27 |
28 |
29 | mac
30 |
31 |
32 |
33 |
34 | /Applications/Solibri
35 |
36 |
37 |
38 |
39 |
40 |
41 | com.solibri.smc
42 | smc-api
43 | 1.0
44 | system
45 | ${smc-dir}/lib/smc-api.jar
46 |
47 |
48 | com.solibri.smc
49 | smc-geometry
50 | 1.0
51 | system
52 | ${smc-dir}/lib/smc-geometry.jar
53 |
54 |
55 |
56 | org.slf4j
57 | slf4j-api
58 | ${slf4j-api.version}
59 | system
60 | ${smc-dir}/lib/slf4j-api.jar
61 |
62 |
63 |
64 | org.apache.poi
65 | poi-ooxml
66 | ${poi.version}
67 |
68 |
69 | org.apache.poi
70 | poi
71 | ${poi.version}
72 |
73 |
74 |
75 | org.javassist
76 | javassist
77 | 3.30.2-GA
78 |
79 |
80 |
81 |
82 |
83 |
84 | maven-compiler-plugin
85 | ${maven-compiler-plugin.version}
86 |
87 | 11
88 | UTF-8
89 | true
90 |
91 |
92 |
93 |
94 | org.apache.maven.plugins
95 | maven-jar-plugin
96 | ${maven-jar-plugin.version}
97 |
98 | ${smc-dir}/lib
99 |
100 |
101 |
103 |
104 | org.apache.maven.plugins
105 | maven-shade-plugin
106 | 3.2.1
107 |
108 |
109 | package
110 |
111 | shade
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/AmountOfDoors.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Collection;
4 | import java.util.Optional;
5 |
6 | import com.solibri.smc.api.info.Information;
7 | import com.solibri.smc.api.model.Component;
8 | import com.solibri.smc.api.model.PropertyType;
9 | import com.solibri.smc.api.model.components.Door;
10 | import com.solibri.smc.api.model.components.Space;
11 |
12 | /**
13 | * This example custom Information fetches the amount of doors that a space has.
14 | *
15 | * The information is defined only for {@link Space}s.
16 | */
17 | public class AmountOfDoors implements Information {
18 |
19 | @Override
20 | public String getUniqueId() {
21 | return "Amount of doors in a space";
22 | }
23 |
24 | @Override
25 | public Optional getInformation(Component component) {
26 | // This is not defined for non-spaces.
27 | if (!(component instanceof Space)) {
28 | return Optional.empty();
29 | }
30 | Space space = (Space) component;
31 | Collection doors = space.getDoors();
32 |
33 | return Optional.of(doors.size());
34 | }
35 |
36 | @Override
37 | public PropertyType getType() {
38 | return PropertyType.INT;
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/DistanceFromDoors.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Collection;
5 | import java.util.List;
6 | import java.util.Optional;
7 | import java.util.stream.Collectors;
8 |
9 | import com.solibri.geometry.linearalgebra.Vector2d;
10 | import com.solibri.geometry.primitive2d.MPolygon2d;
11 | import com.solibri.geometry.primitive2d.Polygon2d;
12 | import com.solibri.smc.api.footprints.Footprint;
13 | import com.solibri.smc.api.info.Information;
14 | import com.solibri.smc.api.model.Component;
15 | import com.solibri.smc.api.model.PropertyType;
16 | import com.solibri.smc.api.model.components.Door;
17 | import com.solibri.smc.api.model.components.Space;
18 |
19 | /**
20 | * This example custom Information fetches the maximum distance of any place inside a space to a door. The information
21 | * is defined only for {@link Space}s that have a {@link Door}.
22 | */
23 | public class DistanceFromDoors implements Information {
24 |
25 | @Override
26 | public String getUniqueId() {
27 | return "Largest distance from a door";
28 | }
29 |
30 | @Override
31 | public Optional getInformation(Component component) {
32 | // This is not defined for non-spaces.
33 | if (!(component instanceof Space)) {
34 | return Optional.empty();
35 | }
36 | Space space = (Space) component;
37 | Collection doors = space.getDoors();
38 |
39 | // This is not defined for spaces without doors.
40 | if (doors.isEmpty()) {
41 | return Optional.empty();
42 | }
43 |
44 | Footprint footprint = space.getFootprint();
45 | Polygon2d outline = footprint.getOutline();
46 |
47 | /*
48 | * To calculate the distance, take all the corner points as candidates, but also take the the center point as a
49 | * candidate if it is inside the space. For some spaces, such as an L-shaped space, the center point might not
50 | * be inside the space. This is an attempt to be "smart" and thus the algorithm may give false results for some
51 | * kind of spaces. One fix for this would be to investigate more points.
52 | *
53 | */
54 | List allPoints = new ArrayList<>(outline.getVertices());
55 | Vector2d center = outline.getCentroid();
56 | if (outline.contains(center)) {
57 | allPoints.add(center);
58 | }
59 |
60 | /*
61 | * For each point find the shortest distance for any door polyogn. Then from these distances choose the largest.
62 | */
63 | List doorPolygons = doors.stream().map(Door::getFootprint).map(Footprint::getArea).flatMap(area -> area.getPolygons().stream())
64 | .collect(Collectors.toList());
65 | double maxDistanceOfAllMinDistances = Double.MIN_VALUE;
66 | for (Vector2d point : allPoints) {
67 | double minDistanceForGivenPoint = Double.MAX_VALUE;
68 | for (MPolygon2d doorPolygon : doorPolygons) {
69 | double distance = doorPolygon.distance(point);
70 | if (distance < minDistanceForGivenPoint) {
71 | minDistanceForGivenPoint = distance;
72 | }
73 | }
74 | if (minDistanceForGivenPoint > maxDistanceOfAllMinDistances) {
75 | maxDistanceOfAllMinDistances = minDistanceForGivenPoint;
76 | }
77 | }
78 |
79 | return Optional.of(maxDistanceOfAllMinDistances);
80 | }
81 |
82 | @Override
83 | public PropertyType getType() {
84 | return PropertyType.LENGTH;
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/DoorWidth.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.info.Information;
6 | import com.solibri.smc.api.model.Component;
7 | import com.solibri.smc.api.model.PropertyType;
8 | import com.solibri.smc.api.model.components.Door;
9 |
10 | /**
11 | * This custom information example fetches the overall width of the door.
12 | *
13 | * The information is defined only for {@link Door}s.
14 | */
15 | public class DoorWidth implements Information {
16 |
17 | @Override
18 | public String getUniqueId() {
19 | return "Door overall width";
20 | }
21 |
22 | @Override
23 | public Optional getInformation(Component component) {
24 |
25 | if (!(component instanceof Door)) {
26 | return Optional.empty();
27 | }
28 |
29 | Door door = (Door) component;
30 |
31 | return Optional.of(door.getOverallWidth());
32 | }
33 |
34 | @Override
35 | public PropertyType getType() {
36 | return PropertyType.LENGTH;
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/DynamicInfoSettingGroup.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Arrays;
4 | import java.util.List;
5 |
6 | import com.solibri.smc.api.settings.Setting;
7 | import com.solibri.smc.api.settings.SettingGroup;
8 |
9 | public class DynamicInfoSettingGroup implements SettingGroup {
10 |
11 | @Override
12 | public String getUniqueId() {
13 | return "Dynamic-information-settings";
14 | }
15 |
16 | @Override
17 | public List>> getSettings() {
18 | return Arrays.asList(DynamicNameSetting.class, DynamicValueSetting.class);
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/DynamicInformation.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.lang.invoke.MethodHandles;
4 | import java.lang.reflect.Method;
5 | import java.util.Optional;
6 | import java.util.UUID;
7 |
8 | import org.slf4j.Logger;
9 | import org.slf4j.LoggerFactory;
10 |
11 | import com.solibri.smc.api.SMC;
12 | import com.solibri.smc.api.info.Information;
13 | import com.solibri.smc.api.model.Component;
14 | import com.solibri.smc.api.model.PropertyType;
15 |
16 | import javassist.ClassPool;
17 | import javassist.CtClass;
18 | import javassist.CtMethod;
19 | import javassist.Modifier;
20 |
21 | /**
22 | * This example custom Information uses dynamic Java code to compile a custom property on the fly. The algorithm used
23 | * can be defined as Java code and can be changed on-the-fly.
24 | *
25 | * Example code would be:
26 | *
27 | * {Double distance = (Double) $1.distance(com.solibri.geometry.linearalgebra.Vector3d.ZERO).get(); Double sqrt =
28 | * Double.valueOf(java.lang.Math.sqrt(distance.doubleValue())); return String.valueOf(sqrt);}
29 | *
30 | * This method definition calculates the distance of the given component from the origin point in the model.
31 | */
32 | public class DynamicInformation implements Information {
33 |
34 | private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
35 |
36 | @Override
37 | public String getUniqueId() {
38 | return "Dynamic information";
39 | }
40 |
41 | @Override
42 | public String getName() {
43 | return SMC.getSettings().getSetting(DynamicNameSetting.class).getValue();
44 | }
45 |
46 | @Override
47 | public Optional getInformation(Component component) {
48 | String code = SMC.getSettings().getSetting(DynamicValueSetting.class).getValue();
49 | try {
50 | ClassPool pool = ClassPool.getDefault();
51 | CtClass componentClass = pool.get("com.solibri.smc.api.model.Component");
52 | CtClass cc = pool.makeClass("com.solibri.smc.api.examples.RuntimeDynamicInformation" + UUID.randomUUID());
53 | CtMethod newmethod = new CtMethod(pool.get(String.class.getCanonicalName()), "get", new CtClass[] {
54 | componentClass }, cc);
55 | newmethod.setBody(code);
56 | cc.addMethod(newmethod);
57 | cc.setModifiers(cc.getModifiers() & ~Modifier.ABSTRACT);
58 | cc.writeFile();
59 |
60 | Class clazz = cc.toClass();
61 |
62 | for (Method me : clazz.getDeclaredMethods()) {
63 | return Optional.ofNullable(String.valueOf(me.invoke(clazz.getDeclaredConstructor().newInstance(), component)));
64 | }
65 |
66 | } catch (Exception e) {
67 | LOG.error("Failed to compile the given syntax: {}", code, e);
68 | }
69 | return Optional.empty();
70 | }
71 |
72 | @Override
73 | public PropertyType getType() {
74 | return PropertyType.STRING;
75 | }
76 |
77 | }
78 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/DynamicNameSetting.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.settings.StringSetting;
6 |
7 | public class DynamicNameSetting extends StringSetting {
8 |
9 | @Override
10 | public String getUniqueId() {
11 | return "Name for the dynamic information";
12 | }
13 |
14 | @Override
15 | public String getDefaultValue() {
16 | return "Dynamic information";
17 | }
18 |
19 | @Override
20 | public Optional invalidReason(String value) {
21 | return Optional.empty();
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/DynamicValueSetting.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.settings.StringSetting;
6 |
7 | public class DynamicValueSetting extends StringSetting {
8 |
9 | @Override
10 | public String getUniqueId() {
11 | return " ";
12 | }
13 |
14 | @Override
15 | public String getDefaultValue() {
16 | return "private java.lang.String get(com.solibri.smc.api.model.Component component) {\n"
17 | + " return component.getGUID();\n"
18 | + " }";
19 | }
20 |
21 | @Override
22 | public Optional invalidReason(String value) {
23 | return Optional.empty();
24 | }
25 |
26 | @Override
27 | public boolean isMultiLine() {
28 | return true;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/ExcelFileLocationSetting.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.io.File;
4 | import java.util.Optional;
5 |
6 | import com.solibri.smc.api.settings.StringSetting;
7 |
8 | public class ExcelFileLocationSetting extends StringSetting {
9 |
10 | @Override
11 | public String getUniqueId() {
12 | return "Excel file location";
13 | }
14 |
15 | @Override
16 | public String getDefaultValue() {
17 | return System.getProperty("user.home") + "/ids.xlsx";
18 | }
19 |
20 | @Override
21 | public Optional invalidReason(String value) {
22 | File file = new File(value);
23 | if (file.exists() && file.getPath().endsWith(".xlsx")) {
24 | return Optional.empty();
25 | }
26 | return Optional.of("The file has to exist and be an Excel file.");
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/FoundFromExcel.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.io.File;
4 | import java.io.FileInputStream;
5 | import java.io.FileNotFoundException;
6 | import java.io.IOException;
7 | import java.lang.invoke.MethodHandles;
8 | import java.util.Iterator;
9 | import java.util.Optional;
10 |
11 | import org.apache.poi.ss.usermodel.Cell;
12 | import org.apache.poi.ss.usermodel.Row;
13 | import org.apache.poi.xssf.usermodel.XSSFSheet;
14 | import org.apache.poi.xssf.usermodel.XSSFWorkbook;
15 | import org.slf4j.Logger;
16 | import org.slf4j.LoggerFactory;
17 |
18 | import com.solibri.smc.api.SMC;
19 | import com.solibri.smc.api.info.Information;
20 | import com.solibri.smc.api.model.Component;
21 | import com.solibri.smc.api.model.PropertyType;
22 |
23 | /**
24 | * This example custom Information checks if the GUID of the given {@link Component} is found from an Excel sheet
25 | * defined in settings.
26 | */
27 | public class FoundFromExcel implements Information {
28 |
29 | private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
30 |
31 | @Override
32 | public String getUniqueId() {
33 | return "Found from the ID Excel";
34 | }
35 |
36 | @Override
37 | public Optional getInformation(Component component) {
38 | String id = component.getGUID();
39 |
40 | File file = new File(SMC.getSettings().getSetting(ExcelFileLocationSetting.class).getValue());
41 | if (!file.exists()) {
42 | return Optional.of(Boolean.FALSE);
43 | }
44 |
45 | try (FileInputStream fis = new FileInputStream(file)) {
46 |
47 | // Finds the workbook instance for XLSX file
48 | XSSFWorkbook workBook = new XSSFWorkbook(fis);
49 |
50 | // Return first sheet from the XLSX workbook
51 | XSSFSheet sheet = workBook.getSheetAt(0);
52 |
53 | // Get iterator to all the rows in current sheet
54 | Iterator rowIterator = sheet.iterator();
55 |
56 | while (rowIterator.hasNext()) {
57 | Row row = rowIterator.next();
58 |
59 | Cell cell = row.getCell(0);
60 |
61 | switch (cell.getCellType()) {
62 | case STRING:
63 | if (id.equals(cell.getStringCellValue())) {
64 | return Optional.of(Boolean.TRUE);
65 | }
66 | break;
67 | case NUMERIC:
68 | LOG.warn("The cell value was numeric: {}", cell.getNumericCellValue());
69 | continue;
70 | case BOOLEAN:
71 | LOG.warn("The cell value was boolean: {}", cell.getNumericCellValue());
72 | continue;
73 | default:
74 |
75 | }
76 | }
77 | } catch (FileNotFoundException e) {
78 | LOG.error("Unable to open file {}", file, e);
79 | } catch (IOException e) {
80 | LOG.error("Unable to open file {}", file, e);
81 | }
82 |
83 | return Optional.of(Boolean.FALSE);
84 | }
85 |
86 | @Override
87 | public PropertyType getType() {
88 | return PropertyType.BOOLEAN;
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/HasDoors.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Collection;
4 | import java.util.Optional;
5 |
6 | import com.solibri.smc.api.info.Information;
7 | import com.solibri.smc.api.model.Component;
8 | import com.solibri.smc.api.model.PropertyType;
9 | import com.solibri.smc.api.model.components.Door;
10 | import com.solibri.smc.api.model.components.Space;
11 |
12 | /**
13 | * This example custom Information fetches whether or not a space has doors.
14 | *
15 | * The information is defined only for {@link Space}s.
16 | */
17 | public class HasDoors implements Information {
18 |
19 | @Override
20 | public String getUniqueId() {
21 | return "Has doors";
22 | }
23 |
24 | @Override
25 | public Optional getInformation(Component component) {
26 | // This is not defined for non-spaces.
27 | if (!(component instanceof Space)) {
28 | return Optional.empty();
29 | }
30 | Space space = (Space) component;
31 | Collection doors = space.getDoors();
32 | return Optional.of(!doors.isEmpty());
33 | }
34 |
35 | @Override
36 | public PropertyType getType() {
37 | return PropertyType.BOOLEAN;
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/HasFailedChecking.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Collection;
4 | import java.util.Optional;
5 |
6 | import com.solibri.smc.api.SMC;
7 | import com.solibri.smc.api.checking.Result;
8 | import com.solibri.smc.api.info.Information;
9 | import com.solibri.smc.api.model.Component;
10 | import com.solibri.smc.api.model.PropertyType;
11 |
12 | /**
13 | * This example custom Information tells if the given component relates to any of the results from the latest checking
14 | * run.
15 | */
16 | public class HasFailedChecking implements Information {
17 |
18 | @Override
19 | public String getUniqueId() {
20 | return "Has failed checking";
21 | }
22 |
23 | @Override
24 | public Optional getInformation(Component component) {
25 | Collection results = SMC.getChecking().getResults();
26 | return Optional.of(results.stream().anyMatch(r -> r.getInvolvedComponents().contains(component)));
27 | }
28 |
29 | @Override
30 | public PropertyType getType() {
31 | return PropertyType.BOOLEAN;
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/HasPropertySetAndProperty.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.info.InformationParameters;
6 | import com.solibri.smc.api.info.ParametricInformation;
7 | import com.solibri.smc.api.info.StringInformationParameter;
8 | import com.solibri.smc.api.model.Component;
9 |
10 | /**
11 | * This example custom ParametricInformation fetches whether or not a component has specific propertyset and property.
12 | *
13 | * @see ParametricInformation
14 | * @since 9.12.7
15 | */
16 | public class HasPropertySetAndProperty implements ParametricInformation {
17 |
18 | /**
19 | * Retrieve the parameter creation handler, used to define parameters for this parametic information.
20 | */
21 | private final InformationParameters params = InformationParameters.of(this);
22 |
23 | private final StringInformationParameter propertySetName = params.createString("Property Set Name", "");
24 |
25 | private final StringInformationParameter propertyName = params.createString("Property Name", "");
26 |
27 | @Override
28 | public String getUniqueId() {
29 | return "Property Set And Property";
30 | }
31 |
32 | @Override
33 | public Optional getInformation(Component component) {
34 | String propertySetNameValue = propertySetName.getValue();
35 | String propertyNameValue = propertyName.getValue();
36 | boolean hasProperty = component.getPropertySets(propertySetNameValue).stream()
37 | .flatMap(pset -> pset.getProperty(propertyNameValue).stream())
38 | .findAny().isPresent();
39 | return Optional.of(hasProperty);
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/IfcEntityType.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.info.Information;
6 | import com.solibri.smc.api.model.Component;
7 |
8 | /**
9 | * This custom information example fetches the IFC defined entity type for given
10 | * component.
11 | *
12 | * The information is defined only for {@link Component}s that have IFC defined
13 | * entity type.
14 | */
15 | public class IfcEntityType implements Information {
16 |
17 | @Override
18 | public String getUniqueId() {
19 | return "IFC entity type";
20 | }
21 |
22 | @Override
23 | public Optional getInformation(Component component) {
24 | Optional ifcEntityType = component.getIfcEntityType();
25 |
26 | if (!ifcEntityType.isPresent()) {
27 | return Optional.empty();
28 | }
29 |
30 | return Optional.of(ifcEntityType.get().toString());
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/IsInSelectionBasket.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.SMC;
6 | import com.solibri.smc.api.info.Information;
7 | import com.solibri.smc.api.model.Component;
8 | import com.solibri.smc.api.model.PropertyType;
9 |
10 | /**
11 | * This example custom Information tells if the given component is currently in the selection basket.
12 | */
13 | public class IsInSelectionBasket implements Information {
14 |
15 | @Override
16 | public String getUniqueId() {
17 | return "Is in selection basket";
18 | }
19 |
20 | @Override
21 | public Optional getInformation(Component component) {
22 | return Optional.of(SMC.getSelectionBasket().get().contains(component));
23 | }
24 |
25 | @Override
26 | public PropertyType getType() {
27 | return PropertyType.BOOLEAN;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/RatioOfDoors.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.util.Collection;
4 | import java.util.Optional;
5 |
6 | import com.solibri.smc.api.info.Information;
7 | import com.solibri.smc.api.model.Component;
8 | import com.solibri.smc.api.model.PropertyType;
9 | import com.solibri.smc.api.model.components.Door;
10 | import com.solibri.smc.api.model.components.Space;
11 |
12 | /**
13 | * This example custom Information fetches the height ratio between the largest and the smallest door the space has.
14 | *
15 | * The information is defined only for {@link Space}s.
16 | */
17 | public class RatioOfDoors implements Information {
18 |
19 | @Override
20 | public String getUniqueId() {
21 | return "Size ratio of doors";
22 | }
23 |
24 | @Override
25 | public Optional getInformation(Component component) {
26 | // This is not defined for non-spaces.
27 | if (!(component instanceof Space)) {
28 | return Optional.empty();
29 | }
30 | Space space = (Space) component;
31 | Collection doors = space.getDoors();
32 |
33 | if (doors.isEmpty()) {
34 | return Optional.empty();
35 | }
36 | /*
37 | * If only one door, the ratio is defined to be 1.0.
38 | */
39 | if (doors.size() == 1) {
40 | return Optional.of(1.0);
41 | }
42 | double maxHeight = -Double.MAX_VALUE;
43 | double minHeight = Double.MAX_VALUE;
44 | for (Door door : doors) {
45 | double sizeZ = door.getBoundingBox().getSizeZ();
46 | if (sizeZ != 0.0 && sizeZ > maxHeight) {
47 | maxHeight = sizeZ;
48 | }
49 | if (sizeZ != 0.0 && sizeZ < minHeight) {
50 | minHeight = sizeZ;
51 | }
52 | }
53 |
54 | return Optional.of(maxHeight / minHeight);
55 | }
56 |
57 | @Override
58 | public PropertyType getType() {
59 | return PropertyType.DOUBLE;
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/SchedulingInformation.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.text.ParseException;
4 | import java.text.SimpleDateFormat;
5 | import java.util.Date;
6 | import java.util.Optional;
7 |
8 | import com.solibri.smc.api.info.Information;
9 | import com.solibri.smc.api.model.Component;
10 | import com.solibri.smc.api.model.ComponentType;
11 | import com.solibri.smc.api.model.PropertyType;
12 |
13 | /**
14 | * This example custom Information returns the installation schedule of the component.
15 | *
16 | * The information is defined only for wall, slabs and roofs.
17 | */
18 | public class SchedulingInformation implements Information {
19 |
20 | private static final long ONE_DAY_TIME = 24L * 3600L * 1000L;
21 |
22 | private static Date START_DATE;
23 |
24 | static {
25 | try {
26 | START_DATE = new SimpleDateFormat("dd/MM/yyyy").parse("31/12/2020");
27 | } catch (ParseException e) {
28 | START_DATE = new Date();
29 | }
30 | }
31 |
32 | @Override
33 | public String getUniqueId() {
34 | return "Scheduling";
35 | }
36 |
37 | @Override
38 | public Optional getInformation(Component component) {
39 |
40 | // The information is defined only for wall, slabs and roofs.
41 | if (component.getComponentType() != ComponentType.WALL && component.getComponentType() != ComponentType.SLAB
42 | && component.getComponentType() != ComponentType.ROOF) {
43 | return Optional.empty();
44 | }
45 |
46 | /*
47 | * The real scheduling date could be fetched from external scheduling system. This example just estimates the
48 | * date from bottom elevation of the component. One meter in elevation is scheduled one day later.
49 | */
50 | double elevation = component.getGlobalBottomElevation();
51 | Date installationDate = new Date(START_DATE.getTime() + (long) elevation * ONE_DAY_TIME);
52 | return Optional.of(installationDate);
53 | }
54 |
55 | @Override
56 | public PropertyType getType() {
57 | return PropertyType.DATE;
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/WindowFloorAreaPercentage.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples;
2 |
3 | import java.lang.invoke.MethodHandles;
4 | import java.util.Optional;
5 |
6 | import org.slf4j.Logger;
7 | import org.slf4j.LoggerFactory;
8 |
9 | import com.solibri.smc.api.info.Information;
10 | import com.solibri.smc.api.model.Component;
11 | import com.solibri.smc.api.model.PropertyType;
12 | import com.solibri.smc.api.model.components.Space;
13 |
14 | /**
15 | * Calculates the percentage of window area with regards to floor area for spaces.
16 | *
17 | * Uses space boundaries, but if space boundary is not defined for the floor area, defaults to calculating the area from
18 | * geometry.
19 | *
20 | */
21 | public class WindowFloorAreaPercentage implements Information {
22 |
23 | private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
24 |
25 | @Override
26 | public String getUniqueId() {
27 | return "WindowFloorAreaPercentage";
28 | }
29 |
30 | @Override
31 | public String getName() {
32 | return "Percentage of window area against floor area";
33 | }
34 |
35 | @Override
36 | public Optional getInformation(Component component) {
37 | if (!(component instanceof Space)) {
38 | return Optional.empty();
39 | }
40 | Space space = (Space) component;
41 | double windowArea = space.getSpaceBoundariesWindowsArea();
42 | double floorArea = space.getSpaceBoundariesFloorsArea();
43 | if (floorArea == 0.0) {
44 | LOG.warn("Space {} had zero floor area.", space.getName());
45 | floorArea = space.getFootprint().getArea().getSize();
46 | }
47 | return Optional.of(windowArea / floorArea);
48 | }
49 |
50 | @Override
51 | public PropertyType getType() {
52 | return PropertyType.PERCENTAGE;
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/costanalysis/CostAnalysisSettingDialog.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.costanalysis;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import com.solibri.smc.api.settings.SettingDialog;
7 | import com.solibri.smc.api.settings.SettingGroup;
8 |
9 | /**
10 | * This setting dialog adds a separate setting dialog for all cost analysis related settings.
11 | */
12 | public class CostAnalysisSettingDialog implements SettingDialog {
13 |
14 | @Override
15 | public String getUniqueId() {
16 | return "cost-analysis-setting-dialog";
17 | }
18 |
19 | @Override
20 | public String getName() {
21 | return "Cost Analysis";
22 | }
23 |
24 | @Override
25 | public List> getSettingGroups() {
26 | List> list = new ArrayList<>();
27 | list.add(CostFactorSettingGroup.class);
28 | return list;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/costanalysis/CostFactorSettingGroup.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.costanalysis;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import com.solibri.smc.api.settings.Setting;
7 | import com.solibri.smc.api.settings.SettingGroup;
8 |
9 | /**
10 | * This setting groups creates a single groupin the UI for cost factor settings.
11 | */
12 | public class CostFactorSettingGroup implements SettingGroup {
13 |
14 | @Override
15 | public String getUniqueId() {
16 | return "cost-factor-setting-group";
17 | }
18 |
19 | @Override
20 | public String getName() {
21 | return "Cost factor settings";
22 | }
23 |
24 | @Override
25 | public List>> getSettings() {
26 | List>> list = new ArrayList<>();
27 | list.add(WallMaterialCostClassificationNameSetting.class);
28 | return list;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/costanalysis/WallMaterialCostClassificationNameSetting.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.costanalysis;
2 |
3 | import com.solibri.smc.api.settings.StringSetting;
4 |
5 | /**
6 | * This setting allows the user to define the used classification name in settings.
7 | */
8 | public class WallMaterialCostClassificationNameSetting extends StringSetting {
9 |
10 | @Override
11 | public String getUniqueId() {
12 | return "Name of the cost factor classification";
13 | }
14 |
15 | @Override
16 | public String getDefaultValue() {
17 | return "Cost Per Cubic Meter";
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/info-examples/src/main/java/com/solibri/smc/api/examples/costanalysis/WallMaterialCostInformation.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.costanalysis;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.SMC;
6 | import com.solibri.smc.api.info.Information;
7 | import com.solibri.smc.api.model.Component;
8 | import com.solibri.smc.api.model.PropertyType;
9 | import com.solibri.smc.api.model.Quantities;
10 | import com.solibri.smc.api.model.Quantities.Type;
11 | import com.solibri.smc.api.model.components.Wall;
12 |
13 | /**
14 | * WallMaterialCostInformation calculates the cost for {@link Wall}s by multiplying the volume of the wall with the cost
15 | * factor found from chosen classification.
16 | *
17 | * The cost factor is intended to contain information for how much the given wall costs per volume unit.
18 | *
19 | * The custom information assumes that all Walls are classified and that all of them contain a proper classification
20 | * value in a format that can be parsed into a double. No error handling for other cases has been implemented.
21 | */
22 | public class WallMaterialCostInformation implements Information {
23 |
24 | @Override
25 | public String getUniqueId() {
26 | return "Cost of wall materials";
27 | }
28 |
29 | @Override
30 | public Optional getInformation(Component component) {
31 | if (!(component instanceof Wall)) {
32 | return Optional.empty();
33 | }
34 | Wall wall = (Wall) component;
35 | // total cost = volume * cost factor
36 | Double volume = Quantities.of(wall).get(Type.VOLUME).get();
37 | WallMaterialCostClassificationNameSetting setting =
38 | SMC.getSettings().getSetting(WallMaterialCostClassificationNameSetting.class);
39 | String resultName = SMC.getModel()
40 | .getClassification(setting.getValue())
41 | .get().classify(wall).iterator().next()
42 | .getName();
43 | double costFactor = Double.parseDouble(resultName);
44 |
45 | return Optional.of(volume * costFactor);
46 | }
47 |
48 | @Override
49 | public PropertyType getType() {
50 | return PropertyType.DOUBLE;
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/info-examples/src/main/resources/META-INF/services/com.solibri.smc.api.info.Information:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.examples.DistanceFromDoors
2 | com.solibri.smc.api.examples.IsInSelectionBasket
3 | com.solibri.smc.api.examples.HasFailedChecking
4 | com.solibri.smc.api.examples.FoundFromExcel
5 | com.solibri.smc.api.examples.DynamicInformation
6 | com.solibri.smc.api.examples.AmountOfDoors
7 | com.solibri.smc.api.examples.HasDoors
8 | com.solibri.smc.api.examples.WindowFloorAreaPercentage
9 | com.solibri.smc.api.examples.SchedulingInformation
10 | com.solibri.smc.api.examples.IfcEntityType
11 | com.solibri.smc.api.examples.DoorWidth
12 | com.solibri.smc.api.examples.costanalysis.WallMaterialCostInformation
--------------------------------------------------------------------------------
/info-examples/src/main/resources/META-INF/services/com.solibri.smc.api.info.ParametricInformation:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.examples.HasPropertySetAndProperty
--------------------------------------------------------------------------------
/info-examples/src/main/resources/META-INF/services/com.solibri.smc.api.settings.Setting:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.examples.ExcelFileLocationSetting
2 | com.solibri.smc.api.examples.DynamicNameSetting
3 | com.solibri.smc.api.examples.DynamicValueSetting
4 | com.solibri.smc.api.examples.costanalysis.WallMaterialCostClassificationNameSetting
--------------------------------------------------------------------------------
/info-examples/src/main/resources/META-INF/services/com.solibri.smc.api.settings.SettingDialog:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.examples.costanalysis.CostAnalysisSettingDialog
--------------------------------------------------------------------------------
/info-examples/src/main/resources/META-INF/services/com.solibri.smc.api.settings.SettingGroup:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.examples.DynamicInfoSettingGroup
2 | com.solibri.smc.api.examples.costanalysis.CostFactorSettingGroup
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors.properties:
--------------------------------------------------------------------------------
1 | NAME = Largest distance from the nearest door
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_de.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Pisin etäisyys lähimmästä ovesta
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_fr.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_ja.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_pt.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DistanceFromDoors_ru.properties:
--------------------------------------------------------------------------------
1 | NAME = Наибольшее расстояние от ближайшей двери
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup.properties:
--------------------------------------------------------------------------------
1 | NAME = Dynamic information settings
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_de.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Dynaamisen informaation asetukset
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_fr.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_ja.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_pt.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicInfoSettingGroup_ru.properties:
--------------------------------------------------------------------------------
1 | NAME = Настройки динамической информации
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting.properties:
--------------------------------------------------------------------------------
1 | NAME = Dynamic information name
2 | DESCRIPTION = Name for the dynamic information value
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_de.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Dynaamisen informaation nimi
2 | DESCRIPTION = Dynaamiselle informaatiolle esitettävä nimi
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_fr.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_ja.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_pt.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicNameSetting_ru.properties:
--------------------------------------------------------------------------------
1 | NAME = Название динамической информации
2 | DESCRIPTION = Имя для значения динамической информации
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting.properties:
--------------------------------------------------------------------------------
1 | NAME = Dynamic information value
2 | DESCRIPTION = Dynamic information value calculation code
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_de.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Dynaamisen informaation arvo
2 | DESCRIPTION = Dynaamisen informaation arvon laskentakoodi
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_fr.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_ja.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_pt.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/DynamicValueSetting_ru.properties:
--------------------------------------------------------------------------------
1 | NAME = Значение динамической информации
2 | DESCRIPTION = Код для получения значений динамической информации
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting.properties:
--------------------------------------------------------------------------------
1 | NAME = Excel file location
2 | DESCRIPTION = Location of the ID list Excel file
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_de.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Excel-tiedoston sijainti
2 | DESCRIPTION = ID\:t sisältävän Excel-tiedoston tiedostosijainti
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_fr.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_ja.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_pt.properties
--------------------------------------------------------------------------------
/info-examples/src/main/resources/com/solibri/smc/api/examples/ExcelFileLocationSetting_ru.properties:
--------------------------------------------------------------------------------
1 | NAME = Расположение файла Excel
2 | DESCRIPTION = Расположение файла Excel со списком идентификаторов (ID)
--------------------------------------------------------------------------------
/info-template/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | jar
8 |
9 |
10 | com.solibri
11 |
12 | smc-api-info-template
13 |
14 |
15 | Solibri API Info Template Project
16 |
17 | 1.0.0
18 |
19 |
20 |
21 | C:/Program Files/Solibri/SOLIBRI
22 |
23 | 3.11.0
24 | 3.3.0
25 | 2.0.17
26 |
27 |
28 |
29 |
30 | platform-mac
31 |
32 |
33 | mac
34 |
35 |
36 |
37 |
38 | /Applications/Solibri
39 |
40 |
41 |
42 |
43 |
44 |
45 | com.solibri.smc
46 | smc-api
47 | 1.0
48 | system
49 | ${smc-dir}/lib/smc-api.jar
50 |
51 |
52 | com.solibri.smc
53 | smc-geometry
54 | 1.0
55 | system
56 | ${smc-dir}/lib/smc-geometry.jar
57 |
58 |
59 |
60 | org.slf4j
61 | slf4j-api
62 | ${slf4j-api.version}
63 | system
64 | ${smc-dir}/lib/slf4j-api.jar
65 |
66 |
67 |
68 |
69 |
70 |
71 | maven-compiler-plugin
72 | ${maven-compiler-plugin.version}
73 |
74 | 11
75 | UTF-8
76 | true
77 |
78 |
79 |
80 |
81 | org.apache.maven.plugins
82 | maven-jar-plugin
83 | ${maven-jar-plugin.version}
84 |
85 | ${smc-dir}/lib
86 |
87 | false
88 |
89 | true
90 |
91 |
92 | 1.0
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/info-template/src/main/java/com/solibri/info/ExampleInfo.java:
--------------------------------------------------------------------------------
1 | package com.solibri.info;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.info.Information;
6 | import com.solibri.smc.api.model.Component;
7 | import com.solibri.smc.api.model.PropertyType;
8 |
9 | /**
10 | * This example custom Information fetches the middle elevation of a component calculated by taking the average from
11 | * global top elevation and global bottom elevation.
12 | */
13 | public class ExampleInfo implements Information {
14 |
15 | @Override
16 | public String getUniqueId() {
17 | return "ExampleInfo-get-middle-elevation";
18 | }
19 |
20 | @Override
21 | public Optional getInformation(Component component) {
22 | return Optional.of(Double.valueOf((component.getGlobalTopElevation() + component.getGlobalBottomElevation()) / 2));
23 | }
24 |
25 | @Override
26 | public PropertyType getType() {
27 | return PropertyType.LENGTH;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/info-template/src/main/resources/META-INF/services/com.solibri.smc.api.info.Information:
--------------------------------------------------------------------------------
1 | com.solibri.info.ExampleInfo
--------------------------------------------------------------------------------
/info-template/src/main/resources/com/solibri/info/ExampleInfo.properties:
--------------------------------------------------------------------------------
1 | NAME = Example ITO to get elevation
--------------------------------------------------------------------------------
/info-template/src/main/resources/com/solibri/info/ExampleInfo_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-template/src/main/resources/com/solibri/info/ExampleInfo_de.properties
--------------------------------------------------------------------------------
/info-template/src/main/resources/com/solibri/info/ExampleInfo_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Esimerkki ITO to get elevation
--------------------------------------------------------------------------------
/info-template/src/main/resources/com/solibri/info/ExampleInfo_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-template/src/main/resources/com/solibri/info/ExampleInfo_fr.properties
--------------------------------------------------------------------------------
/info-template/src/main/resources/com/solibri/info/ExampleInfo_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-template/src/main/resources/com/solibri/info/ExampleInfo_ja.properties
--------------------------------------------------------------------------------
/info-template/src/main/resources/com/solibri/info/ExampleInfo_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/info-template/src/main/resources/com/solibri/info/ExampleInfo_pt.properties
--------------------------------------------------------------------------------
/info-template/src/main/resources/com/solibri/info/ExampleInfo_ru.properties:
--------------------------------------------------------------------------------
1 | NAME = Пример выгрузки физ.объёмов получения отметки уровня
--------------------------------------------------------------------------------
/rule-examples/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | jar
8 |
9 | com.solibri
10 | smc-api-examples
11 | Solibri API Examples
12 | 1.0.0
13 |
14 |
15 |
16 | C:/Program Files/Solibri/SOLIBRI
17 |
18 | 3.11.0
19 | 3.3.0
20 | 2.0.17
21 |
22 |
23 |
24 |
25 | platform-mac
26 |
27 |
28 | mac
29 |
30 |
31 |
32 |
33 | /Applications/Solibri
34 |
35 |
36 |
37 |
38 |
39 |
40 | com.solibri.smc
41 | smc-api
42 | 1.0
43 | system
44 | ${smc-dir}/lib/smc-api.jar
45 |
46 |
47 | com.solibri.smc
48 | smc-geometry
49 | 1.0
50 | system
51 | ${smc-dir}/lib/smc-geometry.jar
52 |
53 |
54 |
55 | org.slf4j
56 | slf4j-api
57 | 1.7.36
58 | system
59 | ${smc-dir}/lib/slf4j-api.jar
60 |
61 |
62 |
63 |
64 |
65 |
66 | maven-compiler-plugin
67 | ${maven-compiler-plugin.version}
68 |
69 | 11
70 | UTF-8
71 | true
72 |
73 |
74 |
75 |
76 | org.apache.maven.plugins
77 | maven-jar-plugin
78 | ${maven-jar-plugin.version}
79 |
80 | ${smc-dir}/lib
81 |
82 | false
83 |
84 | true
85 |
86 |
87 | 1.0
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/beginner/ClashDetectionRuleUIDefinition.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.beginner;
2 |
3 | import com.solibri.smc.api.checking.RuleResources;
4 | import com.solibri.smc.api.ui.BorderType;
5 | import com.solibri.smc.api.ui.UIComponent;
6 | import com.solibri.smc.api.ui.UIContainer;
7 | import com.solibri.smc.api.ui.UIContainerVertical;
8 | import com.solibri.smc.api.ui.UILabel;
9 | import com.solibri.smc.api.ui.UIRuleParameter;
10 |
11 | /**
12 | * Class that provides the UI layout for Clash Detection Rule. The UI Consists
13 | * of two component filters and one double values parameter field for length.
14 | */
15 | class ClashDetectionRuleUIDefinition {
16 |
17 | /**
18 | * The Clash Detection Rule.
19 | */
20 | private final ClashDetectionRule clashDetectionRule;
21 |
22 | /**
23 | * The UI definition container.
24 | */
25 | private final UIContainer uiDefinition;
26 |
27 | /**
28 | * Basic constructor.
29 | *
30 | * @param clashDetectionRule the clash detection rule
31 | */
32 | public ClashDetectionRuleUIDefinition(ClashDetectionRule clashDetectionRule) {
33 | this.clashDetectionRule = clashDetectionRule;
34 | this.uiDefinition = createUIDefinition();
35 | }
36 |
37 | /**
38 | * Returns the UI definition of the rule.
39 | *
40 | * @return the UI definition container of the rule
41 | */
42 | public UIContainer getDefinitionContainer() {
43 | return uiDefinition;
44 | }
45 |
46 | /**
47 | * Create the UI definition of the rule.
48 | *
49 | * @return the UI definition container of the rule
50 | */
51 | private UIContainer createUIDefinition() {
52 | /*
53 | * Fetch the resources for this rule.
54 | */
55 | RuleResources resources = RuleResources.of(clashDetectionRule);
56 |
57 | /*
58 | * Create the vertical component container.
59 | */
60 | UIContainer uiContainer = UIContainerVertical.create(resources.getString("UI.ClashDetectionRule.TITLE"),
61 | BorderType.LINE);
62 |
63 | /*
64 | * Add the description of the rule.
65 | */
66 | uiContainer.addComponent(UILabel.create(resources.getString("UI.ClashDetectionRule.DESCRIPTION")));
67 |
68 | /*
69 | * Add the first filter for components to check.
70 | */
71 | uiContainer.addComponent(createFirstComponentFilterUIDefinition());
72 |
73 | /*
74 | * Add the second filter for components to check.
75 | */
76 | uiContainer.addComponent(createSecondComponentFilterUIDefinition());
77 |
78 | /*
79 | * Add the tolerance filter for clash of components.
80 | */
81 | uiContainer.addComponent(createAllowedToleranceUIDefinition());
82 |
83 | return uiContainer;
84 | }
85 |
86 | /**
87 | * Create the UI definition of the first component filter.
88 | *
89 | * @return the UI definition container of the first component filter
90 | */
91 | private UIComponent createFirstComponentFilterUIDefinition() {
92 | UIContainer uiContainer = UIContainerVertical.create();
93 | uiContainer.addComponent(UIRuleParameter.create(clashDetectionRule.rpComponentFilter));
94 | return uiContainer;
95 | }
96 |
97 | /**
98 | * Create the UI definition of the second component filter.
99 | *
100 | * @return the UI definition container of the second component filter
101 | */
102 | private UIComponent createSecondComponentFilterUIDefinition() {
103 | UIContainer uiContainer = UIContainerVertical.create();
104 | uiContainer.addComponent(UIRuleParameter.create(clashDetectionRule.rpComponentFilter2));
105 | return uiContainer;
106 | }
107 |
108 | /**
109 | * Create the UI definition of the allowed tolerance.
110 | *
111 | * @return the UI definition container of the allowed tolerance
112 | */
113 | private UIComponent createAllowedToleranceUIDefinition() {
114 | UIContainer uiContainer = UIContainerVertical.create();
115 | uiContainer.addComponent(UIRuleParameter.create(clashDetectionRule.rpAllowedTolerance));
116 | return uiContainer;
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/beginner/DistanceVisualizationRuleUIDefinition.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.beginner;
2 |
3 | import com.solibri.smc.api.checking.RuleResources;
4 | import com.solibri.smc.api.ui.BorderType;
5 | import com.solibri.smc.api.ui.UIComponent;
6 | import com.solibri.smc.api.ui.UIContainer;
7 | import com.solibri.smc.api.ui.UIContainerVertical;
8 | import com.solibri.smc.api.ui.UILabel;
9 | import com.solibri.smc.api.ui.UIRuleParameter;
10 |
11 | /**
12 | * Class that provides the UI layout for the Distance Visualization Rule.
13 | * The UI consists of two component filters and one double valued parameter field for length.
14 | */
15 | class DistanceVisualizationRuleUIDefinition {
16 |
17 | /**
18 | * The distance visualization rule.
19 | */
20 | private final DistanceVisualizationRule distanceVisualizationRule;
21 |
22 | /**
23 | * The UI definition container.
24 | */
25 | private final UIContainer uiDefinition;
26 |
27 | /**
28 | * Basic constructor.
29 | *
30 | * @param distanceVisualizationRule the distance visualization rule
31 | */
32 | public DistanceVisualizationRuleUIDefinition(DistanceVisualizationRule distanceVisualizationRule) {
33 | this.distanceVisualizationRule = distanceVisualizationRule;
34 | this.uiDefinition = createUIDefinition();
35 | }
36 |
37 | /**
38 | * Returns the UI definition of the Rule.
39 | *
40 | * @return the UI definition container of the Rule
41 | */
42 | public UIContainer getDefinitionContainer() {
43 | return uiDefinition;
44 | }
45 |
46 | private UIContainer createUIDefinition() {
47 | /*
48 | * Fetch the resources for this rule.
49 | */
50 | RuleResources resources = RuleResources.of(distanceVisualizationRule);
51 |
52 | /*
53 | * Create the vertical component container.
54 | */
55 | UIContainer uiContainer = UIContainerVertical.create(
56 | resources.getString("UI.DistanceVisualizationRule.TITLE"),
57 | BorderType.LINE);
58 |
59 | /*
60 | * Add the description.
61 | */
62 | uiContainer
63 | .addComponent(UILabel.create(resources.getString("UI.DistanceVisualizationRule.DESCRIPTION")));
64 |
65 | /*
66 | * Add the first filter for components to check.
67 | */
68 | uiContainer.addComponent(createComponentFilterUIDefinition());
69 |
70 | /*
71 | * Add second filter for components to check.
72 | */
73 | uiContainer.addComponent(createSecondComponentFilterUIDefinition());
74 |
75 | /*
76 | * Add third filter for the range of the secondary components.
77 | */
78 | uiContainer.addComponent(createMaximumDistanceFilterUIDefinition());
79 |
80 | return uiContainer;
81 | }
82 |
83 | private UIComponent createComponentFilterUIDefinition() {
84 | UIContainer uiContainer = UIContainerVertical.create();
85 | uiContainer.addComponent(UIRuleParameter.create(distanceVisualizationRule.rpComponentFilter));
86 |
87 | return uiContainer;
88 | }
89 |
90 | private UIComponent createSecondComponentFilterUIDefinition() {
91 | UIContainer uiContainer = UIContainerVertical.create();
92 | uiContainer.addComponent(UIRuleParameter.create(distanceVisualizationRule.rpComponentFilter2));
93 |
94 | return uiContainer;
95 | }
96 |
97 | private UIComponent createMaximumDistanceFilterUIDefinition() {
98 | UIContainer uiContainer = UIContainerVertical.create();
99 | uiContainer.addComponent(UIRuleParameter.create(distanceVisualizationRule.maximumDistance));
100 |
101 | return uiContainer;
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/beginner/HeatmapVisualizationRuleUIDefinition.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.beginner;
2 |
3 | import com.solibri.smc.api.checking.RuleResources;
4 | import com.solibri.smc.api.ui.BorderType;
5 | import com.solibri.smc.api.ui.UIComponent;
6 | import com.solibri.smc.api.ui.UIContainer;
7 | import com.solibri.smc.api.ui.UIContainerHorizontal;
8 | import com.solibri.smc.api.ui.UIContainerVertical;
9 | import com.solibri.smc.api.ui.UIImage;
10 | import com.solibri.smc.api.ui.UILabel;
11 | import com.solibri.smc.api.ui.UIRuleParameter;
12 |
13 | /**
14 | * Class that provides the UI layout for the Heatmap Visualization Rule.
15 | */
16 | class HeatmapVisualizationRuleUIDefinition {
17 |
18 | /**
19 | * The heatmap visualization rule.
20 | */
21 | private final HeatmapVisualizationRule heatmapVisualizationRule;
22 |
23 | /**
24 | * The UI definition container.
25 | */
26 | private final UIContainer uiDefinition;
27 |
28 | /**
29 | * The resources of the rule.
30 | */
31 | private final RuleResources resources;
32 |
33 | /**
34 | * Constructor.
35 | *
36 | * @param heatmapVisualizationRule the heatmap visualization rule
37 | */
38 | public HeatmapVisualizationRuleUIDefinition(HeatmapVisualizationRule heatmapVisualizationRule) {
39 | this.heatmapVisualizationRule = heatmapVisualizationRule;
40 | this.resources = RuleResources.of(heatmapVisualizationRule);
41 | this.uiDefinition = createUIDefinition();
42 | }
43 |
44 | /**
45 | * Returns the UI definition of the Rule.
46 | *
47 | * @return the UI definition container of the Rule
48 | */
49 | public UIContainer getDefinitionContainer() {
50 | return uiDefinition;
51 | }
52 |
53 | private UIContainer createUIDefinition() {
54 | /*
55 | * Create the vertical component container.
56 | */
57 | UIContainer uiContainer = UIContainerVertical.create(
58 | resources.getString("UI.HeatmapVisualizationRule.TITLE"),
59 | BorderType.LINE);
60 |
61 | /*
62 | * Add the description.
63 | */
64 | uiContainer
65 | .addComponent(UILabel.create(resources.getString("UI.HeatmapVisualizationRule.DESCRIPTION")));
66 |
67 | /*
68 | * Add the first filter for components to check.
69 | */
70 | uiContainer.addComponent(createComponentFilterUIDefinition());
71 |
72 | /*
73 | * Add second filter for source effect components.
74 | */
75 | uiContainer.addComponent(createEffectSourceComponentFilterUIDefinition());
76 |
77 | /*
78 | * Add visualization parameters content.
79 | */
80 | uiContainer.addComponent(createParameterValuesUIDefinition());
81 |
82 | return uiContainer;
83 | }
84 |
85 | private UIComponent createComponentFilterUIDefinition() {
86 | UIContainer uiContainer = UIContainerVertical.create();
87 |
88 | /*
89 | * Add component filter.
90 | */
91 | uiContainer.addComponent(UIRuleParameter.create(heatmapVisualizationRule.rpComponentFilter));
92 |
93 | return uiContainer;
94 | }
95 |
96 | private UIComponent createEffectSourceComponentFilterUIDefinition() {
97 | UIContainer uiContainer = UIContainerVertical.create();
98 |
99 | uiContainer.addComponent(UIRuleParameter.create(heatmapVisualizationRule.rpEffectSourceFilter));
100 |
101 | return uiContainer;
102 | }
103 |
104 | private UIComponent createParameterValuesUIDefinition() {
105 | UIContainer uiContainer = UIContainerVertical.create(
106 | resources.getString("UI.HeatmapVisualizationParameter.TITLE"),
107 | BorderType.LINE);
108 |
109 | uiContainer
110 | .addComponent(UILabel.create(resources.getString("UI.HeatmapVisualizationParameter.DESCRIPTION")));
111 |
112 | /*
113 | * Add the horizontal container with image and parameters.
114 | */
115 | UIContainer horizontalUiContainer = UIContainerHorizontal.create();
116 | UIImage image = UIImage.create(resources.getImageUrl("heatmap_visualization_rule_parameters.png"));
117 | horizontalUiContainer.addComponent(image);
118 | horizontalUiContainer.addComponent(createParameterUIDefinition());
119 | uiContainer.addComponent(horizontalUiContainer);
120 |
121 | return uiContainer;
122 | }
123 |
124 | private UIContainer createParameterUIDefinition() {
125 | UIContainer uiContainer = UIContainerVertical.create();
126 |
127 | uiContainer.addComponent(UIRuleParameter.create(heatmapVisualizationRule.rpRangeParameter));
128 | uiContainer.addComponent(UIRuleParameter.create(heatmapVisualizationRule.rpStepParameter));
129 |
130 | return uiContainer;
131 | }
132 | }
133 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/CoverageAreaViolation.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule;
2 |
3 | import java.util.Collection;
4 |
5 | import com.solibri.geometry.primitive2d.Area;
6 | import com.solibri.smc.api.model.Component;
7 |
8 | class CoverageAreaViolation {
9 |
10 | final Component spaceEntity;
11 | final Collection effectSources;
12 | final Area coverage;
13 | final double coverageRatio;
14 | final double minimumCoverage;
15 |
16 | public CoverageAreaViolation(
17 | Component spaceEntity,
18 | Collection effectSources,
19 | Area coverage,
20 | double coverageArea,
21 | double coverageRatio,
22 | double minimumCoverage) {
23 | this.spaceEntity = spaceEntity;
24 | this.effectSources = effectSources;
25 | this.coverage = coverage;
26 | this.coverageRatio = coverageRatio;
27 | this.minimumCoverage = minimumCoverage;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/DistanceOfTravelChecking.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule;
2 |
3 | import java.util.Collection;
4 |
5 | import com.solibri.geometry.primitive2d.MArea;
6 | import com.solibri.smc.api.model.Component;
7 | import com.solibri.smc.api.examples.effectivecoveragearearule.visibility.DistanceOfTravelEffectCalculator;
8 |
9 | public class DistanceOfTravelChecking extends EffectiveCoverageChecking {
10 |
11 | public DistanceOfTravelChecking(
12 | Component spaceEntity,
13 | Collection effectSources,
14 | double effectRange,
15 | double minimumCoverage) {
16 | super(spaceEntity, effectSources, effectRange, minimumCoverage);
17 | }
18 |
19 | @Override
20 | MArea calculateCoverage(MArea sourceFootprint) {
21 | DistanceOfTravelEffectCalculator calculator = DistanceOfTravelEffectCalculator
22 | .fromAreaAndSourceAndEffectRange(spaceArea, sourceFootprint, effectRange);
23 | MArea effectArea = MArea.create(calculator.getEffectArea());
24 | effectArea.add(calculator.getGeometryGraph().getPossiblyResizedSource());
25 | effectArea.intersect(spaceArea);
26 | return effectArea;
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/EffectiveAreaVisualizationColor.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule;
2 |
3 | import com.solibri.smc.api.visualization.ARGBColor;
4 |
5 | class EffectiveAreaVisualizationColor {
6 | public static final ARGBColor SPACE_GREEN_TRANSPARENT = ARGBColor.create(0, 128, 0, 64);
7 | public static final ARGBColor SOURCE_RED = ARGBColor.create(255, 0, 0, 255);
8 | public static final ARGBColor COVERAGE_AREA_RED_TRANSPARENT = ARGBColor.create(128, 0, 0, 128);
9 | }
10 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/EffectiveCoverageAreaBehaviour.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule;
2 |
3 | import java.util.Arrays;
4 |
5 | public enum EffectiveCoverageAreaBehaviour {
6 | /* Sources outside the space will contribute to coverage */
7 | UNOCCLUDED("rpOcclusionAndBounds.Unoccluded"),
8 |
9 | /* Sources outside the space will not contribute to coverage */
10 | UNOCCLUDED_WITHIN_AREA("rpOcclusionAndBounds.UnoccludedWithinArea"),
11 |
12 | /* The effect will bend around corners */
13 | DISTANCE_OF_TRAVEL_WITHIN_AREA("rpOcclusionAndBounds.DistanceOfTravel"),
14 |
15 | /* An effect source will cover the area visible from the source */
16 | OCCLUDED_WITHIN_AREA("rpOcclusionAndBounds.OccludedWithinArea");
17 |
18 | private final String propertyKey;
19 |
20 | static EffectiveCoverageAreaBehaviour fromPropertyKey(String propertyKey) {
21 | return Arrays.stream(EffectiveCoverageAreaBehaviour.values())
22 | .filter(behavior -> behavior.getPropertyKey().equals(propertyKey))
23 | .findFirst()
24 | .get();
25 | }
26 |
27 | private EffectiveCoverageAreaBehaviour(String propertyKey) {
28 | this.propertyKey = propertyKey;
29 | }
30 |
31 | String getPropertyKey() {
32 | return propertyKey;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/EffectiveCoverageChecking.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule;
2 |
3 | import java.util.Collection;
4 | import java.util.Optional;
5 |
6 | import com.solibri.geometry.primitive2d.Area;
7 | import com.solibri.geometry.primitive2d.MArea;
8 | import com.solibri.smc.api.model.Component;
9 |
10 | abstract class EffectiveCoverageChecking {
11 | // init parameters
12 | final Component spaceEntity;
13 | final Collection effectSources;
14 | final double effectRange;
15 | final double minimumCoverage;
16 |
17 | // calculated values
18 | Area spaceArea;
19 | double total;
20 | MArea coverage;
21 | double coverageArea;
22 | double coverageRatio;
23 |
24 | EffectiveCoverageChecking(
25 | Component spaceEntity,
26 | Collection effectSources,
27 | double effectRange,
28 | double minimumCoverage) {
29 | this.spaceEntity = spaceEntity;
30 | this.effectSources = effectSources;
31 | this.effectRange = effectRange;
32 | this.minimumCoverage = minimumCoverage;
33 | }
34 |
35 | Optional checkViolations() {
36 | /* Retrieve the footprint of the space */
37 | calculateTotalArea();
38 |
39 | /*
40 | * Retrieve the effect source footprints, resize them, build the union
41 | * of the areas and intersect it with the space footprint.
42 | */
43 | calculateEffectArea();
44 |
45 | /*
46 | * If the coverage area is below the minimum coverage threshold, return
47 | * a violation.
48 | */
49 | return checkCoverage();
50 | }
51 |
52 | abstract MArea calculateCoverage(MArea sourceFootprint);
53 |
54 | void calculateTotalArea() {
55 | spaceArea = spaceEntity.getFootprint().getArea();
56 | total = spaceArea.getSize();
57 | }
58 |
59 | void calculateEffectArea() {
60 | calculateEffectArea(effectSources);
61 | }
62 |
63 | /*
64 | * Calculate the coverage from effect sources.
65 | *
66 | * This method calculates the footprint of each effect source and applies
67 | * the coverage calculation to it. The coverage calculation is implemented
68 | * in the subclasses.
69 | *
70 | * A union is taken from the resulting coverages from each effect source and
71 | * the resulting coverage is the common area between the space footprint and
72 | * the union of the coverage areas.
73 | *
74 | */
75 | void calculateEffectArea(Collection effectSources) {
76 | final MArea accumulatedArea = MArea.create();
77 |
78 | effectSources.stream()
79 | .map(entity -> MArea.create(entity.getFootprint().getArea()))
80 | .map(this::calculateCoverage)
81 | .forEach((sourceArea) -> accumulatedArea.add(sourceArea));
82 |
83 | coverage = accumulatedArea;
84 | coverage.intersect(spaceArea);
85 | coverageArea = coverage.getSize();
86 | }
87 |
88 | Optional checkCoverage() {
89 | coverageRatio = coverageArea / total;
90 | if (coverageRatio < minimumCoverage) {
91 | return Optional.of(new CoverageAreaViolation(
92 | spaceEntity,
93 | effectSources,
94 | coverage,
95 | coverageArea,
96 | coverageRatio,
97 | minimumCoverage));
98 | }
99 | return Optional.empty();
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/OccludedWithinAreaChecking.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule;
2 |
3 | import java.util.Collection;
4 |
5 | import com.solibri.geometry.primitive2d.MArea;
6 | import com.solibri.smc.api.model.Component;
7 | import com.solibri.smc.api.examples.effectivecoveragearearule.visibility.VisibilityPolygonCalculator;
8 |
9 | /**
10 | * UnoccludedWithinAreaChecking implements the Effective coverage area type 4
11 | * behaviour.
12 | *
13 | * It utilizes only sources that intersect the space and from each point in the
14 | * coverage area, there is a line of sight to the effect source.
15 | */
16 | public class OccludedWithinAreaChecking extends EffectiveCoverageChecking {
17 |
18 | public OccludedWithinAreaChecking(
19 | Component spaceEntity,
20 | Collection effectSources,
21 | double effectRange,
22 | double minimumCoverage) {
23 | super(spaceEntity, effectSources, effectRange, minimumCoverage);
24 | }
25 |
26 | @Override
27 | MArea calculateCoverage(MArea sourceFootprint) {
28 | // calculate the visibility polygon for the source footprint
29 | VisibilityPolygonCalculator calc = VisibilityPolygonCalculator.fromAreaAndSource(spaceArea, sourceFootprint);
30 | MArea visibilityPolygon = MArea.create(calc.getVisibilityPolygonForEffectSource());
31 |
32 | // apply effect range
33 | MArea sourceCopy = MArea.create(sourceFootprint);
34 | sourceCopy.resize(effectRange, true);
35 | visibilityPolygon.intersect(sourceCopy);
36 | return visibilityPolygon;
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/UnoccludedChecking.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule;
2 |
3 | import java.util.Collection;
4 |
5 | import com.solibri.geometry.primitive2d.MArea;
6 | import com.solibri.smc.api.model.Component;
7 |
8 | class UnoccludedChecking extends EffectiveCoverageChecking {
9 |
10 | public UnoccludedChecking(
11 | Component spaceEntity,
12 | Collection effectSources,
13 | double effectRange,
14 | double minimumCoverage) {
15 | super(spaceEntity, effectSources, effectRange, minimumCoverage);
16 | }
17 |
18 | @Override
19 | MArea calculateCoverage(MArea sourceFootprint) {
20 | MArea footprintCopy = MArea.create(sourceFootprint);
21 | footprintCopy.resize(effectRange, true);
22 | return footprintCopy;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/UnoccludedWithinAreaChecking.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule;
2 |
3 | import java.util.Collection;
4 | import java.util.Optional;
5 | import java.util.Set;
6 | import java.util.stream.Collectors;
7 |
8 | import com.solibri.geometry.primitive2d.MArea;
9 | import com.solibri.smc.api.model.Component;
10 |
11 | class UnoccludedWithinAreaChecking extends EffectiveCoverageChecking {
12 |
13 | public UnoccludedWithinAreaChecking(
14 | Component spaceEntity,
15 | Collection effectSources,
16 | double effectRange,
17 | double minimumCoverage) {
18 | super(spaceEntity, effectSources, effectRange, minimumCoverage);
19 | }
20 |
21 | @Override
22 | public Optional checkViolations() {
23 | /* Retrieve the footprint of the space and calculate the total area */
24 | calculateTotalArea();
25 |
26 | /*
27 | * Find the intersecting effect sources, resize their footprints, build
28 | * the union of the areas and intersect it with the space footprint.
29 | */
30 | calculateEffectArea(getIntersectingEffectSources());
31 |
32 | /*
33 | * If the coverage area is below the minimum coverage threshold, return
34 | * a violation.
35 | */
36 | return checkCoverage();
37 | }
38 |
39 | Set getIntersectingEffectSources() {
40 | return effectSources.stream().filter(source -> intersectsSpace(spaceEntity, source))
41 | .collect(Collectors.toSet());
42 | }
43 |
44 | boolean intersectsSpace(Component spaceEntity, Component sourceEntity) {
45 | return spaceEntity.getIntersections(sourceEntity)
46 | .stream()
47 | .anyMatch((intersection) -> !intersection.isEmpty());
48 | }
49 |
50 | @Override
51 | MArea calculateCoverage(MArea sourceFootprint) {
52 | MArea footprintCopy = MArea.create(sourceFootprint);
53 | footprintCopy.resize(effectRange, true);
54 | return footprintCopy;
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/visibility/DirectedGraph.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule.visibility;
2 |
3 | import java.util.Collection;
4 | import java.util.Collections;
5 | import java.util.HashMap;
6 | import java.util.HashSet;
7 | import java.util.Map;
8 | import java.util.Set;
9 |
10 | /*
11 | * A generic implementation of a directed graph data structure.
12 | *
13 | * It is meant to be used with immutable data objects that
14 | * should have a proper implementation of equals() and hashCode().
15 | */
16 | class DirectedGraph {
17 | private final Set> edges = new HashSet<>();
18 | private final Map> dataToVertex = new HashMap<>();
19 |
20 | DirectedGraph() {
21 | }
22 |
23 | void addGraph(DirectedGraph other) {
24 | other.dataToVertex.keySet().forEach(this::addVertex);
25 | other.edges.forEach(edge -> addEdge(edge.getSource(), edge.getDestination()));
26 | }
27 |
28 | void addVertex(T payload) {
29 | if (!dataToVertex.containsKey(payload)) {
30 | Vertex newVertex = new Vertex<>(payload);
31 | dataToVertex.put(payload, newVertex);
32 | }
33 | }
34 |
35 | void addEdge(T source, T destination, double weight) {
36 | addVertex(source);
37 | addVertex(destination);
38 | Edge edge = new Edge<>(dataToVertex.get(source), dataToVertex.get(destination), weight);
39 | edge.source.destinations.add(edge);
40 | edge.destination.sources.add(edge);
41 | edges.add(edge);
42 | }
43 |
44 | void addEdge(T source, T destination) {
45 | addEdge(source, destination, 0.0);
46 | }
47 |
48 | Set> getEdgesFromVertex(T payload) {
49 | if (!dataToVertex.containsKey(payload)) {
50 | return Collections.emptySet();
51 | }
52 | return Collections.unmodifiableSet(dataToVertex.get(payload).destinations);
53 | }
54 |
55 | Set> getEdgesToVertex(T payload) {
56 | if (!dataToVertex.containsKey(payload)) {
57 | return Collections.emptySet();
58 | }
59 | return Collections.unmodifiableSet(dataToVertex.get(payload).sources);
60 | }
61 |
62 | boolean hasEdge(T source, T destination) {
63 | return edges.contains(new Edge<>(new Vertex<>(source), new Vertex<>(destination)));
64 | }
65 |
66 | Collection getVertices() {
67 | return Collections.unmodifiableCollection(dataToVertex.keySet());
68 | }
69 |
70 | Set> getEdges() {
71 | return Collections.unmodifiableSet(this.edges);
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/visibility/Edge.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule.visibility;
2 |
3 | import java.util.Objects;
4 |
5 | class Edge {
6 | final Vertex source;
7 | final Vertex destination;
8 | final double weight;
9 |
10 | Edge(Vertex source, Vertex destination) {
11 | this(source, destination, 0);
12 | }
13 |
14 | Edge(Vertex source, Vertex destination, double weight) {
15 | this.source = source;
16 | this.destination = destination;
17 | this.weight = weight;
18 | }
19 |
20 | T getSource() {
21 | return source.getPayload();
22 | }
23 |
24 | T getDestination() {
25 | return destination.getPayload();
26 | }
27 |
28 | /*
29 | * Retrieves the other one of the vertices. If given source, it will return
30 | * destination and if given destination, it will return source.
31 | */
32 | T getOther(T v) {
33 | if (source.getPayload().equals(v)) {
34 | return destination.getPayload();
35 | } else if (destination.getPayload().equals(v)) {
36 | return source.getPayload();
37 | }
38 |
39 | throw new IllegalArgumentException(v + " is not the value at either vertex connected to this edge");
40 | }
41 |
42 | @Override
43 | public int hashCode() {
44 | return Objects.hash(source, destination);
45 | }
46 |
47 | @Override
48 | public boolean equals(Object other) {
49 | if (!(other instanceof Edge)) {
50 | return false;
51 | }
52 |
53 | Edge> otherEdge = (Edge>) other;
54 | return source.equals(otherEdge.source) && destination.equals(otherEdge.destination);
55 | }
56 |
57 | @Override
58 | public String toString() {
59 | return "Edge: " + source + ", " + destination;
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/visibility/Vertex.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule.visibility;
2 |
3 | import java.util.Collections;
4 | import java.util.HashSet;
5 | import java.util.Set;
6 |
7 | class Vertex {
8 | /*
9 | * The payload should be immutable, since changing the data in the payload
10 | * could affect the hash code and thus could lead to issues in retrieving
11 | * the vertices from the DirectedGraph hash map.
12 | */
13 | private final T payload;
14 | final Set> sources = new HashSet<>();
15 | final Set> destinations = new HashSet<>();
16 |
17 | Vertex(T payload) {
18 | this.payload = payload;
19 | }
20 |
21 | public T getPayload() {
22 | return payload;
23 | }
24 |
25 | public Set> getSources() {
26 | return Collections.unmodifiableSet(sources);
27 | }
28 |
29 | public Set> getDestinations() {
30 | return Collections.unmodifiableSet(destinations);
31 | }
32 |
33 | @Override
34 | public int hashCode() {
35 | return payload.hashCode();
36 | }
37 |
38 | @Override
39 | public boolean equals(Object other) {
40 | if (other instanceof Vertex) {
41 | return payload.equals(((Vertex>) other).payload);
42 | }
43 | return false;
44 | }
45 |
46 | @Override
47 | public String toString() {
48 | return "Vertex: " + payload;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/effectivecoveragearearule/visibility/VisibilityGraph.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.effectivecoveragearearule.visibility;
2 |
3 | import java.util.Collection;
4 | import java.util.Optional;
5 |
6 | import com.solibri.geometry.linearalgebra.MVector2d;
7 | import com.solibri.geometry.linearalgebra.Vector2d;
8 | import com.solibri.geometry.primitive2d.MSegment2d;
9 | import com.solibri.geometry.primitive2d.Segment2d;
10 |
11 | /**
12 | * The visibility graph takes a geometry graph as an argument. It calculates for
13 | * each vertex of the geometry graph, what other vertices have a direct line of
14 | * sight to that vertex. For each such vertex, it assigns an edge between the
15 | * two vertices.
16 | */
17 | class VisibilityGraph extends DirectedGraph {
18 |
19 | final EffectGeometryGraph geometryGraph;
20 |
21 | static VisibilityGraph fromGeometry(EffectGeometryGraph geometryGraph) {
22 | return new VisibilityGraph(geometryGraph);
23 | }
24 |
25 | VisibilityGraph(EffectGeometryGraph geometryGraph) {
26 | this.geometryGraph = geometryGraph;
27 | }
28 |
29 | public void calculate() {
30 | Collection verts = geometryGraph.getVertices();
31 |
32 | // Add vertices to the visibility graph
33 | verts.forEach(this::addVertex);
34 |
35 | /*
36 | * Brute force implementation, replace with for example Lee's algorithm,
37 | * if necessary
38 | */
39 | for (Vector2d src : verts) {
40 | for (Vector2d dst : verts) {
41 | if (!src.equals(dst) &&
42 | isValidDirectionFromVertex(src, dst) &&
43 | isVisibleFromVertex(src, dst)) {
44 | addEdge(src, dst, src.distance(dst));
45 | }
46 | }
47 | }
48 | }
49 |
50 | /**
51 | * Not all directions are proper visible directions from the source vertex.
52 | * For example, vertices cannot be seen through holes or outside the polygon
53 | * geometry.
54 | *
55 | * To find, if a direction a ray is cast from the source is valid, we can
56 | * utilize the information that polygon edges run clockwise and hole edges
57 | * counterclockwise. We also know that a vertex can be the source or the
58 | * destination in only one edge in the geometry graph.
59 | *
60 | * The angle of the direction should thus be between the source edge vector
61 | * and the opposite of the destination edge vector clockwise. This way we
62 | * can take into account both the polygon and hole vertices.
63 | */
64 | boolean isValidDirectionFromVertex(Vector2d src, Vector2d dst) {
65 |
66 | Optional> srcAsSrc = geometryGraph.getEdgesFromVertex(src).stream().findAny();
67 | Optional> srcAsDst = geometryGraph.getEdgesToVertex(src).stream().findAny();
68 | if (srcAsSrc.isPresent() && srcAsDst.isPresent()) {
69 | /*
70 | * Calculate the clockwise angle from x-axis for the source edge
71 | * vector and destination edge vector and rotate the angles so that
72 | * srcVec is aligned with x-axis
73 | */
74 | MVector2d srcVec = srcAsSrc.get().getDestination().subtract(srcAsSrc.get().getSource());
75 | MVector2d dstVec = srcAsDst.get().getSource().subtract(srcAsDst.get().getDestination());
76 | MVector2d dir = dst.subtract(src);
77 |
78 | double srcAngle = srcVec.getClockwiseAngle();
79 | double dstAngle = dstVec.getClockwiseAngle() - srcAngle;
80 | double dirAngle = dir.getClockwiseAngle() - srcAngle;
81 |
82 | if (dstAngle < 0.0) {
83 | dstAngle += 2 * Math.PI;
84 | }
85 | if (dirAngle < 0.0) {
86 | dirAngle += 2 * Math.PI;
87 | }
88 |
89 | return dirAngle <= dstAngle;
90 | }
91 | /*
92 | * The vertex has only one edge or no edges connected to it in the
93 | * geometry graph, so all directions are valid.
94 | */
95 | return true;
96 | }
97 |
98 | /**
99 | * Loop over the edges in the geometry graph and check, if the line between
100 | * source and destination intersects any of them.
101 | */
102 | boolean isVisibleFromVertex(Vector2d src, Vector2d dst) {
103 | Segment2d srcToDestSegment = MSegment2d.create(src, dst);
104 | return !geometryGraph.getEdges().stream()
105 | .filter(e -> {
106 | /*
107 | * If the ray goes through the source or destination, it doesn't
108 | * cause an intersection
109 | */
110 | if (e.getSource().equals(src) || e.getDestination().equals(src) || e.getSource().equals(dst) || e
111 | .getDestination().equals(dst)) {
112 | return false;
113 | }
114 | Segment2d edgeSegment = MSegment2d.create(e.getSource(), e.getDestination());
115 | return srcToDestSegment.intersects(edgeSegment);
116 | })
117 | .findAny()
118 | .isPresent();
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/parkingrule/ParkingSpace.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.parkingrule;
2 |
3 | import java.util.Arrays;
4 |
5 | import com.solibri.geometry.linearalgebra.MVector3d;
6 | import com.solibri.geometry.linearalgebra.Vector2d;
7 | import com.solibri.geometry.linearalgebra.Vector3d;
8 | import com.solibri.geometry.primitive2d.Area;
9 | import com.solibri.geometry.primitive2d.MArea;
10 | import com.solibri.geometry.primitive3d.AABB3d;
11 | import com.solibri.geometry.primitive3d.MSegment3d;
12 | import com.solibri.geometry.primitive3d.Rectangle3d;
13 | import com.solibri.geometry.primitive3d.Segment3d;
14 | import com.solibri.smc.api.model.Component;
15 |
16 | final class ParkingSpace {
17 |
18 | private static final double MINIMUM_VALID_PARKING_AREA = 1.0;
19 |
20 | private final double width;
21 |
22 | private final double length;
23 |
24 | private final Segment3d longerSegment;
25 |
26 | private final Segment3d shorterSegment;
27 |
28 | private final Area rectangleArea;
29 |
30 | private final Rectangle3d rectangle;
31 |
32 | private final Vector2d[] footprint;
33 |
34 | private final Component entity;
35 |
36 | private final AABB3d aabb;
37 |
38 | ParkingSpace(Component uuid, final Vector2d[] footprint, final Vector3d[] rectangle, final AABB3d aabb) {
39 | this.entity = uuid;
40 | this.footprint = footprint;
41 | this.rectangle = Rectangle3d.create(Arrays.asList(rectangle));
42 | this.aabb = aabb;
43 |
44 | this.width = this.rectangle.getShorterRectangleSegmentLength();
45 | this.length = this.rectangle.getLongerRectangleSegmentLength();
46 |
47 | this.rectangleArea = MArea.create(Vector2d.to2dVectors(Arrays.asList(rectangle)));
48 |
49 | Segment3d longerSegment = this.rectangle.getLongerRectangleSegment();
50 | MVector3d longerSegment1 = MVector3d.create(longerSegment.getStartPoint());
51 | longerSegment1.setZ(getElevation());
52 | MVector3d longerSegment2 = MVector3d.create(longerSegment.getEndPoint());
53 | longerSegment2.setZ(getElevation());
54 |
55 | Segment3d shorterSegment = this.rectangle.getShorterRectangleSegment();
56 | MVector3d shorterSegment1 = MVector3d.create(shorterSegment.getStartPoint());
57 | shorterSegment1.setZ(getElevation());
58 | MVector3d shorterSegment2 = MVector3d.create(shorterSegment.getEndPoint());
59 | shorterSegment2.setZ(getElevation());
60 |
61 | this.longerSegment = MSegment3d.create(longerSegment1, longerSegment2);
62 | this.shorterSegment = MSegment3d.create(shorterSegment1, shorterSegment2);
63 | }
64 |
65 | public Component getEntity() {
66 | return entity;
67 | }
68 |
69 | double getWidth() {
70 | return width;
71 | }
72 |
73 | double getLength() {
74 | return length;
75 | }
76 |
77 | double getHeight() {
78 | return aabb.getSizeZ();
79 | }
80 |
81 | public double getElevation() {
82 | return aabb.getLowerBound().getZ();
83 | }
84 |
85 | public Segment3d getLongerSegment() {
86 | return longerSegment;
87 | }
88 |
89 | public Segment3d getShorterSegment() {
90 | return shorterSegment;
91 | }
92 |
93 | public Area getRectangleArea() {
94 | return rectangleArea;
95 | }
96 |
97 | public Rectangle3d getRectangle() {
98 | return rectangle;
99 | }
100 |
101 | public Vector2d[] getFootprint() {
102 | return footprint;
103 | }
104 |
105 | public AABB3d getAABB() {
106 | return aabb;
107 | }
108 |
109 | public boolean isValid() {
110 | // To be valid the parking area should be at least 1 squared meters
111 | return !rectangleArea.isEmpty() && rectangleArea.getSize() >= MINIMUM_VALID_PARKING_AREA;
112 | }
113 | }
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/parkingrule/ParkingSpaceSizeRequirement.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.parkingrule;
2 |
3 | import java.util.List;
4 |
5 | import com.solibri.smc.api.checking.DoubleParameter;
6 |
7 | final class ParkingSpaceSizeRequirement {
8 |
9 | private static final double ROUNDING_IN_MM_FACTOR = 1000;
10 |
11 | enum Requirement {
12 | MinimumWidth(false),
13 | MinimumLength(false),
14 | MinimumHeight(false),
15 |
16 | MaximumWidth(true),
17 | MaximumLength(true),
18 | MaximumHeight(true);
19 |
20 | private final boolean isMaximum;
21 |
22 | Requirement(boolean isMaximum) {
23 | this.isMaximum = isMaximum;
24 | }
25 |
26 | public boolean isMet(double limitValue, double actualValue) {
27 | return isMaximum ? actualValue <= limitValue : actualValue >= limitValue;
28 | }
29 | }
30 |
31 | static class Violation {
32 |
33 | private final Requirement requirement;
34 | private final double limitValue;
35 | private final double value;
36 |
37 | Violation(Requirement requirement, double limitValue, double value) {
38 | this.requirement = requirement;
39 | this.limitValue = limitValue;
40 | this.value = value;
41 | }
42 |
43 | Requirement getRequirement() {
44 | return requirement;
45 | }
46 |
47 | double getLimitValue() {
48 | return limitValue;
49 | }
50 |
51 | double getValue() {
52 | return value;
53 | }
54 | }
55 |
56 | void checkRequirement(Requirement requirement, DoubleParameter parameter, double actualValue,
57 | List violations) {
58 | //Round in mm
59 | double limitValue = Math.round(parameter.getValue() * ROUNDING_IN_MM_FACTOR);
60 | double roundedValue = Math.round(actualValue * ROUNDING_IN_MM_FACTOR);
61 |
62 | // Skip checking against parameters with zero as limit
63 | if (limitValue > 0.0 && !requirement.isMet(limitValue, roundedValue)) {
64 | Violation violation = new Violation(requirement, limitValue / ROUNDING_IN_MM_FACTOR,
65 | roundedValue / ROUNDING_IN_MM_FACTOR);
66 | violations.add(violation);
67 | }
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/rule-examples/src/main/java/com/solibri/smc/api/examples/spaceconnectionrule/SpaceConnectionRuleUIDefinition.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.examples.spaceconnectionrule;
2 |
3 | import com.solibri.smc.api.checking.RuleResources;
4 | import com.solibri.smc.api.ui.BorderType;
5 | import com.solibri.smc.api.ui.UIContainer;
6 | import com.solibri.smc.api.ui.UIContainerHorizontal;
7 | import com.solibri.smc.api.ui.UIContainerVertical;
8 | import com.solibri.smc.api.ui.UIRadioButtonPanelVertical;
9 | import com.solibri.smc.api.ui.UIRuleParameter;
10 |
11 | /**
12 | * Class that provides the UI layout for the Space Connection rule.
13 | */
14 | class SpaceConnectionRuleUIDefinition {
15 |
16 | private final SpaceConnectionRule spaceConnectionRule;
17 | private final UIContainer uiDefinition;
18 |
19 | public SpaceConnectionRuleUIDefinition(SpaceConnectionRule spaceConnectionRule) {
20 | this.spaceConnectionRule = spaceConnectionRule;
21 | this.uiDefinition = createUIDefinition();
22 | }
23 |
24 | public UIContainer getDefinitionContainer() {
25 | return uiDefinition;
26 | }
27 |
28 | private UIContainer createUIDefinition() {
29 |
30 | RuleResources resources = RuleResources.of(spaceConnectionRule);
31 |
32 | UIContainer rootContainer = UIContainerVertical.create("", BorderType.LINE);
33 |
34 | UIContainer outsideContainer = UIContainerVertical
35 | .create(resources.getString("UI.SpacesToCheck.TITLE"), BorderType.LINE);
36 | UIContainer spaceToSpaceContainer = UIContainerVertical
37 | .create(resources.getString("UI.SpacesToCheck.TITLE"), BorderType.LINE);
38 |
39 | UIContainer checkBoxContainer1 = UIContainerVertical
40 | .create(resources.getString("UI.SpaceConnectionRequirements.TITLE"),
41 | BorderType.LINE);
42 |
43 | UIContainer checkBoxContainer1_1 = UIContainerHorizontal
44 | .create(resources.getString("rpDirectAccessOutsideCondition.TITLE"),
45 | BorderType.LINE);
46 | checkBoxContainer1_1
47 | .addComponent(UIRadioButtonPanelVertical.create(spaceConnectionRule.rpDirectAccessOutsideCondition));
48 | checkBoxContainer1.addComponent(checkBoxContainer1_1);
49 |
50 | UIContainer checkBoxContainer1_2 = UIContainerHorizontal
51 | .create(resources.getString("rpTypeOfAccessOutsideCondition.TITLE"),
52 | BorderType.LINE);
53 | checkBoxContainer1_2
54 | .addComponent(UIRadioButtonPanelVertical.create(spaceConnectionRule.rpTypeOfAccessOutsideCondition));
55 | checkBoxContainer1.addComponent(checkBoxContainer1_2);
56 |
57 | UIContainer checkBoxContainer2 = UIContainerVertical
58 | .create(resources.getString("UI.SpaceConnectionRequirements.TITLE"),
59 | BorderType.LINE);
60 | UIContainer checkBoxContainer2_1 = UIContainerHorizontal
61 | .create(resources.getString("rpDirectAccessCondition.TITLE"),
62 | BorderType.LINE);
63 | checkBoxContainer2_1
64 | .addComponent(UIRadioButtonPanelVertical.create(spaceConnectionRule.rpDirectAccessCondition));
65 | checkBoxContainer2.addComponent(checkBoxContainer2_1);
66 |
67 | UIContainer checkBoxContainer2_2 = UIContainerHorizontal
68 | .create(resources.getString("rpTypeOfAccessCondition.TITLE"),
69 | BorderType.LINE);
70 | checkBoxContainer2_2
71 | .addComponent(UIRadioButtonPanelVertical.create(spaceConnectionRule.rpTypeOfAccessCondition));
72 | checkBoxContainer2.addComponent(checkBoxContainer2_2);
73 |
74 | outsideContainer.addComponent(UIRuleParameter.create(spaceConnectionRule.rpSpacesFilterA));
75 | outsideContainer.addComponent(checkBoxContainer1);
76 | spaceToSpaceContainer.addComponent(UIRuleParameter.create(spaceConnectionRule.rpSpacesFilterB));
77 | spaceToSpaceContainer.addComponent(checkBoxContainer2);
78 |
79 | rootContainer.addComponent(outsideContainer);
80 | rootContainer.addComponent(spaceToSpaceContainer);
81 |
82 | return rootContainer;
83 | }
84 |
85 | }
86 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ClashDetectionRule.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Clash Detection Rule
2 | DEFAULT_DESCRIPTION=This rule detects the clash between filtered components.
3 | AUTHOR=Solibri, Inc.
4 | AUTHOR_TAG=SOL
5 | UID=EX4
6 | VERSION=1.0
7 | DATE=2018-12-17
8 |
9 | rpComponentFilter.NAME=Source Components
10 | rpComponentFilter.DESCRIPTION=This filter specifies the set of components to check.
11 |
12 | rpComponentFilter2.NAME=Target Components
13 | rpComponentFilter.DESCRIPTION=This filter specifies the set of components to check.
14 |
15 | rpAllowedTolerance.NAME=Allowed Tolerance
16 | rpAllowedTolerance.DESCRIPTION=Allowed tolerance before components clash. Represented as volume in cubic meters.
17 | rpAllowedTolerance.DEFAULT_VALUE=0.01
18 |
19 | UI.ClashDetectionRule.TITLE=Clash Detection Rule
20 | UI.ClashDetectionRule.DESCRIPTION=This rule detects the clash between filtered components.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ClashDetectionRule_de.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Kollisionserkennungsregel
2 | DEFAULT_DESCRIPTION=Diese Regel erkennt Kollisionen der gefilterten Komponenten.
3 |
4 | rpComponentFilter.NAME=Quellkomponenten
5 | rpComponentFilter.DESCRIPTION=Dieser Filter legt die zu überprüfenden Komponenten fest.
6 |
7 | rpComponentFilter2.NAME=Zielkomponenten
8 |
9 | rpAllowedTolerance.NAME=Zulässige Toleranz
10 | rpAllowedTolerance.DESCRIPTION=Zulässige Toleranz, bevor eine Kollision der Komponenten auftritt. Dargestellt als Volumen in Kubikmetern.
11 |
12 | UI.ClashDetectionRule.TITLE=Kollisionserkennungsregel
13 | UI.ClashDetectionRule.DESCRIPTION=Diese Regel erkennt Kollisionen der gefilterten Komponenten.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ClashDetectionRule_fi.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Törmäysten havaitsemissääntö
2 | DEFAULT_DESCRIPTION=Tämä sääntö havaitsee suodatettujen komponenttien välisen törmäyksen.
3 |
4 | rpComponentFilter.NAME=Lähtökomponentti
5 | rpComponentFilter.DESCRIPTION=Tämä suodatin määrittää tarkastettavat komponentit.
6 |
7 | rpComponentFilter2.NAME=Kohdekomponentit
8 |
9 | rpAllowedTolerance.NAME=Sallittu toleranssi
10 | rpAllowedTolerance.DESCRIPTION=Sallittu toleranssi ennen komponenttien törmäystä. Esitetty tilavuutena kuutiometreinä.
11 |
12 | UI.ClashDetectionRule.TITLE=Törmäysten havaitsemissääntö
13 | UI.ClashDetectionRule.DESCRIPTION=Tämä sääntö havaitsee suodatettujen komponenttien välisen törmäyksen.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ClashDetectionRule_fr.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Règle de détection de collision
2 | DEFAULT_DESCRIPTION=Cette règle détecte la collision entre des composants filtrés.
3 |
4 | rpComponentFilter.NAME=Composants sources
5 | rpComponentFilter.DESCRIPTION=Ce filtre spécifie l'ensemble de composants à vérifier.
6 |
7 | rpComponentFilter2.NAME=Composants cibles
8 |
9 | rpAllowedTolerance.NAME=Tolérance admise
10 | rpAllowedTolerance.DESCRIPTION=Tolérance admise avant la collision des composants. Représentée sous forme de volume exprimé en mètres cubes.
11 |
12 | UI.ClashDetectionRule.TITLE=Règle de détection de collision
13 | UI.ClashDetectionRule.DESCRIPTION=Cette règle détecte la collision entre des composants filtrés.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ClashDetectionRule_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=干渉検出ルール
2 | DEFAULT_DESCRIPTION=このルールはフィルタされたコンポーネント間の衝突を検出します。
3 |
4 | rpComponentFilter.NAME=ソースコンポーネント
5 | rpComponentFilter.DESCRIPTION=このフィルタは確認するコンポーネントのセットを指定します。
6 |
7 | rpComponentFilter2.NAME=ターゲットコンポーネント
8 |
9 | rpAllowedTolerance.NAME=許容限度
10 | rpAllowedTolerance.DESCRIPTION=コンポーネントが衝突するまでの許容限度。立方メートルで表されます。
11 |
12 | UI.ClashDetectionRule.TITLE=干渉検出ルール
13 | UI.ClashDetectionRule.DESCRIPTION=このルールはフィルタされたコンポーネント間の衝突を検出します。
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ClashDetectionRule_pt.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ClashDetectionRule_ru.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Общее правило проверки пересечений
2 | DEFAULT_DESCRIPTION=Это правило проверяет пересечения (коллизии) компонентов. Необходимо настроить, какие компоненты проверяет правило и каким образом определяются пересечения (коллизии).
3 |
4 | rpComponentFilter.NAME=Исходные компоненты
5 | rpComponentFilter.DESCRIPTION=Этот фильтр определяет набор компонентов для проверки.
6 |
7 | rpComponentFilter2.NAME=Целевые компоненты
8 |
9 | rpAllowedTolerance.NAME=Допуск по объёму пересечения
10 | rpAllowedTolerance.DESCRIPTION=Допуск по объёму пересечения. Значение представлено в м3.
11 |
12 | UI.ClashDetectionRule.TITLE=Общее правило проверки пересечений
13 | UI.ClashDetectionRule.DESCRIPTION=Это правило проверяет пересечения (коллизии) компонентов. Необходимо настроить, какие компоненты проверяет правило и каким образом определяются пересечения (коллизии).
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ComponentHeightRule.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Component Height Rule
2 | DEFAULT_DESCRIPTION=This rule checks the components' height.
3 | AUTHOR=Solibri, Inc.
4 | AUTHOR_TAG=SOL
5 | UID=EX1s
6 | VERSION=1.0
7 | DATE=2018-08-23
8 |
9 | rpComponentFilter.NAME = Components to Check
10 | rpComponentFilter.DESCRIPTION = This filter specifies the set of components to check.
11 |
12 | rpMaxHeight.NAME = Maximum allowed height
13 | rpMaxHeight.DESCRIPTION = Defines the maximum allowed height for each component.
14 | rpMaxHeight.DEFAULT_VALUE = 0.0
15 |
16 | rpResultName.NAME = Result name
17 | rpResultName.DESCRIPTION = The name of the result.
18 | rpResultName.DEFAULT_VALUE = Result name
19 |
20 | rpResultDescription.NAME = Result description
21 | rpResultDescription.DESCRIPTION = The description of the result.
22 | rpResultDescription.DEFAULT_VALUE = Result description
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ComponentHeightRule_de.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Regel für Komponentenhöhe
2 | DEFAULT_DESCRIPTION=Diese Regel überprüft die Höhe der Komponenten.
3 |
4 | rpComponentFilter.NAME = Zu überprüfende Komponenten
5 | rpComponentFilter.DESCRIPTION = Dieser Filter legt die zu überprüfenden Komponenten fest.
6 |
7 | rpMaxHeight.NAME = Maximale zulässige Höhe
8 | rpMaxHeight.DESCRIPTION = Legt die maximal zulässige Höhe für jede Komponente fest.
9 |
10 | rpResultName.NAME = Ergebnisname
11 | rpResultName.DESCRIPTION = Der Name des Ergebnisses.
12 | rpResultName.DEFAULT_VALUE = Ergebnisname
13 |
14 | rpResultDescription.NAME = Ergebnisbeschreibung
15 | rpResultDescription.DESCRIPTION = Die Beschreibung des Ergebnisses.
16 | rpResultDescription.DEFAULT_VALUE = Ergebnisbeschreibung
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ComponentHeightRule_fi.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Komponentin korkeus -sääntö
2 | DEFAULT_DESCRIPTION=Tämä sääntö tarkastaa komponentin korkeutta.
3 | AUTHOR=Solibri Oy.
4 |
5 | rpComponentFilter.NAME = Tarkastettavat komponentit
6 | rpComponentFilter.DESCRIPTION = Tämä suodatin määrittelee tarkastettavat komponentit.
7 |
8 | rpMaxHeight.NAME = Suurin sallittu korkeus
9 | rpMaxHeight.DESCRIPTION = Määrittää komponentin suurimman sallitun korkeuden.
10 |
11 | rpResultName.NAME = Tuloksen nimi
12 | rpResultName.DESCRIPTION = Tuloksen nimi
13 | rpResultName.DEFAULT_VALUE = Tuloksen nimi
14 |
15 | rpResultDescription.NAME = Tuloksen kuvaus
16 | rpResultDescription.DESCRIPTION = Tuloksen kuvaus
17 | rpResultDescription.DEFAULT_VALUE = Tuloksen kuvaus
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ComponentHeightRule_fr.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=ComponentHeightRule
2 | DEFAULT_DESCRIPTION=Cette règle vérifie la hauteur des composants.
3 |
4 | rpComponentFilter.NAME = Composants à vérifier
5 | rpComponentFilter.DESCRIPTION = Ce filtre définit l’ensemble de composants à vérifier.
6 |
7 | rpMaxHeight.NAME = Hauteur maximum autorisée
8 | rpMaxHeight.DESCRIPTION = Définit la hauteur maximum autorisée pour chaque composant.
9 |
10 | rpResultName.NAME = Nom du résultat
11 | rpResultName.DESCRIPTION = Le nom du résultat.
12 | rpResultName.DEFAULT_VALUE = Nom du résultat
13 |
14 | rpResultDescription.NAME = Description du résultat
15 | rpResultDescription.DESCRIPTION = La description du résultat.
16 | rpResultDescription.DEFAULT_VALUE = Description du résultat
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ComponentHeightRule_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=コンポーネントの高さルール
2 | DEFAULT_DESCRIPTION=このルールはコンポーネントの高さをチェックします。
3 |
4 | rpComponentFilter.NAME = チェック対象のコンポーネント
5 | rpComponentFilter.DESCRIPTION = このフィルタは、チェック対象のコンポーネントセットを設定します。
6 |
7 | rpMaxHeight.NAME = 最大許容高さ
8 | rpMaxHeight.DESCRIPTION = コンポーネントごとの最大許容高さを定義します。
9 |
10 | rpResultName.NAME = 結果の名前
11 | rpResultName.DESCRIPTION = 結果の名前です。
12 | rpResultName.DEFAULT_VALUE = 結果の名前
13 |
14 | rpResultDescription.NAME = 結果の説明
15 | rpResultDescription.DESCRIPTION = 結果の説明です。
16 | rpResultDescription.DEFAULT_VALUE = 結果の説明
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ComponentHeightRule_pt.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/ComponentHeightRule_ru.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Высота компонентов
2 | DEFAULT_DESCRIPTION=Это правило проверяет, что высота выбранных компонентов не выше допустимых значений\n
3 |
4 | rpComponentFilter.NAME = Компоненты для проверки
5 | rpComponentFilter.DESCRIPTION = Этот фильтр определяет набор компонентов для проверки.
6 |
7 | rpMaxHeight.NAME = Максимальная допустимая высота
8 | rpMaxHeight.DESCRIPTION = Определяет максимально допустимую высоту для каждого компонента.
9 |
10 | rpResultName.NAME = Название результата
11 | rpResultName.DESCRIPTION = Отображаемое Название для результата проверки.
12 | rpResultName.DEFAULT_VALUE = Название результата
13 |
14 | rpResultDescription.NAME = Описание результата
15 | rpResultDescription.DESCRIPTION = Описание результата проверки.
16 | rpResultDescription.DEFAULT_VALUE = Описание результата
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/DistanceVisualizationRule.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Maximum Distance Visualization Rule
2 | DEFAULT_DESCRIPTION=This rule visualizes the maximum distance between the components specified by the two filters.
3 | AUTHOR=Solibri, Inc.
4 | AUTHOR_TAG=SOL
5 | UID=EX3
6 | VERSION=1.0
7 | DATE=2018-12-13
8 |
9 | rpComponentFilter.NAME = Source Components
10 | rpComponentFilter.DESCRIPTION = This filter specifies the set of components to check.
11 |
12 | rpComponentFilter2.NAME = Target Components
13 | rpComponentFilter2.DESCRIPTION = This filter specifies the set of components to check.
14 |
15 | rpMaximumDistance.NAME = Maximum Distance
16 | rpMaximumDistance.DESCRIPTION = Maximum distance used to search the components near by.
17 | rpMaximumDistance.DEFAULT_VALUE=5m
18 |
19 | UI.DistanceVisualizationRule.TITLE = Distance Visualization Rule
20 | UI.DistanceVisualizationRule.DESCRIPTION = This rule visualizes the distance from the source components to the target components. The target components must be found near the sources.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/DistanceVisualizationRule_de.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Visualisierungsregel für maximalen Abstand
2 | DEFAULT_DESCRIPTION=Diese Regel visualisiert den maximalen Abstand zwischen den Komponenten, die von den beiden Filtern angegeben sind.
3 |
4 | rpComponentFilter.NAME = Quellkomponenten
5 | rpComponentFilter.DESCRIPTION = Dieser Filter legt die zu überprüfenden Komponenten fest.
6 |
7 | rpComponentFilter2.NAME = Zielkomponenten
8 | rpComponentFilter2.DESCRIPTION = Dieser Filter legt die zu überprüfenden Komponenten fest.
9 |
10 | rpMaximumDistance.NAME = Maximaler Abstand
11 | rpMaximumDistance.DESCRIPTION = Maximaler Abstand zum Suchen von Komponenten in der Nähe.
12 |
13 | UI.DistanceVisualizationRule.TITLE = Visualisierungsregel für Abstand
14 | UI.DistanceVisualizationRule.DESCRIPTION = Diese Regel visualisiert den Abstand zwischen Quell- und Zielkomponenten. Die Zielkomponenten müssen sich in der Nähe der Quellkomponenten befinden.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/DistanceVisualizationRule_fi.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Suurimman etäisyyden visualisointisääntö
2 | DEFAULT_DESCRIPTION=Tämä sääntö visualisoi kahden suodattimen määrittämien komponenttien välisen enimmäisetäisyyden.
3 |
4 | rpComponentFilter.NAME = Lähdekomponentit
5 | rpComponentFilter.DESCRIPTION = Tämä suodatin määrittää tarkistettavien komponenttien joukon.
6 |
7 | rpComponentFilter2.NAME = Kohdekomponentit
8 | rpComponentFilter2.DESCRIPTION = Tämä suodatin määrittää tarkistettavien komponenttien joukon.
9 |
10 | rpMaximumDistance.NAME = Suurin etäisyys
11 | rpMaximumDistance.DESCRIPTION = Suurin etäisyys, jota käytetään lähellä olevien komponenttien etsimiseen.
12 |
13 | UI.DistanceVisualizationRule.TITLE = Etäisyyden visualisoinnin sääntö
14 | UI.DistanceVisualizationRule.DESCRIPTION = Tämä sääntö visualisoi etäisyyden lähdekomponenteista kohdekomponentteihin. Kohdekomponentit on löydettävä lähteiden läheltä.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/DistanceVisualizationRule_fr.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Règle de visualisation de distance maximale
2 | DEFAULT_DESCRIPTION=Cette règle visualise la distance maximale entre les composants spécifiés par les deux filtres.
3 |
4 | rpComponentFilter.NAME = Composants sources
5 | rpComponentFilter.DESCRIPTION = Ce filtre spécifie l'ensemble de composants à vérifier.
6 |
7 | rpComponentFilter2.NAME = Composants cibles
8 | rpComponentFilter2.DESCRIPTION = Ce filtre spécifie l'ensemble de composants à vérifier.
9 |
10 | rpMaximumDistance.NAME = Distance maximale
11 | rpMaximumDistance.DESCRIPTION = Distance maximale utilisée pour rechercher les composants à proximité.
12 |
13 | UI.DistanceVisualizationRule.TITLE = Règle de visualisation de la distance
14 | UI.DistanceVisualizationRule.DESCRIPTION = Cette règle visualise la distance entre les composants sources et les composants cibles. Les composants cibles doivent se trouver à proximité des sources.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/DistanceVisualizationRule_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=最大距離表示ルール
2 | DEFAULT_DESCRIPTION=このルールは2つのフィルタで指定されたコンポーネント間の最大距離を表示します。
3 |
4 | rpComponentFilter.NAME = ソースコンポーネント
5 | rpComponentFilter.DESCRIPTION = このフィルタは確認するコンポーネントのセットを指定します。
6 |
7 | rpComponentFilter2.NAME = ターゲットコンポーネント
8 | rpComponentFilter2.DESCRIPTION = このフィルタは確認するコンポーネントのセットを指定します。
9 |
10 | rpMaximumDistance.NAME = 最大距離
11 | rpMaximumDistance.DESCRIPTION = 近くにあるコンポーネントの検索に使用される最大距離。
12 |
13 | UI.DistanceVisualizationRule.TITLE = 距離表示ルール
14 | UI.DistanceVisualizationRule.DESCRIPTION = このルールはソースコンポーネントからターゲットコンポーネントまでの距離を表示します。ターゲットコンポーネントはソースの近くにある必要があります。
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/DistanceVisualizationRule_pt.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/DistanceVisualizationRule_ru.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Визуализация максимального расстояния
2 | DEFAULT_DESCRIPTION=Это правило визуализирует максимальное расстояние между компонентами, определённым двумя фильтрами.
3 |
4 | rpComponentFilter.NAME = Исходные компоненты
5 | rpComponentFilter.DESCRIPTION = Этот фильтр определяет набор компонентов для проверки.
6 |
7 | rpComponentFilter2.NAME = Целевые компоненты
8 | rpComponentFilter2.DESCRIPTION = Этот фильтр определяет набор компонентов для проверки.
9 |
10 | rpMaximumDistance.NAME = Максимальное расстояние
11 | rpMaximumDistance.DESCRIPTION = Максимальное расстояние, используемое для поиска компонентов рядом с исходным компонентом.
12 | rpMaximumDistance.DEFAULT_VALUE=5м
13 |
14 | UI.DistanceVisualizationRule.TITLE = Визуализация расстояния
15 | UI.DistanceVisualizationRule.DESCRIPTION = Это правило визуализирует расстояние от исходных компонентов до целевых компонентов. Целевые компоненты должны быть не дальше определённого расстояния от источника.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/HeatmapVisualizationRule.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Heatmap Visualization Rule
2 | DEFAULT_DESCRIPTION=This rule visualizes the heatmap area from the effect sources that are in range from the checked components. The heatmap area is visualized only on the area of the checked components. The heatmap area is visualized by steps from each effect source. User will define the checked components and the effect sources. User will also set the range and the step length values of the heatmap.
3 | AUTHOR=Solibri, Inc.
4 | AUTHOR_TAG=SOL
5 | UID=EX2
6 | VERSION=1.0
7 | DATE=2018-12-12
8 |
9 | UI.HeatmapVisualizationRule.TITLE = Heatmap Visualization Rule
10 | UI.HeatmapVisualizationRule.DESCRIPTION = This rule visualizes the heatmap area from the effect sources
that are in range from the checked components. The heatmap area
is visualized only on the area of the checked components.
11 |
12 | rpComponentFilter.NAME = Checked Components
13 | rpComponentFilter.DESCRIPTION = Checked Components where the heatmap of the effect source is visualized.
14 |
15 | rpEffectSourceFilter.NAME = Effect Sources
16 | rpEffectSourceFilter.DESCRIPTION = Effect Sources.
17 |
18 | UI.HeatmapVisualizationParameter.TITLE = Visualization
19 | UI.HeatmapVisualizationParameter.DESCRIPTION = These parameters specifies the range and the step length of the visualized effect.
20 |
21 | rpRange.NAME = Effect Range (A)
22 | rpRange.DESCRIPTION = This defines the range of the visualized effect from the source.
23 | rpRange.DEFAULT_VALUE = 3m
24 |
25 | rpStep.NAME = Effect Step Length (B)
26 | rpStep.DESCRIPTION = This defines the step length of the visualized effect from the source.
27 | rpStep.DEFAULT_VALUE = 0.5m
28 |
29 | resultDescription = Found {0} component(s) in range:
30 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/HeatmapVisualizationRule_de.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Heatmap-Visualisierungsregel
2 | DEFAULT_DESCRIPTION=Diese Regel visualisiert den Heatmap-Bereich der Effektquellen, die sich im Bereich der überprüften Komponenten befinden. Der Heatmap-Bereich wird nur im Bereich der überprüften Komponenten visualisiert. Der Heatmap-Bereich wird in Schritten von jeder Effektquelle visualisiert. Die überprüften Komponenten und die Effektquellen werden durch den Benutzer festgelegt. Zudem stellt der Benutzer den Bereich und die Schrittlängenwerte der Heatmap ein.
3 |
4 | UI.HeatmapVisualizationRule.TITLE = Heatmap-Visualisierungsregel
5 | UI.HeatmapVisualizationRule.DESCRIPTION = Diese Regel visualisiert den Heatmap-Bereich der Effektquellen,
die sich im Bereich der überprüften Komponenten befinden. Der Heatmap-Bereich
wird nur im Bereich der überprüften Komponenten visualisiert.
6 |
7 | rpComponentFilter.NAME = Überprüfte Komponenten
8 | rpComponentFilter.DESCRIPTION = Überprüfte Komponenten, bei denen die Heatmap der Effektquelle visualisiert wird.
9 |
10 | rpEffectSourceFilter.NAME = Effektquellen
11 | rpEffectSourceFilter.DESCRIPTION = Effektquellen.
12 |
13 | UI.HeatmapVisualizationParameter.TITLE = Visualisierung
14 | UI.HeatmapVisualizationParameter.DESCRIPTION = Diese Parameter legen den Bereich und die Schrittweite des visualisierten Effekts fest.
15 |
16 | rpRange.NAME = Effektbereich (A)
17 | rpRange.DESCRIPTION = Hiermit wird der Bereich des visualisierten Effekts von der Quelle definiert.
18 |
19 | rpStep.NAME = Effektschrittlänge (B)
20 | rpStep.DESCRIPTION = Hiermit wird die Schrittlänge des visualisierten Effekts von der Quelle definiert.
21 |
22 | resultDescription = {0} Komponente(n) gefunden im Bereich\:
23 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/HeatmapVisualizationRule_fi.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Vaikutusalueen kantavuuden Visualisointi Sääntö
2 | DEFAULT_DESCRIPTION=Tämä sääntö visualisoi tarkasteltavien komponenttien kantavuusalueella olevien lähteiden efektin vaikutusalueen kattavuutta. Vaikutusalueen kantavuus visualisoidaan vain tarkasteltavissa komponenteissa. Vaikutusalueen kantavuus kustakin lähteestä visualisoidaan askelmilla. Käyttäjä määrittelee tarkasteltavat komponentit sekä efektien lähteet. Käyttäjä asettaa myös vaikutusalueen kantavuuden sekä askelman pituuden arvot.
3 |
4 | UI.HeatmapVisualizationRule.TITLE = Vaikutusalueen kantavuuden visualisointi sääntö
5 | UI.HeatmapVisualizationRule.DESCRIPTION = Tämä sääntö visualisoi tarkasteltavien komponenttien kantavuusalueella
olevien lähteiden efektin vaikutusalueen kattavuutta. Vaikutusalueen
kantavuus visualisoidaan vain tarkasteltavissa komponenteissa.
6 |
7 | rpComponentFilter.NAME = Tarkasteltavat komponentit
8 | rpComponentFilter.DESCRIPTION = Tarkasteltavat komponentit joissa lähteiden vaikutusalueen kantavuutta visualisoidaan.
9 |
10 | rpEffectSourceFilter.NAME = Efektien lähteet
11 | rpEffectSourceFilter.DESCRIPTION = Efektien lähteet.
12 |
13 | UI.HeatmapVisualizationParameter.TITLE = Visualisointi
14 | UI.HeatmapVisualizationParameter.DESCRIPTION = Nämä parametrit määrittelevät vaikutusalueen etäisyyden ja askelmien pituuden.
15 |
16 | rpRange.NAME = Efektin kantavuus (A)
17 | rpRange.DESCRIPTION = Tämä määrittelee visualisoitavan efektin kantavuuden lähteestä.
18 |
19 | rpStep.NAME = Efektin askelman pituus (B)
20 | rpStep.DESCRIPTION = Tämä määrittelee visualisoitavan efektin askelman pituuden lähteestä.
21 |
22 | resultDescription = Löytyi {0} komponentti(a) valitulla kantamalla\:
23 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/HeatmapVisualizationRule_fr.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Règle de visualisation de carte de chaleur
2 | DEFAULT_DESCRIPTION=Cette règle visualise la zone de la carte de chaleur à partir des sources d'effet qui sont à portée des composants vérifiés. La zone de la carte de chaleur est uniquement visualisée sur la zone des composants vérifiés. La zone de la carte de chaleur est représentée par des pas à partir de chaque source d'effet. L'utilisateur définira les composants vérifiés et les sources d'effet. L'utilisateur définira également la portée et la longueur des pas de la carte de chaleur.
3 |
4 | UI.HeatmapVisualizationRule.TITLE = Règle de visualisation de carte de chaleur
5 | UI.HeatmapVisualizationRule.DESCRIPTION = Cette règle visualise la zone de la carte de chaleur à partir des sources d'effet
qui sont à portée des composants vérifiés. La zone de la carte de chaleur
est uniquement visualisée sur la zone des composants vérifiés.
6 |
7 | rpComponentFilter.NAME = Composants vérifiés
8 | rpComponentFilter.DESCRIPTION = Composants vérifiés sur lesquels la carte de chaleur de la source d'effet est visualisée.
9 |
10 | rpEffectSourceFilter.NAME = Sources d'effet
11 | rpEffectSourceFilter.DESCRIPTION = Sources d'effet.
12 |
13 | UI.HeatmapVisualizationParameter.TITLE = Visualisation
14 | UI.HeatmapVisualizationParameter.DESCRIPTION = Ce paramètre spécifie la portée et la longueur des pas de l'effet visualisé.
15 |
16 | rpRange.NAME = Portée de l'effet (A)
17 | rpRange.DESCRIPTION = Ce paramètre définit la portée de l'effet visualisé à partir de la source.
18 |
19 | rpStep.NAME = Longueur des pas de l'effet (B)
20 | rpStep.DESCRIPTION = Ce paramètre définit la longueur des pas de l'effet visualisé à partir de la source.
21 |
22 | resultDescription = {0} composant(s) à portée trouvé(s) \:
23 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/HeatmapVisualizationRule_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=ヒートマップ表示ルール
2 | DEFAULT_DESCRIPTION=このルールは、確認済みのコンポーネントからの範囲内にある効果ソースからのヒートマップ領域を表示します。ヒートマップ領域は確認済みのコンポーネントの領域上にのみ表示されます。ヒートマップ領域は、各効果ソースからのステップによって表されます。確認するコンポーネントと効果ソースはユーザーが定義できます。また、ヒートマップの範囲とステップ長の値もユーザーが設定できます。
3 |
4 | UI.HeatmapVisualizationRule.TITLE = ヒートマップ表示ルール
5 | UI.HeatmapVisualizationRule.DESCRIPTION = このルールは、確認済みのコンポーネントからの範囲内にある効果ソースからの
ヒートマップ領域を表示します。ヒートマップ領域は確認済みのコンポーネントの
領域上にのみ表示されます。
6 |
7 | rpComponentFilter.NAME = 確認済みのコンポーネント
8 | rpComponentFilter.DESCRIPTION = 効果ソースのヒートマップが表示される確認済みのコンポーネント。
9 |
10 | rpEffectSourceFilter.NAME = 効果ソース
11 | rpEffectSourceFilter.DESCRIPTION = 効果ソース。
12 |
13 | UI.HeatmapVisualizationParameter.TITLE = 表示
14 | UI.HeatmapVisualizationParameter.DESCRIPTION = これらのパラメータは、表示される効果の範囲とステップ長を指定します。
15 |
16 | rpRange.NAME = 効果の範囲(A)
17 | rpRange.DESCRIPTION = ソースから表示される効果の範囲を定義します。
18 |
19 | rpStep.NAME = 効果のステップ長(B)
20 | rpStep.DESCRIPTION = ソースから表示される効果のステップ長を定義します。
21 |
22 | resultDescription = 範囲内に{0}個のコンポーネントがあります:
23 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/HeatmapVisualizationRule_pt.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/HeatmapVisualizationRule_ru.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Визуализация тепловой карты
2 | DEFAULT_DESCRIPTION=Это правило отображает "тепловую" карту (изменение цвета карты в зависимости от расстояния) от "источников эффекта", которые находятся в указанном диапазоне от проверяемых компонентов. Область тепловой карты отображается только в области (горизонтальной проекции) компонентов, попадающих в проверку. Область тепловой карты визуализируется с шагом от каждого источника эффекта. Необходимо указать проверяемые компоненты и "источники эффекта". Также необходимо установить диапазон и значение шага изменения оттенка "тепловой" карты.
3 |
4 | UI.HeatmapVisualizationRule.TITLE = Визуализация тепловой карты
5 | UI.HeatmapVisualizationRule.DESCRIPTION = Это правило отображает "тепловую" карту (изменение цвета карты в зависимости от расстояния) от "источников эффекта",
которые находятся в указанном диапазоне от проверяемых компонентов. Область тепловой карты
отображается только в области (горизонтальной проекции) компонентов, попадающих в проверку.
6 |
7 | rpComponentFilter.NAME = Проверяемые компоненты
8 | rpComponentFilter.DESCRIPTION = Проверяемые компоненты, в проекции которых отображается тепловая карта.
9 |
10 | rpEffectSourceFilter.NAME = Источники эффекта
11 | rpEffectSourceFilter.DESCRIPTION = "Источники эффекта".
12 |
13 | UI.HeatmapVisualizationParameter.TITLE = Отображение
14 | UI.HeatmapVisualizationParameter.DESCRIPTION = Эти параметры определяют диапазон и шаг отображения тепловой карты.
15 |
16 | rpRange.NAME = Диапазон (A)
17 | rpRange.DESCRIPTION = Определяет диапазон от источника (включает в карту компоненты, которые попадают в данный диапазон).
18 | rpRange.DEFAULT_VALUE = 3м
19 |
20 | rpStep.NAME = Шаг (B)
21 | rpStep.DESCRIPTION = Определяет шаг изменения цвета тепловой карты при удалении от источника.
22 | rpStep.DEFAULT_VALUE = 0.5м
23 |
24 | resultDescription = Найдено компонентов\: {0} в диапазоне\:
25 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/UIComponentExample.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=UI Component Example
2 | DEFAULT_DESCRIPTION=This rule displays different types of parameter UI components
3 | AUTHOR=Solibri, Inc.
4 | AUTHOR_TAG=SOL
5 | UID=EX5
6 | VERSION=1.1
7 | DATE=2023-01-12
8 |
9 | uiMainContainer.TITLE = Main Container
10 | uiFilterContainer.TITLE = Filter Container
11 |
12 | rpComponentFilter.NAME = Components to Check
13 | rpComponentFilter.DESCRIPTION = This filter specifies the set of components to check.
14 |
15 | uiParameterContainer.TITLE = Parameter Container
16 |
17 | rpDoubleParameter.NAME = Double parameter
18 | rpDoubleParameter.DESCRIPTION = Double parameter tooltip
19 | rpDoubleParameter.DEFAULT_VALUE = 0
20 |
21 | rpBooleanParameter.NAME = Boolean parameter
22 | rpBooleanParameter.DESCRIPTION = Boolean parameter tooltip
23 | rpBooleanParameter.DEFAULT_VALUE = false
24 |
25 | rpPropertyReferenceParameter.NAME = Property reference parameter
26 | rpPropertyReferenceParameter.DESCRIPTION = Property reference parameter tooltip
27 |
28 | uiParameterContainerImage = images/image.png
29 |
30 | uiRadioButtonContainer.TITLE = Radio Button Container
31 | uiRadioButtonContainer.LABEL = This is a text label
32 |
33 | rpEnumerationParameterForRadioButtons.NAME = Radio button
34 | rpEnumerationParameterForRadioButtons.DESCRIPTION = Radio button tooltip
35 | rpEnumerationParameterForRadioButtons.DEFAULT_VALUE = 2
36 | rpEnumerationParameterForRadioButtons.OPTION1 = Option 1
37 | rpEnumerationParameterForRadioButtons.OPTION2 = Option 2
38 | rpEnumerationParameterForRadioButtons.OPTION3 = Option 3
39 |
40 | rpEnumerationParameterForComboBox.NAME = Combo box parameter
41 | rpEnumerationParameterForComboBox.DESCRIPTION = Combo box parameter tooltip
42 | rpEnumerationParameterForComboBox.DEFAULT_VALUE = 2
43 | rpEnumerationParameterForComboBox.OPTION1 = Option 1
44 | rpEnumerationParameterForComboBox.OPTION2 = Option 2
45 | rpEnumerationParameterForComboBox.OPTION3 = Option 3
46 |
47 | rpEnumerationParameterForRadioButtons.IMAGE1 = images/radio_button_1.png
48 | rpEnumerationParameterForRadioButtons.IMAGE2 = images/radio_button_2.png
49 | rpEnumerationParameterForRadioButtons.IMAGE3 = images/radio_button_3.png
50 |
51 | # We can define multiple default values for the table parameter.
52 | # rpTableParameter.DEFAULT_VALUE first lists all the properties that define the rows
53 | # and then the row parameters define the values in them.
54 | rpTableParameter.DEFAULT_VALUE = rpTableParameter.DEFAULT_VALUE_ROW1,rpTableParameter.DEFAULT_VALUE_ROW2
55 | rpTableParameter.DEFAULT_VALUE_ROW1 = 1,2
56 | rpTableParameter.DEFAULT_VALUE_ROW2 = 300,400
57 |
58 | CommitButton.NAME = Commit Changes
59 | customStringContainer.TITLE = Custom Parameter UI
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/UIComponentExample_de.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Beispiel für eine UI-Komponente
2 | DEFAULT_DESCRIPTION=Diese Regel zeigt verschiedene Arten von Parameter-UI-Komponenten
3 |
4 | uiMainContainer.TITLE = Hauptcontainer
5 | uiFilterContainer.TITLE = Filtercontainer
6 |
7 | rpComponentFilter.NAME = Zu überprüfende Komponenten
8 | rpComponentFilter.DESCRIPTION = Dieser Filter legt die zu überprüfenden Komponenten fest.
9 |
10 | uiParameterContainer.TITLE = Parametercontainer
11 |
12 | rpDoubleParameter.NAME = Double-Parameter
13 | rpDoubleParameter.DESCRIPTION = Tooltip für Double-Parameter
14 |
15 | rpBooleanParameter.NAME = Boolescher Parameter
16 | rpBooleanParameter.DESCRIPTION = Tooltip für booleschen Parameter
17 |
18 | rpPropertyReferenceParameter.NAME = Parameter für Eigenschaftsreferenz
19 | rpPropertyReferenceParameter.DESCRIPTION = Tooltip für Parameter für Eigenschaftsreferenz
20 |
21 |
22 | uiRadioButtonContainer.TITLE = Optionsschaltflächen-Container
23 | uiRadioButtonContainer.LABEL = Dies ist eine Textbezeichnung
24 |
25 | rpEnumerationParameterForRadioButtons.NAME = Optionsschaltfläche
26 | rpEnumerationParameterForRadioButtons.DESCRIPTION = Tooltip für Optionsschaltfläche
27 |
28 |
29 |
30 | # We can define multiple default values for the table parameter.
31 | # rpTableParameter.DEFAULT_VALUE first lists all the properties that define the rows
32 | # and then the row parameters define the values in them.
33 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/UIComponentExample_fi.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Esimerkki käyttöliittymäkomponentista
2 | DEFAULT_DESCRIPTION=Tämä sääntö näyttää erityyppiset parametrikäyttöliittymäkomponentit
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | # We can define multiple default values for the table parameter.
16 | # rpTableParameter.DEFAULT_VALUE first lists all the properties that define the rows
17 | # and then the row parameters define the values in them.
18 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/UIComponentExample_fr.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Exemple de composant d'IU
2 | DEFAULT_DESCRIPTION=Cette règle affiche différents types de composants d'IU de paramètre
3 |
4 | uiMainContainer.TITLE = Conteneur principal
5 | uiFilterContainer.TITLE = Conteneur de fichiers
6 |
7 | rpComponentFilter.NAME = Composants à vérifier
8 | rpComponentFilter.DESCRIPTION = Ce filtre spécifie l'ensemble de composants à vérifier.
9 |
10 | uiParameterContainer.TITLE = Conteneur de paramètres
11 |
12 | rpDoubleParameter.NAME = Double paramètre
13 | rpDoubleParameter.DESCRIPTION = Infobulle sur le double paramètre
14 |
15 | rpBooleanParameter.NAME = Paramètre Booléen
16 | rpBooleanParameter.DESCRIPTION = Infobulle sur le paramètre Booléen
17 |
18 | rpPropertyReferenceParameter.NAME = Paramètre de référence de propriété
19 | rpPropertyReferenceParameter.DESCRIPTION = Infobulle sur le paramètre de référence de propriété
20 |
21 |
22 | uiRadioButtonContainer.TITLE = Conteneur de boutons radio
23 | uiRadioButtonContainer.LABEL = C'est un libellé de texte
24 |
25 | rpEnumerationParameterForRadioButtons.NAME = Bouton radio
26 | rpEnumerationParameterForRadioButtons.DESCRIPTION = Infobulle sur les boutons radio
27 |
28 |
29 |
30 | # We can define multiple default values for the table parameter.
31 | # rpTableParameter.DEFAULT_VALUE first lists all the properties that define the rows
32 | # and then the row parameters define the values in them.
33 |
34 | CommitButton.NAME = Valider les Modifications
35 | customStringContainer.TITLE = Interface Utilisateur des Paramètres Personnalisés
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/UIComponentExample_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=UIコンポーネントの例
2 | DEFAULT_DESCRIPTION=このルールはさまざまなタイプのパラメータUIコンポーネントを表示します
3 |
4 | uiMainContainer.TITLE = メインコンテナ
5 | uiFilterContainer.TITLE = フィルタコンテナ
6 |
7 | rpComponentFilter.NAME = 確認するコンポーネント
8 | rpComponentFilter.DESCRIPTION = このフィルタは確認するコンポーネントのセットを指定します。
9 |
10 | uiParameterContainer.TITLE = パラメータコンテナ
11 |
12 | rpDoubleParameter.NAME = Double型パラメータ
13 | rpDoubleParameter.DESCRIPTION = Double型パラメータのツールチップ
14 |
15 | rpBooleanParameter.NAME = Boolean型パラメータ
16 | rpBooleanParameter.DESCRIPTION = Boolean型パラメータのツールチップ
17 |
18 | rpPropertyReferenceParameter.NAME = プロパティ参照パラメータ
19 | rpPropertyReferenceParameter.DESCRIPTION = プロパティ参照パラメータのツールチップ
20 |
21 |
22 | uiRadioButtonContainer.TITLE = ラジオボタンコンテナ
23 | uiRadioButtonContainer.LABEL = これはテキストラベルです
24 |
25 | rpEnumerationParameterForRadioButtons.NAME = ラジオボタン
26 | rpEnumerationParameterForRadioButtons.DESCRIPTION = ラジオボタンのツールチップ
27 | rpEnumerationParameterForRadioButtons.OPTION1 = オプション1
28 | rpEnumerationParameterForRadioButtons.OPTION2 = オプション2
29 | rpEnumerationParameterForRadioButtons.OPTION3 = オプション3
30 |
31 |
32 |
33 | # We can define multiple default values for the table parameter.
34 | # rpTableParameter.DEFAULT_VALUE first lists all the properties that define the rows
35 | # and then the row parameters define the values in them.
36 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/UIComponentExample_pt.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | # We can define multiple default values for the table parameter.
14 | # rpTableParameter.DEFAULT_VALUE first lists all the properties that define the rows
15 | # and then the row parameters define the values in them.
16 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/UIComponentExample_ru.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Пример пользовательского интерфейса для компонента
2 | DEFAULT_DESCRIPTION=Правило отображает различные типы параметров пользовательского интерфейса для компонента
3 |
4 | uiMainContainer.TITLE = Контейнер Основной
5 | uiFilterContainer.TITLE = Контейнер Фильтр (Filter Container)
6 |
7 | rpComponentFilter.NAME = Компоненты для проверки
8 | rpComponentFilter.DESCRIPTION = Этот фильтр определяет набор компонентов для проверки.
9 |
10 | uiParameterContainer.TITLE = Контейнер Параметр (Parameter Container)
11 |
12 | rpDoubleParameter.NAME = Параметр тип Double
13 | rpDoubleParameter.DESCRIPTION = Параметр тип Double описание
14 | rpDoubleParameter.DEFAULT_VALUE = 0
15 |
16 | rpBooleanParameter.NAME = Параметр Логический (Boolean)
17 | rpBooleanParameter.DESCRIPTION = Логический параметр описание
18 | rpBooleanParameter.DEFAULT_VALUE = ложь
19 |
20 | rpPropertyReferenceParameter.NAME = Ссылка на свойство
21 | rpPropertyReferenceParameter.DESCRIPTION = Ссылка на свойство описание
22 |
23 |
24 | uiRadioButtonContainer.TITLE = Контейнер Переключатель (Radio Button Container)
25 | uiRadioButtonContainer.LABEL = Это текстовая метка
26 |
27 | rpEnumerationParameterForRadioButtons.NAME = Переключатель (Radio button)
28 | rpEnumerationParameterForRadioButtons.DESCRIPTION = Переключатель (Radio button) описание
29 | rpEnumerationParameterForRadioButtons.OPTION1 = Выбор 1
30 | rpEnumerationParameterForRadioButtons.OPTION2 = Выбор 2
31 | rpEnumerationParameterForRadioButtons.OPTION3 = Выбор 3
32 |
33 | rpEnumerationParameterForComboBox.NAME = Параметр список (Combo box parameter)
34 | rpEnumerationParameterForComboBox.DESCRIPTION = Параметр список (Combo box parameter) описание
35 | rpEnumerationParameterForComboBox.OPTION1 = Выбор 1
36 | rpEnumerationParameterForComboBox.OPTION2 = Выбор 2
37 | rpEnumerationParameterForComboBox.OPTION3 = Выбор 3
38 |
39 |
40 | # We can define multiple default values for the table parameter.
41 | # rpTableParameter.DEFAULT_VALUE first lists all the properties that define the rows
42 | # and then the row parameters define the values in them.
43 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/heatmap_visualization_rule_parameters.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/heatmap_visualization_rule_parameters.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/images/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/images/image.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/images/radio_button_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/images/radio_button_1.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/images/radio_button_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/images/radio_button_2.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/images/radio_button_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/beginner/images/radio_button_3.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/1_unoccluded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/1_unoccluded.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/2_unoccluded_within_area.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/2_unoccluded_within_area.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/3_occluded_within_area.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/3_occluded_within_area.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/4_distance_of_travel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/4_distance_of_travel.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/EffectiveCoverageAreaRule_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=有効範囲ルール
2 | DEFAULT_DESCRIPTION=有効範囲ルール
3 |
4 | uiComponentFilterPanel.TITLE = 確認対象のスペース
5 | rpComponentFilter.NAME = 確認対象とするスペース
6 | rpComponentFilter.DESCRIPTION = このフィルタに確認対象のスペースを含めます。接続されているスペースは一つのスペースとして扱われます。
7 |
8 | uiEffectSourcesPanel.TITLE = 効果ソース
9 | rpEffectSources.NAME = 効果のソースとするコンポーネント
10 | rpEffectSources.DESCRIPTION = このフィルタはでは効果を出すソースコンポーネントを指定します。
11 |
12 | uiEffectParametersPanel.TITLE = 効果
13 | rpEffectParameters.EffectRange.NAME = ソースのポイントからの有効半径
14 | rpEffectParameters.EffectRange.DESCRIPTION = 効果の最大範囲
15 |
16 | rpEffectParameters.PropagateToConnectedSpaces.NAME = 効果を接続されたスペースに伝搬
17 | rpEffectParameters.PropagateToConnectedSpaces.DESCRIPTION = これにチェックが付けられている場合、その効果は接続されたスペースに伝搬します。
18 |
19 | rpOcclusionAndBounds.NAME = 閉塞と境界
20 | rpOcclusionAndBounds.DESCRIPTION = 閉塞と境界に関する効果の動作を定義する
21 |
22 | rpOcclusionAndBounds.Unoccluded = 非閉塞
スペース外に広がる
23 | rpOcclusionAndBounds.UnoccludedWithinArea = 非閉塞
スペース内
24 | rpOcclusionAndBounds.OccludedWithinArea = 閉塞
スペース内
25 | rpOcclusionAndBounds.DistanceOfTravel = 移動距離
スペース内
26 |
27 | uiEffectCoveragePanel.TITLE = 有効範囲
28 | rpMinimumCoverage.NAME = 表面積で必要な有効範囲 (最小値)
29 | rpMinimumCoverage.DESCRIPTION=効果がカバーしなければならないスペースの表面積の最小比
30 | uiRequiredRatioPanel.TITLE=プロパティ値の比率
31 | rpRequiredMinimumRatio.NAME=必要な最小比率
32 | rpRequiredMinimumRatio.DESCRIPTION=比較対象プロパティ間の必要最小比率
33 | uiPropertyValuesPanel.TITLE=プロパティ値
34 | rpEffectSourcePropertyReference.NAME=効果ソースプロパティ値
35 | rpEffectSourcePropertyReference.DESCRIPTION=面積プロパティと比較する効果ソースのプロパティ
36 | rpEffectSourceMultiplier.NAME=効果ソースの乗数の値 (オプション)
37 | rpEffectSourceMultiplier.DESCRIPTION=効果ソース値を乗算するために使用するプロパティ
38 | rpAreaPropertyReference.NAME=面積プロパティ値
39 | rpAreaPropertyReference.DESCRIPTION=効果ソースプロパティと比較する面積のプロパティ
40 | Result.EffectiveCoverageAreaViolation.Name=適用範囲面積の違反
41 | Result.EffectiveCoverageAreaViolation.Description=効果ソース{1}によるスペース{0}の適用範囲が不十分です:''{''2} %でしたが、{3} %必要でした。
42 | Result.SourceAndMissingProperties={0}\: プロパティ値の欠落\: {1}
43 | Result.EffectSource=効果ソース
44 | Result.EffectSourceMultiplier=効果ソースの乗数
45 | Result.Area=面積
46 |
47 | Result.MissingSpacePropertyValue.Name = プロパティ値の比率 - 比率が計算できない - 面積のプロパティ値が不足しています
48 | Result.MissingSpacePropertyValue.Description = プロパティ値の比率が計算できない。面積のプロパティ値が不足しています。
スペース\:
{0}
49 |
50 | Result.MissingSources.Name = プロパティ値の比率 - 比率が計算できない - 効果ソースが見つかりません
51 | Result.MissingSources.Description = プロパティ値の比率が計算できません。効果ソースが見つかりませんでした。
スペース\:
{0}
52 |
53 | Result.EachSourceAreMissingParameters.Name = プロパティ値の比率 - 比率が計算できません - 全ての効果ソースのプロパティ値が不足しています
54 | Result.EachSourceAreMissingParameters.Description = プロパティ値の比率が計算できません。全ての効果ソースのプロパティ値が不足しています。
スペース\:
{0}
効果ソース\:
{1}
55 |
56 | Result.TooSmallPropertyValueRatioAndSomeSourceAreMissingPropertyValues.Name = プロパティ値の比率 - 比率が小さすぎます - 一部の効果ソースでプロパティ値が欠落しています
57 | Result.TooSmallPropertyValueRatioAndSomeSourceAreMissingPropertyValues.Description = 比率が小さすぎます。 一部の効果ソースでプロパティ値が欠落しています。
スペース\:
{0}
効果ソース\:
{1}
効果のあるソースによる スペースのプロパティ値のカバレッジは十分ではありません\: {2} でしたが、{3} 必要です。
58 |
59 | Result.TooSmallPropertyValueRatio.Name = プロパティ値の比率 - 比率が小さすぎます
60 | Result.TooSmallPropertyValueRatio.Description = スペースのカバレッジのプロパティ値
{0}
効果ソース
{1}
十分ではありません\: {2} でしたが、{3} 必要です。
61 |
62 | Result.MissingSourcePropertyValues.name = プロパティ値の比率 - 一部の効果ソースでプロパティ値が不足しています
63 | Result.MissingSourcePropertyValues.Description = スペースのカバレッジのプロパティ値
{0}
効果ソース
{1}
十分です\: {2} でしたが、{3} 必要です。一部の効果ソースでプロパティ値が欠落しています。
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/EffectiveCoverageAreaRule_pt.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/effectivecoveragearearule/EffectiveCoverageAreaRule_ru.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/ParkingRule_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=駐車ルール
2 | DEFAULT_DESCRIPTION=このルールは駐車スペースのサイズを確認します。この確認は、駐車場通路または特定の障害物が近くにある特定の向きの駐車スペースのみを確認するように制限することができます。
3 |
4 | Result.CannotCheck.Name=駐車スペースを確認できません:{0}
5 | Result.CannotCheck.Description=駐車スペースのサイズ{0}を確認できません。
6 |
7 | Result.WrongSize.Name=駐車スペースサイズ:{0}
8 | Result.WrongSize.Description=駐車スペース{0}のサイズは要件を満たしていません。
9 |
10 | MinimumWidth=駐車スペースが狭すぎます。幅は{0}、最小許容幅は{1}です。
11 | MinimumLength=駐車スペースが短かすぎます。長さは{0}、最小許容長さは{1}です。
12 | MinimumHeight=駐車スペースが低すぎます。高さは{0}、最小許容高は{1}です。
13 |
14 | MaximumWidth=駐車スペースが広すぎます。幅は{0}、最大許容幅は{1}です。
15 | MaximumLength=駐車スペースが長すぎます。長さは{0}、最大許容長さは{1}です。
16 | MaximumHeight=駐車スペースが高すぎます。高さは{0}、最大許容高は{1}です。
17 |
18 | rpComponentFilter.NAME = チェック対象の駐車スペース
19 | rpComponentFilter.DESCRIPTION = チェック対象の駐車スペース向けフィルタ。
20 |
21 | rpParkingAisleFilter.NAME = チェック対象の通路コンポーネント
22 | rpParkingAisleFilter.DESCRIPTION = チェック対象の通路コンポーネント向けフィルタ。
23 |
24 | rpParkingObstructionsFilter.NAME = チェック対象の障害コンポーネント
25 | rpParkingObstructionsFilter.DESCRIPTION = チェック対象の障害コンポーネント向けフィルタ。
26 |
27 | rpMinimumWidth.NAME = 最小幅
28 | rpMinimumWidth.DESCRIPTION = 最小許容幅
29 |
30 | rpMinimumLength.NAME = 最小長さ
31 | rpMinimumLength.DESCRIPTION = 最小許容長さ
32 |
33 | rpMinimumHeight.NAME = 最小高さ
34 | rpMinimumHeight.DESCRIPTION = 最小許容高さ
35 |
36 | rpMaximumWidth.NAME = 最大幅
37 | rpMaximumWidth.DESCRIPTION = 最大許容幅
38 |
39 | rpMaximumLength.NAME = 最大長さ
40 | rpMaximumLength.DESCRIPTION = 最大許容長さ
41 |
42 | rpMaximumHeight.NAME = 最大高さ
43 | rpMaximumHeight.DESCRIPTION = 最大許容高さ
44 |
45 | rpEndObstructionNo.NAME = 両側終端部に障害物なし
46 | rpEndObstructionNo.DESCRIPTION = 両側終端部に障害物なし
47 |
48 | rpEndObstructionOne.NAME = 片側終端部に障害物あり
49 | rpEndObstructionOne.DESCRIPTION = 片側終端部に障害物あり
50 |
51 | rpEndObstructionBoth.NAME = 両側終端部に障害物あり
52 | rpEndObstructionBoth.DESCRIPTION = 両側終端部に障害物あり
53 |
54 | rpSideObstructionNo.NAME = 両側に障害物なし
55 | rpSideObstructionNo.DESCRIPTION = 両側に障害物なし
56 |
57 | rpSideObstructionOne.NAME = 片側に障害物あり
58 | rpSideObstructionOne.DESCRIPTION = 片側に障害物あり
59 |
60 | rpSideObstructionBoth.NAME = 両側に障害物あり
61 | rpSideObstructionBoth.DESCRIPTION = 両側に障害物あり
62 |
63 | rpParallelOrientation.NAME = 通路に並行
64 | rpParallelOrientation.DESCRIPTION = 通路に並行
65 |
66 | rpPerpendicularOrientation.NAME = 通路に垂直
67 | rpPerpendicularOrientation.DESCRIPTION = 通路に垂直
68 |
69 | rpAngledOrientation.NAME = 通路に斜め
70 | rpAngledOrientation.DESCRIPTION = 通路に斜め
71 |
72 | rpUseObstructionFreeZone.NAME = 障害物禁止区域内にあるコンポーネントを障害物とみなす
73 | rpUseObstructionFreeZone.DESCRIPTION = 障害物禁止区域内にあるコンポーネントを障害物とみなします。
74 |
75 | rpObstructionFreeZone.NAME = 空間妨害物禁止区域長さ
76 | rpObstructionFreeZone.DESCRIPTION = 空間妨害物禁止区域長さ
77 |
78 | UI.SpaceRequirements.TITLE = 駐車スペース要件
79 | UI.MinimumSize.TITLE = 最小駐車スペースサイズ
80 | UI.MaximumSize.TITLE = 最大駐車スペースサイズ
81 |
82 | UI.LimitCheckingByAlignment.TITLE = 通路タイプと駐車スペース調整による制限チェック
83 | UI.LimitCheckingByAlignment.DESCRIPTION = チェックには指定された向きの駐車スペースのみが含まれます。向きが不明なスペースは必ず含まれます。
向きが選択されていない場合、向きは無視されます。
84 |
85 | UI.LimitCheckingByObstructions.TITLE = 両側に障害物がある駐車場の制限チェック
86 |
87 | UI.EndObstructions.TITLE = 終端部障害物
88 | UI.EndObstructions.DESCRIPTION = チェックには、指定された終端部障害物のある駐車スペースのみが含まれます。
なにも選択されていない場合、終端部障害物は無視されます。
89 |
90 | UI.SideObstructions.TITLE = 片側障害物
91 | UI.SideObstructions.DESCRIPTION = チェックには、指定された片側障害物のある駐車スペースのみが含まれます。
なにも選択されていない場合、片側障害物は無視されます。
92 |
93 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/ParkingRule_ru.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/alignment_angle_to_aisle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/alignment_angle_to_aisle.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/alignment_parallel_to_aisle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/alignment_parallel_to_aisle.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/alignment_perpendicular_to_aisle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/alignment_perpendicular_to_aisle.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/end_obstructions_both.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/end_obstructions_both.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/end_obstructions_neither.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/end_obstructions_neither.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/end_obstructions_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/end_obstructions_one.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/side_obstructions_both.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/side_obstructions_both.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/side_obstructions_neither.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/side_obstructions_neither.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/side_obstructions_oneside.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/rule-examples/src/main/resources/com/solibri/smc/api/examples/parkingrule/side_obstructions_oneside.png
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/spaceconnectionrule/SpaceConnectionRule_fi.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Tilayhteyssääntö
2 | DEFAULT_DESCRIPTION=Tämä sääntö tarkastaa tilojen välittömiä yhteyksiä, ja sitä ovatko tilat yhteydessä rakennuksen ulkopuoleen.
3 | AUTHOR=Solibri Oy
4 |
5 | UI.SpacesToCheck.TITLE = Tarkistettavat tilat
6 | UI.SpaceConnectionRequirements.TITLE = Tilayhteysvaatimukset
7 |
8 | rpComponentFilter.NAME = Tarkistettavat tilat (A)
9 | rpComponentFilter.DESCRIPTION = Tarkistettavat tilat (A)
10 |
11 | rpSpacesFilterB.NAME = Tarkistettavat tilat (B)
12 | rpSpacesFilterB.DESCRIPTION = Tarkistettavat tilat (B)
13 |
14 | rpDirectAccessCondition.TITLE = Suora yhteys (ovi tai aukko) tilaan B
15 | rpDirectAccessCondition.NAME = Suora yhteys (ovi tai aukko) tilaan B
16 | rpDirectAccessCondition.DESCRIPTION = Suora yhteys (ovi tai aukko) tilaan B
17 | rpDirectAccessCondition.ALLOWED = Sallittu
Jos yhteys on olemassa, sen tyyppi voidaan tarkastaa.
18 | rpDirectAccessCondition.REQUIRED = Pakollinen
Jokaiselta tilalta A on löydyttävä yhteys tilaan B.
19 | rpDirectAccessCondition.FORBIDDEN = Kielletty
Millään tilalla A ei saa olla yhteyttä tilaan B.
20 |
21 | rpTypeOfAccessCondition.TITLE = Suoran yhteyden tyyppi tilaan B
22 | rpTypeOfAccessCondition.NAME = Suoran yhteyden tyyppi tilaan B
23 | rpTypeOfAccessCondition.DESCRIPTION = Suoran yhteyden tyyppi tilaan B
24 | rpTypeOfAccessCondition.ANY_DOOR_OR_OPENING = Ovi tai aukko
Yhteyden tyyppiä ei tarkasteta.
25 | rpTypeOfAccessCondition.CONSIDER_DOORS = Ovi
Vain ovet huomioidaan.
26 | rpTypeOfAccessCondition.CONSIDER_OPENINGS = Aukko
Vain aukot huomioidaan.
27 |
28 | rpDirectAccessOutsideCondition.TITLE = Suora uloskäynti tilasta A
29 | rpDirectAccessOutsideCondition.NAME = Suora uloskäynti tilasta A
30 | rpDirectAccessOutsideCondition.DESCRIPTION = Suora uloskäynti tilasta A
31 | rpDirectAccessOutsideCondition.EXIT_ALLOWED = Valinnainen
Tilan A uloskäyntejä ei tarkasteta.
32 | rpDirectAccessOutsideCondition.EXIT_REQUIRED = Pakollinen
Tilalla A täytyy olla yhteys ulos.
33 | rpDirectAccessOutsideCondition.EXIT_FORBIDDEN = Kielletty
Tilalla A ei saa olla yhteyttä ulos.
34 |
35 | rpTypeOfAccessOutsideCondition.TITLE = Suoran yhteyden tyyppi ulos
36 | rpTypeOfAccessOutsideCondition.NAME = Suoran yhteyden tyyppi ulos
37 | rpTypeOfAccessOutsideCondition.DESCRIPTION = Suoran yhteyden tyyppi ulos
38 | rpTypeOfAccessOutsideCondition.ANY_DOOR_OR_OPENING = Ovi tai aukko
Yhteyden tyyppiä ei tarkasteta.
39 | rpTypeOfAccessOutsideCondition.CONSIDER_DOORS = Ovi
Vain ovet huomioidaan.
40 | rpTypeOfAccessOutsideCondition.CONSIDER_OPENINGS = Aukko
Vain aukot huomioidaan.
41 |
42 | Result.NoDirectAccessFromAtoB.Name = Tilasta A ei ole suoraa yhteyttä
43 | Result.NoDirectAccessFromAtoB.Description = Tilasta {0} ei ole suoraa yhteyttä mihinkään tilaan B.
44 |
45 | Result.NoDirectAccessAllowed.Name = Suora yhteys tilasta A tilaan B on kielletty
46 | Result.NoDirectAccessAllowed.Description = Suora yhteys tilasta {0} tilaan {1} on kielletty.
47 |
48 | Result.DirectAccessWithoutDoor.Name = Tilasta A tilaan B on suora yhteys ilman ovea
49 | Result.DirectAccessWithoutDoor.Description = Tilasta {0} on suora yhteys ilman ovea tilaan {1}. Ovi vaaditaan.
50 |
51 | Result.DirectAccessWithoutOpening.Name = Tilasta A tilaan B on suora yhteys ilman aukkoa
52 | Result.DirectAccessWithoutOpening.Description = Tilasta {0} on suora yhteys ilman aukkoa tilaan {1}. Aukko vaaditaan.
53 |
54 | Result.NoDirectAccessToOutside.Name = Ei suoraa yhteyttä tilasta A ulkopuolelle
55 | Result.NoDirectAccessToOutside.Description = Ei suoraa yhteyttä tilasta {0} rakennuksen ulkopuolelle.
56 |
57 | Result.DirectAccessToOutsideForbidden.Name = Suora yhteys tilasta A ulkopuolelle on kielletty
58 | Result.DirectAccessToOutsideForbidden.Description = Suora yhteys tilasta {0} rakennuksen ulkopuolelle on kielletty.
59 |
60 | Result.DirectAccessToOutsideByForbiddenDoor.Name = Suora yhteys tilasta A ulkopuolelle oven kautta on kielletty
61 | Result.DirectAccessToOutsideByForbiddenDoor.Description = Suora yhteys tilasta {0} ulkopuolelle oven kautta on kielletty. Yhteys ulos on sallittu ainoastaan aukon kautta.
62 |
63 | Result.DirectAccessToOutsideByForbiddenOpening.Name = Suora yhteys tilasta A ulkopuolelle aukon kautta on kielletty
64 | Result.DirectAccessToOutsideByForbiddenOpening.Description = Suora yhteys tilasta {0} ulkopuolelle aukon kautta on kielletty. Yhteys ulos on sallittu ainoastaan oven kautta.
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/spaceconnectionrule/SpaceConnectionRule_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=スペース接続ルール
2 | DEFAULT_DESCRIPTION=このルールは、選択したスペース間の直接接続を確認し、また、これらのスペースが建造物の外側に直接接続されているかどうかを確認します。
3 |
4 | UI.SpacesToCheck.TITLE = 確認対象のスペース
5 | UI.SpaceConnectionRequirements.TITLE = スペース接続要件
6 |
7 | rpComponentFilter.NAME = 確認対象のスペース(A)
8 | rpComponentFilter.DESCRIPTION = 確認対象のスペース(A)
9 |
10 | rpSpacesFilterB.NAME = 確認対象のスペース(B)
11 | rpSpacesFilterB.DESCRIPTION = 確認対象のスペース(B)
12 |
13 | rpDirectAccessCondition.TITLE = スペースBへの直接接続(ドアまたは開口部)
14 | rpDirectAccessCondition.NAME = スペースBへの直接接続(ドアまたは開口部)
15 | rpDirectAccessCondition.DESCRIPTION = スペースBへの直接接続(ドアまたは開口部)
16 | rpDirectAccessCondition.ALLOWED = 許可
アクセスが存在する場合は、正しいタイプの有無について確認されます。
17 | rpDirectAccessCondition.REQUIRED = 必須
各スペースAに、スペースBへの直接接続が少なくとも1つは必要です。
18 | rpDirectAccessCondition.FORBIDDEN = 禁止
スペースAは、スペースBに接続できません。
19 |
20 | rpTypeOfAccessCondition.TITLE = 考慮対象の直接接続のタイプ
21 | rpTypeOfAccessCondition.NAME = 考慮対象の直接接続のタイプ
22 | rpTypeOfAccessCondition.DESCRIPTION = 考慮対象の直接接続のタイプ
23 | rpTypeOfAccessCondition.ANY_DOOR_OR_OPENING = すべてのドアまたは開口部
ドアと開口部の両方が考慮されます。
24 | rpTypeOfAccessCondition.CONSIDER_DOORS = ドアを考慮
ドアのみが考慮されます。
25 | rpTypeOfAccessCondition.CONSIDER_OPENINGS = 開口部を考慮
開口部のみが考慮されます。
26 |
27 | rpDirectAccessOutsideCondition.TITLE = スペースAから建造物外部への直接出口
28 | rpDirectAccessOutsideCondition.NAME = スペースAから建造物外部への直接出口
29 | rpDirectAccessOutsideCondition.DESCRIPTION = スペースAから建造物外部への直接出口
30 | rpDirectAccessOutsideCondition.EXIT_ALLOWED = 許可
アクセスが存在する場合は、正しいタイプの有無について確認されます。
31 | rpDirectAccessOutsideCondition.EXIT_REQUIRED = 必須
外部へのドアまたは開口部が必要です。
32 | rpDirectAccessOutsideCondition.EXIT_FORBIDDEN = 禁止
建造物から外へのアクセスは許可されません。
33 |
34 | rpTypeOfAccessOutsideCondition.TITLE = 考慮対象の直接接続のタイプ
35 | rpTypeOfAccessOutsideCondition.NAME = 考慮対象の直接接続のタイプ
36 | rpTypeOfAccessOutsideCondition.DESCRIPTION = 考慮対象の直接接続のタイプ
37 | rpTypeOfAccessOutsideCondition.ANY_DOOR_OR_OPENING = すべてのドアまたは開口部
ドアと開口部の両方が考慮されます。
38 | rpTypeOfAccessOutsideCondition.CONSIDER_DOORS = ドアを考慮
ドアのみが考慮されます。
39 | rpTypeOfAccessOutsideCondition.CONSIDER_OPENINGS = 開口部を考慮
開口部のみが考慮されます。
40 |
41 | Result.NoDirectAccessFromAtoB.Name = スペースAからの直接接続はない
42 | Result.NoDirectAccessFromAtoB.Description = {0}からすべてのスペースBへの直接接続はありません。
43 |
44 | Result.NoDirectAccessAllowed.Name = スペースAからスペースBへの直接接続は禁止される
45 | Result.NoDirectAccessAllowed.Description = {0}から{1}への直接接続は禁止されます。
46 |
47 | Result.DirectAccessWithoutDoor.Name = スペースAからスペースBへのドアなしの直接接続がある
48 | Result.DirectAccessWithoutDoor.Description = {0}から{1}へのドアなしの直接接続があります。ドアが必要です。
49 |
50 | Result.DirectAccessWithoutOpening.Name = スペースAからスペースBへの開口部なしの直接接続がある
51 | Result.DirectAccessWithoutOpening.Description = {0}から{1}への開口部なしの直接接続があります。開口部が必要です。
52 |
53 | Result.NoDirectAccessToOutside.Name = スペースAから外部への直接接続はない
54 | Result.NoDirectAccessToOutside.Description = {0}から外部への直接接続はありません。
55 |
56 | Result.DirectAccessToOutsideForbidden.Name = Aから外部への直接接続は禁止されている
57 | Result.DirectAccessToOutsideForbidden.Description = {0}から外部への直接接続は禁止されています。
58 |
59 | Result.DirectAccessToOutsideByForbiddenDoor.Name = Aから外部へのドアを通じた直接接続は禁止されている
60 | Result.DirectAccessToOutsideByForbiddenDoor.Description = {0}から外部へのドアを通じた直接接続は禁止されています。開口部を通じた外部への接続のみ許可されます。
61 |
62 | Result.DirectAccessToOutsideByForbiddenOpening.Name = Aから外部への開口部を通じた直接接続は禁止される
63 | Result.DirectAccessToOutsideByForbiddenOpening.Description = {0}から外部への開口部を通じた直接接続は禁止されています。ドアを通じた外部への接続のみ許可されます。
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/spaceconnectionrule/SpaceConnectionRule_pt.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/rule-examples/src/main/resources/com/solibri/smc/api/examples/spaceconnectionrule/SpaceConnectionRule_ru.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/rule-template/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | jar
8 |
9 |
10 | com.solibri
11 |
12 |
13 | smc-api-template
14 |
15 |
16 | Solibri API Template Project
17 |
18 | 1.0.0
19 |
20 |
21 |
22 | C:/Program Files/Solibri/SOLIBRI
23 |
24 | 3.11.0
25 | 3.3.0
26 |
27 |
28 |
29 |
30 | platform-mac
31 |
32 |
33 | mac
34 |
35 |
36 |
37 |
38 | /Applications/Solibri
39 |
40 |
41 |
42 |
43 |
44 |
45 | com.solibri.smc
46 | smc-api
47 | 1.0
48 | system
49 | ${smc-dir}/lib/smc-api.jar
50 |
51 |
52 | com.solibri.smc
53 | smc-geometry
54 | 1.0
55 | system
56 | ${smc-dir}/lib/smc-geometry.jar
57 |
58 |
59 |
60 | org.slf4j
61 | slf4j-api
62 | 1.7.36
63 | system
64 | ${smc-dir}/lib/slf4j-api.jar
65 |
66 |
67 |
68 |
69 |
70 |
71 | maven-compiler-plugin
72 | ${maven-compiler-plugin.version}
73 |
74 | 11
75 | UTF-8
76 | true
77 |
78 |
79 |
80 |
81 | org.apache.maven.plugins
82 | maven-jar-plugin
83 | ${maven-jar-plugin.version}
84 |
85 | ${smc-dir}/lib
86 |
87 | false
88 |
89 | true
90 |
91 |
92 | 1.0
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/rule-template/src/main/java/com/solibri/rule/ExampleRule.java:
--------------------------------------------------------------------------------
1 | package com.solibri.rule;
2 |
3 | import java.util.Collection;
4 | import java.util.Collections;
5 |
6 | import com.solibri.smc.api.checking.OneByOneRule;
7 | import com.solibri.smc.api.checking.Result;
8 | import com.solibri.smc.api.checking.ResultFactory;
9 | import com.solibri.smc.api.checking.RuleParameters;
10 | import com.solibri.smc.api.checking.StringParameter;
11 | import com.solibri.smc.api.model.Component;
12 |
13 | public final class ExampleRule extends OneByOneRule {
14 |
15 | private final RuleParameters params = RuleParameters.of(this);
16 |
17 | private final StringParameter stringParameter = params.createString("MyStringParameter");
18 |
19 | @Override
20 | public Collection check(Component component, ResultFactory resultFactory) {
21 | String stringParameterValue = stringParameter.getValue();
22 | Result result = resultFactory
23 | .create(stringParameterValue, "Description");
24 | return Collections.singleton(result);
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/rule-template/src/main/resources/com/solibri/rule/ExampleRule.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Example Rule
2 | DEFAULT_DESCRIPTION=Example Rule
3 | AUTHOR=Solibri, Inc.
4 | AUTHOR_TAG=SOL
5 | UID=12345
6 | VERSION=1.0
7 | DATE=2018-01-01
8 |
9 | rpComponentFilter.NAME = Components to Check
10 | rpComponentFilter.DESCRIPTION = This filter specifies the set of components to check.
11 |
12 | MyStringParameter.NAME = Result name
13 | MyStringParameter.DESCRIPTION = This parameter defines the name for the results generated by this rule.
14 | MyStringParameter.DEFAULT_VALUE = Result name
15 |
--------------------------------------------------------------------------------
/rule-template/src/main/resources/com/solibri/rule/ExampleRule_de.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Beispielregel
2 | DEFAULT_DESCRIPTION=Beispielregel
3 |
4 | rpComponentFilter.NAME = Zu überprüfende Komponenten
5 | rpComponentFilter.DESCRIPTION = Dieser Filter gibt die Anzahl der zu überprüfenden Komponenten an.
6 |
7 | MyStringParameter.NAME = Ergebnisname
8 | MyStringParameter.DESCRIPTION = Dieser Parameter definiert den Namen für die von dieser Regel gelieferten Ergebnisse.
9 | MyStringParameter.DEFAULT_VALUE = Ergebnisname
10 |
--------------------------------------------------------------------------------
/rule-template/src/main/resources/com/solibri/rule/ExampleRule_fi.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Esimerkkisääntö
2 | DEFAULT_DESCRIPTION=Esimerkkisääntö
3 | AUTHOR=Solibri Oy.
4 |
5 | rpComponentFilter.NAME = Tarkastettavat komponentit
6 | rpComponentFilter.DESCRIPTION = Tämä suodatin määrittelee tarkastettavat komponentit.
7 |
8 | MyStringParameter.NAME = Tuloksen nimi
9 | MyStringParameter.DESCRIPTION = Tämä parametri määrittää säännön luoman tuloksen nimen.
10 | MyStringParameter.DEFAULT_VALUE = Tuloksen nimi
11 |
--------------------------------------------------------------------------------
/rule-template/src/main/resources/com/solibri/rule/ExampleRule_fr.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Exemple de règle
2 | DEFAULT_DESCRIPTION=Exemple de règle
3 |
4 | rpComponentFilter.NAME = Composants à vérifier
5 | rpComponentFilter.DESCRIPTION = Ce filtre définit l’ensemble de composants à vérifier.
6 |
7 | MyStringParameter.NAME = Nom du résultat
8 | MyStringParameter.DESCRIPTION = Ce paramètre définit le nom pour les résultats générés par cette règle.
9 | MyStringParameter.DEFAULT_VALUE = Nom du résultat
10 |
--------------------------------------------------------------------------------
/rule-template/src/main/resources/com/solibri/rule/ExampleRule_ja.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=ルールの例
2 | DEFAULT_DESCRIPTION=ルールの例
3 |
4 | rpComponentFilter.NAME = チェック対象のコンポーネント
5 | rpComponentFilter.DESCRIPTION = このフィルタは、チェック対象のコンポーネントセットを設定します。
6 |
7 | MyStringParameter.NAME = 結果の名前
8 | MyStringParameter.DESCRIPTION = このパラメータは、このルールによって生成される結果の名前を定義します。
9 | MyStringParameter.DEFAULT_VALUE = 結果の名前
10 |
--------------------------------------------------------------------------------
/rule-template/src/main/resources/com/solibri/rule/ExampleRule_pt.properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/rule-template/src/main/resources/com/solibri/rule/ExampleRule_ru.properties:
--------------------------------------------------------------------------------
1 | DEFAULT_NAME=Пример правила
2 | DEFAULT_DESCRIPTION=Пример правила
3 |
4 | rpComponentFilter.NAME = Компоненты для проверки
5 | rpComponentFilter.DESCRIPTION = Этот фильтр определяет набор компонентов для проверки.
6 |
7 | MyStringParameter.NAME = Название результата
8 | MyStringParameter.DESCRIPTION = Этот параметр определяет имя для результатов, полученных этим правилом.
9 | MyStringParameter.DEFAULT_VALUE = Название результата
10 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/ApiKeySetting.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples;
2 |
3 | import com.solibri.smc.api.settings.PasswordSetting;
4 |
5 | public class ApiKeySetting extends PasswordSetting {
6 |
7 | @Override
8 | public String getUniqueId() {
9 | return "Google Search API Key";
10 | }
11 |
12 | @Override
13 | public String getDefaultValue() {
14 | return "abc";
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/BrowserPanel.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples;
2 |
3 | import javafx.application.Platform;
4 | import javafx.embed.swing.JFXPanel;
5 | import javafx.scene.Scene;
6 | import javafx.scene.layout.Region;
7 | import javafx.scene.paint.Color;
8 | import javafx.scene.web.WebView;
9 |
10 | public final class BrowserPanel extends JFXPanel {
11 |
12 | private static final long serialVersionUID = 1L;
13 |
14 |
15 | public static BrowserPanel getBrowserPanel(String url) {
16 | final BrowserPanel panel = new BrowserPanel();
17 | Platform.runLater(() -> {
18 | Browser browser = new Browser(url);
19 | Scene scene = new Scene(browser, 750, 500, Color.DARKGREY);
20 | panel.setScene(scene);
21 | });
22 | return panel;
23 | }
24 |
25 | private BrowserPanel() {
26 | }
27 |
28 | private static class Browser extends Region {
29 | private final WebView browser = new WebView();
30 |
31 | Browser(String urlToLoad) {
32 | // disable context menu
33 | browser.setContextMenuEnabled(false);
34 |
35 | // add the web view to the scene
36 | getChildren().add(browser);
37 | browser.getEngine().setUserAgent("Solibri Desktop Client");
38 | browser.getEngine().load(urlToLoad);
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/EventsView.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples;
2 |
3 | import java.util.Collection;
4 | import java.util.Set;
5 |
6 | import javax.swing.JPanel;
7 | import javax.swing.JScrollPane;
8 | import javax.swing.JTextArea;
9 |
10 | import com.solibri.smc.api.checking.Ruleset;
11 | import com.solibri.smc.api.model.Component;
12 | import com.solibri.smc.api.model.Model;
13 | import com.solibri.smc.api.ui.View;
14 |
15 | /**
16 | * EventsView is a simple view that just lists all events notifications the view receives in a text area.
17 | *
18 | */
19 | public class EventsView implements View {
20 |
21 | private final JTextArea textArea = new JTextArea();
22 |
23 | @Override
24 | public String getUniqueId() {
25 | return "ModelEventsView";
26 | }
27 |
28 | @Override
29 | public String getName() {
30 | return "ModelEventsView";
31 | }
32 |
33 |
34 | @Override
35 | public void initializePanel(JPanel panel) {
36 | panel.add(new JScrollPane(textArea));
37 | }
38 |
39 | private synchronized void addText(String text) {
40 | String newText = textArea.getText() + text + "\n";
41 | textArea.setText(newText);
42 | }
43 |
44 | @Override
45 | public void onModelClosed() {
46 | addText("onModelClosed");
47 | }
48 |
49 | @Override
50 | public void onModelLoaded(Model model) {
51 | addText("onModelLoaded: " + model.getUUID());
52 | }
53 |
54 | @Override
55 | public void onModelModified(Model model) {
56 | addText("onModelModified: " + model.getUUID());
57 | }
58 |
59 | @Override
60 | public boolean onApplicationExit() {
61 | addText("onApplicationExit");
62 | return true;
63 | }
64 |
65 | @Override
66 | public void onSubModelUpdated(Model updatedSubModel) {
67 | addText("onSubModelUpdated: " + updatedSubModel.getUUID());
68 | }
69 |
70 | @Override
71 | public void onSubModelAdded(Model addedSubModel) {
72 | addText("onSubModelAdded: " + addedSubModel.getUUID());
73 | }
74 |
75 | @Override
76 | public void onBasketSelectionChanged(Set oldSelection, Set newSelection) {
77 | addText("onBasketSelectionChanged: " + oldSelection + " -> " + newSelection);
78 | }
79 |
80 | @Override
81 | public void onCheckingStarted() {
82 | addText("onCheckingStarted");
83 | }
84 |
85 | @Override
86 | public void onCheckingEnded() {
87 | addText("onCheckingEnded");
88 | }
89 |
90 | @Override
91 | public void onComponentChosen(Component component) {
92 | addText("onComponentChosen: " + component.getGUID());
93 | }
94 |
95 | @Override
96 | public void onComponentsZoomedTo(Collection components) {
97 | addText("onComponentsZoomedTo: " + components);
98 | }
99 |
100 | @Override
101 | public void onComponentsHidden(Collection components) {
102 | addText("onComponentsHidden: " + components);
103 | }
104 |
105 | @Override
106 | public void onSettingsChanged() {
107 | addText("onSettingsChanged");
108 | }
109 |
110 | @Override
111 | public void onItoStarted() {
112 | addText("onItoStarted");
113 | }
114 |
115 | @Override
116 | public void onItoFinished() {
117 | addText("onItoFinished");
118 | }
119 |
120 | @Override
121 | public void onRulesetAdded(Ruleset ruleset) {
122 | addText("onRulesetAdded: " + ruleset.getName());
123 | }
124 |
125 | @Override
126 | public void onRulesetRemoved(Ruleset ruleset) {
127 | addText("onRulesetRemoved: " + ruleset.getName());
128 | }
129 | }
130 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/ExporterSettingDialog.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import com.solibri.smc.api.settings.SettingDialog;
7 | import com.solibri.smc.api.settings.SettingGroup;
8 |
9 | public class ExporterSettingDialog implements SettingDialog {
10 |
11 | @Override
12 | public String getUniqueId() {
13 | return "exporter-setting-dialog";
14 | }
15 |
16 | @Override
17 | public String getName() {
18 | return "Checking results exporter";
19 | }
20 |
21 | @Override
22 | public List> getSettingGroups() {
23 | List> list = new ArrayList<>();
24 | list.add(ExporterSettingGroup.class);
25 | return list;
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/ExporterSettingGroup.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import com.solibri.smc.api.settings.Setting;
7 | import com.solibri.smc.api.settings.SettingGroup;
8 |
9 | public class ExporterSettingGroup implements SettingGroup {
10 |
11 | @Override
12 | public String getUniqueId() {
13 | return "exporter-setting-group";
14 | }
15 |
16 | @Override
17 | public String getName() {
18 | return "Checking results exporter";
19 | }
20 |
21 | @Override
22 | public List>> getSettings() {
23 | List>> list = new ArrayList<>();
24 | list.add(MaximumExportedResultsSetting.class);
25 | list.add(OverwriteOldExportsSetting.class);
26 | return list;
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/IfcView.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples;
2 |
3 | import java.awt.BorderLayout;
4 | import java.awt.Color;
5 | import java.awt.Dimension;
6 | import java.lang.invoke.MethodHandles;
7 | import java.util.Locale;
8 | import java.util.Optional;
9 |
10 | import javax.swing.BorderFactory;
11 | import javax.swing.JComboBox;
12 | import javax.swing.JPanel;
13 | import javax.swing.SwingUtilities;
14 |
15 | import org.slf4j.Logger;
16 | import org.slf4j.LoggerFactory;
17 |
18 | import com.solibri.smc.api.ifc.IfcEntityType;
19 | import com.solibri.smc.api.ifc.IfcSchema;
20 | import com.solibri.smc.api.model.Component;
21 | import com.solibri.smc.api.ui.View;
22 |
23 | public final class IfcView implements View {
24 |
25 | private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
26 |
27 | @Override
28 | public String getUniqueId() {
29 | return "IFC-data-viewer";
30 | }
31 |
32 | private BrowserPanel browserPanel = BrowserPanel.getBrowserPanel("https://standards.buildingsmart.org/");
33 | private JPanel root;
34 | private JComboBox comboBox;
35 |
36 | @Override
37 | public void initializePanel(JPanel panel) {
38 | this.root = panel;
39 | panel.setLayout(new BorderLayout(10, 10));
40 | comboBox = new JComboBox<>(IfcSchema.values());
41 | panel.add(comboBox, BorderLayout.NORTH);
42 | browserPanel.setPreferredSize(new Dimension(0, 0));
43 | browserPanel.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, new Color(0xD8D8D8)));
44 | panel.add(browserPanel, BorderLayout.CENTER);
45 | }
46 |
47 | @Override
48 | public void onComponentChosen(Component component) {
49 | Optional optionalType = component.getIfcEntityType();
50 | if (optionalType.isEmpty()) {
51 | LOG.info("No Ifc type found from component {}.", component.getName());
52 | return;
53 | }
54 | IfcEntityType type = optionalType.get();
55 | IfcSchema schema = comboBox.getSelectedItem() == null ? IfcSchema.IFC2X3 : (IfcSchema) comboBox.getSelectedItem();
56 |
57 | // Convert type name to lowercase if schema is IFC2X3 or IFC4
58 | String typeName = (schema == IfcSchema.IFC2X3 || schema == IfcSchema.IFC4)
59 | ? type.name().toLowerCase(Locale.getDefault())
60 | : type.name();
61 |
62 | String ifcUrl = getBaseUrl(schema) + typeName + ".htm";
63 |
64 | root.remove(browserPanel);
65 | browserPanel = BrowserPanel.getBrowserPanel(ifcUrl);
66 | root.add(browserPanel);
67 |
68 | SwingUtilities.invokeLater(() -> {
69 | browserPanel.revalidate();
70 | browserPanel.repaint();
71 | root.revalidate();
72 | root.repaint();
73 | });
74 | }
75 |
76 | private static String getBaseUrl(IfcSchema schema) {
77 | String baseUrl = "https://standards.buildingsmart.org/";
78 | switch (schema) {
79 | case IFC2X3:
80 | return baseUrl + "IFC/RELEASE/IFC2x3/TC1/HTML/ifcsharedbldgelements/lexical/";
81 | case IFC4:
82 | return baseUrl + "MVD/RELEASE/IFC4/ADD2_TC1/RV1_2/HTML/schema/ifcsharedbldgelements/lexical/";
83 | case IFC4X3:
84 | return "https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/";
85 | default:
86 | throw new IllegalArgumentException();
87 | }
88 | }
89 |
90 | }
91 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples;
2 |
3 | import java.util.Optional;
4 |
5 | import com.solibri.smc.api.settings.IntegerSetting;
6 |
7 | public class MaximumExportedResultsSetting extends IntegerSetting {
8 |
9 | @Override
10 | public String getUniqueId() {
11 | return "Maximum exported checking results";
12 | }
13 |
14 | @Override
15 | public Integer getDefaultValue() {
16 | return 1024;
17 | }
18 |
19 | @Override
20 | public Optional invalidReason(Integer value) {
21 | // We don't allow the value to be negative or zero.
22 | if (value <= 0) {
23 | return Optional.of("The given value has to be positive.");
24 | }
25 | return Optional.empty();
26 |
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples;
2 |
3 | import java.time.LocalDateTime;
4 | import java.time.ZoneId;
5 | import java.util.Optional;
6 |
7 | import com.solibri.smc.api.settings.BooleanSetting;
8 |
9 | public class OverwriteOldExportsSetting extends BooleanSetting {
10 |
11 | @Override
12 | public String getUniqueId() {
13 | return "Overwrite old exports";
14 | }
15 |
16 | @Override
17 | public Boolean getDefaultValue() {
18 | return Boolean.FALSE;
19 | }
20 |
21 | @Override
22 | public Optional invalidReason(Boolean value) {
23 | /*
24 | * If the current minute is even, any value can be chosen, otherwise overwriting old exporting is not allowed to
25 | * be chosen.
26 | */
27 | if (value && LocalDateTime.now(ZoneId.systemDefault()).getMinute() % 2 != 0) {
28 | return Optional.of("You cannot overwrite results right now.");
29 | }
30 | return Optional.empty();
31 |
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/view-examples/src/main/java/com/solibri/smc/api/view/examples/spaceinformation/ExportToExcelFileLocationSetting.java:
--------------------------------------------------------------------------------
1 | package com.solibri.smc.api.view.examples.spaceinformation;
2 |
3 | import java.io.File;
4 | import java.util.Optional;
5 |
6 | import com.solibri.smc.api.settings.StringSetting;
7 |
8 | public class ExportToExcelFileLocationSetting extends StringSetting {
9 |
10 | @Override
11 | public String getUniqueId() {
12 | return "Space information Excel export file";
13 | }
14 |
15 | @Override
16 | public String getDefaultValue() {
17 | return System.getProperty("user.home") + "/space-information.xlsx";
18 | }
19 |
20 | @Override
21 | public Optional invalidReason(String value) {
22 | File file = new File(value);
23 | if (file.getPath().endsWith(".xlsx")) {
24 | return Optional.empty();
25 | }
26 | return Optional.of("The file has to end in .xlsx.");
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/view-examples/src/main/resources/META-INF/services/com.solibri.smc.api.settings.Setting:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.view.examples.ApiKeySetting
2 | com.solibri.smc.api.view.examples.MaximumExportedResultsSetting
3 | com.solibri.smc.api.view.examples.OverwriteOldExportsSetting
4 | com.solibri.smc.api.view.examples.spaceinformation.ExportToExcelFileLocationSetting
--------------------------------------------------------------------------------
/view-examples/src/main/resources/META-INF/services/com.solibri.smc.api.settings.SettingDialog:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.view.examples.ExporterSettingDialog
--------------------------------------------------------------------------------
/view-examples/src/main/resources/META-INF/services/com.solibri.smc.api.settings.SettingGroup:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.view.examples.ExporterSettingGroup
--------------------------------------------------------------------------------
/view-examples/src/main/resources/META-INF/services/com.solibri.smc.api.ui.View:
--------------------------------------------------------------------------------
1 | com.solibri.smc.api.view.examples.CheckingResultsExporterView
2 | com.solibri.smc.api.view.examples.IfcView
3 | com.solibri.smc.api.view.examples.EventsView
4 | com.solibri.smc.api.view.examples.spaceinformation.SpaceInformationView
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting.properties:
--------------------------------------------------------------------------------
1 | NAME = Google Search API Key
2 | DESCRIPTION = Google Search API developer key. This is a secret.
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_de.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Google Search API -avain
2 | DESCRIPTION = Google Search APIn kehittäjäavain. Salainen.
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_fr.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_ja.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_pt.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_ru.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ApiKeySetting_ru.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog.properties:
--------------------------------------------------------------------------------
1 | DESCRIPTION = Dialog for the settings of the Checking results exporter
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_de.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_fi.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_fi.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_fr.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_ja.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_pt.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingDialog_ru.properties:
--------------------------------------------------------------------------------
1 | DESCRIPTION = Диалог настроек экспорта результатов проверки
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup.properties:
--------------------------------------------------------------------------------
1 | DESCRIPTION = Group for the settings of the Checking results exporter
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_de.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_fi.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_fi.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_fr.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_ja.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_pt.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/ExporterSettingGroup_ru.properties:
--------------------------------------------------------------------------------
1 | DESCRIPTION = Группа настроек экспорта результатов проверки
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView.properties:
--------------------------------------------------------------------------------
1 | NAME=IFC Data Viewer
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_de.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_fi.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_fi.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_fr.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_ja.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_pt.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/IfcView_ru.properties:
--------------------------------------------------------------------------------
1 | NAME=Просмотр информации IFC (IFC Data Viewer)
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting.properties:
--------------------------------------------------------------------------------
1 | NAME = Maximum exported checking results
2 | DESCRIPTION = The checking results exporter will discard all the results after the maximum amount has been exported.
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_de.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Maksimitarkastustulosmäärä
2 | DESCRIPTION = Sääntöjen tuloksia lähetetään korkeintaan tämän parametrin osoittama määrä. Ylimenevät tulokset ohitetaan.
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_fr.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_ja.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_pt.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/MaximumExportedResultsSetting_ru.properties:
--------------------------------------------------------------------------------
1 | NAME = Максимальное количество экспортируемых результатов проверки
2 | DESCRIPTION = Мастер выгрузки результатов проверки отбрасывает все результаты после экспорта максимального количества.
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting.properties:
--------------------------------------------------------------------------------
1 | NAME = Overwrite old exports
2 | DESCRIPTION = If this setting is enabled, old exports are overwritten. Otherwise new checking results are added on top of the old exports.
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_de.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_fi.properties:
--------------------------------------------------------------------------------
1 | NAME = Ylikirjoita vanhat tarkitustulosviennit
2 | DESCRIPTION = Jos tämä asetus on valittu, vanhat viennit ylikirjoitetaan. Muuten uudet tarkastustulokset lisätään vanhojen lisäksi.
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_fr.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_ja.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_pt.properties
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/OverwriteOldExportsSetting_ru.properties:
--------------------------------------------------------------------------------
1 | NAME = Перезаписать предыдущий результат экспорта
2 | DESCRIPTION = Если включено, предыдущий результат экспорта будет перезаписан. В противном случае новые результаты проверки добавляются к предыдущим результатам.
--------------------------------------------------------------------------------
/view-examples/src/main/resources/com/solibri/smc/api/view/examples/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-examples/src/main/resources/com/solibri/smc/api/view/examples/icon.png
--------------------------------------------------------------------------------
/view-template/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | jar
8 |
9 |
10 | com.solibri
11 |
12 |
13 | smc-api-view-template
14 |
15 |
16 | Solibri API View Template Project
17 |
18 | 1.0.0
19 |
20 |
21 |
22 | C:/Program Files/Solibri/SOLIBRI
23 |
24 | 3.11.0
25 | 3.3.0
26 | 2.0.17
27 |
28 |
29 |
30 |
31 | platform-mac
32 |
33 |
34 | mac
35 |
36 |
37 |
38 |
39 | /Applications/Solibri
40 |
41 |
42 |
43 |
44 |
45 |
46 | com.solibri.smc
47 | smc-api
48 | 1.0
49 | system
50 | ${smc-dir}/lib/smc-api.jar
51 |
52 |
53 | com.solibri.smc
54 | smc-geometry
55 | 1.0
56 | system
57 | ${smc-dir}/lib/smc-geometry.jar
58 |
59 |
60 |
61 | org.slf4j
62 | slf4j-api
63 | ${slf4j-api.version}
64 | system
65 | ${smc-dir}/lib/slf4j-api.jar
66 |
67 |
68 |
69 |
70 |
71 |
72 | maven-compiler-plugin
73 | ${maven-compiler-plugin.version}
74 |
75 | 11
76 | UTF-8
77 | true
78 |
79 |
80 |
81 |
82 | org.apache.maven.plugins
83 | maven-jar-plugin
84 | ${maven-jar-plugin.version}
85 |
86 | ${smc-dir}/lib
87 |
88 | false
89 |
90 | true
91 |
92 |
93 | 1.0
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/view-template/src/main/java/com/solibri/view/ExampleView.java:
--------------------------------------------------------------------------------
1 | package com.solibri.view;
2 |
3 | import javax.swing.JLabel;
4 | import javax.swing.JPanel;
5 |
6 | import com.solibri.smc.api.ui.View;
7 |
8 | public final class ExampleView implements View {
9 |
10 | @Override
11 | public String getUniqueId() {
12 | return "Example";
13 | }
14 |
15 | @Override
16 | public String getName() {
17 | return "Example in some language";
18 | }
19 |
20 |
21 | @Override
22 | public void initializePanel(JPanel panel) {
23 | JLabel label = new JLabel("Example label");
24 | panel.add(label);
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/view-template/src/main/resources/META-INF/services/com.solibri.smc.api.layout.Layout:
--------------------------------------------------------------------------------
1 | com.solibri.layout.ExampleLayout
--------------------------------------------------------------------------------
/view-template/src/main/resources/META-INF/services/com.solibri.smc.api.ui.View:
--------------------------------------------------------------------------------
1 | com.solibri.view.ExampleView
--------------------------------------------------------------------------------
/view-template/src/main/resources/com/solibri/view/ExampleView.properties:
--------------------------------------------------------------------------------
1 | NAME=Example View
--------------------------------------------------------------------------------
/view-template/src/main/resources/com/solibri/view/ExampleView_de.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-template/src/main/resources/com/solibri/view/ExampleView_de.properties
--------------------------------------------------------------------------------
/view-template/src/main/resources/com/solibri/view/ExampleView_fi.properties:
--------------------------------------------------------------------------------
1 | NAME=Esimerkkinäkymä
--------------------------------------------------------------------------------
/view-template/src/main/resources/com/solibri/view/ExampleView_fr.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-template/src/main/resources/com/solibri/view/ExampleView_fr.properties
--------------------------------------------------------------------------------
/view-template/src/main/resources/com/solibri/view/ExampleView_ja.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-template/src/main/resources/com/solibri/view/ExampleView_ja.properties
--------------------------------------------------------------------------------
/view-template/src/main/resources/com/solibri/view/ExampleView_pt.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Solibri/api-examples/5225584cf59eac8955ce1305c2c514a820703619/view-template/src/main/resources/com/solibri/view/ExampleView_pt.properties
--------------------------------------------------------------------------------
/view-template/src/main/resources/com/solibri/view/ExampleView_ru.properties:
--------------------------------------------------------------------------------
1 | NAME=Пример вида
--------------------------------------------------------------------------------