├── .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=Пример вида --------------------------------------------------------------------------------