PMA.UI Examples 2.43.3by Pathomation

Realtime area / Distance measurements

basicslide loadermeasure
Console
PMA.UI version: 2.43.3
An example showing the real time measurements for distance and area
realtime_measurements.html
1<!doctype html>
2<html lang="en">
3
4<head>
5    <meta charset="utf-8">
6    <meta http-equiv="X-UA-Compatible" content="IE=10">
7    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
8
9    <!-- Include PMA.UI required libraries downloaded or from CDN -->
10    <script src="./pma.ui/jquery-3.1.0.js"></script>
11    <link href="./pma.ui/font-awesome.min.css" type="text/css" rel="stylesheet">
12
13    <!-- Include optional libraries downloaded or from CDN -->
14    <link rel="stylesheet" href="./pma.ui/bootstrap.min.css">
15    <script src="./pma.ui/bootstrap.bundle.min.js"></script>
16
17    <!-- Include PMA.UI script & css -->
18    <script src="./pma.ui/pma.ui.js"></script>
19    <link href="./pma.ui/pma.ui.css" type="text/css" rel="stylesheet">
20
21    <!-- Include custom script & css -->
22    <script src="./js/realtime_measurements.js"></script>
23    <link href="./css/realtime_measurements.css" type="text/css" rel="stylesheet">
24
25    <title>Realtime area / Distance measurements</title>
26</head>
27
28<body>
29    <div class="container-xl">
30        <div class="row">
31            <div class="col-auto annotations">
32                <div class="btn-group-vertical btn-group-md">
33                    <div class="btn-group dropright">
34                        <button type="button" class="btn btn-light" data-toggle="dropdown" aria-haspopup="true"
35                            aria-expanded="false" title="Measure">
36                            <i class="fas fa-ruler"></i> Measure
37                        </button>
38                        <div class="dropdown-menu">
39                            <a class="dropdown-item" data-action="measure" data-type="line" href="#">Line</a>
40                            <a class="dropdown-item" data-action="measure" data-type="area" href="#">Area</a>
41                            <div class="dropdown-divider"></div>
42                            <a class="dropdown-item" data-action="measure" data-type="clear" href="#">Clear
43                                measurements</a>
44                        </div>
45                    </div>
46                </div>
47            </div>
48        </div>
49        <div class="row viewer-row">
50            <div class="col">
51                <div id="viewer"></div>
52            </div>
53        </div>
54    </div>
55</body>
56
57</html>
realtime_measurements.css
1html,
2body
3{
4    height: 100%;
5    padding: 0px;
6    margin: 0px;
7}
8
9body .pma-ui-viewport-container {
10    height: 100%;
11    width: 100%;
12}
13
14.aligned-text {
15    display: inline-block;
16    text-align: right;
17    width: 70px;
18}
19
20.annotation-helper-icon i,
21.annotation-helper-icon span {
22    display: none;
23}
24
25.annotation-helper-icon.loading i {
26    display: initial;
27}
28
29.annotation-helper-icon.loading span {
30    display: none;
31}
32
33.annotation-helper-icon.saved i,
34.annotation-helper-icon.saved span.badge-danger {
35    display: none;
36}
37
38.annotation-helper-icon.saved span.badge-success {
39    display: initial;
40}
41
42.annotation-helper-icon.error i,
43.annotation-helper-icon.error span.badge-success {
44    display: none;
45}
46
47.annotation-helper-icon.error span.badge-danger {
48    display: block;
49}
50
51.annotations {
52    margin: 0 auto;
53    padding: 0;
54}
55.viewer-row {
56    height: calc(100vh - 38px);
57}
58.color-picker{
59    height: 35px;
60    margin-bottom: 1px;
61    border: none;
62}
realtime_measurements.js
1// Initial declarations
2var serverUrl = "https://host.pathomation.com/pma.core.2/";
3var serverUsername = "PMA_UI_demo";
4var serverPassword = "PMA_UI_demo";
5var caller = "DemoPortal";
6var slideLoaderElementSelector = "#viewer";
7var imagePath = "Reference/3DHistech/CMU-1.mrxs";
8var context = null;
9var slideLoader = null;
10var annotationManager = null;
11
12function drawCommands(action, type) {
13    if (action) {
14
15        if (action === "measure") {
16            if (type === "clear") {
17                slideLoader.mainViewport.stopMeasuring();
18                return;
19            }
20
21            slideLoader.mainViewport.startMeasuring(type);
22        }
23    }
24}
25
26jQuery(function () {
27    $("button[data-action][data-type], a[data-action][data-type]").on("click", function (e) {
28        e.preventDefault();
29        drawCommands($(this).data("action"), $(this).data("type"));
30    });
31
32    console.log(`PMA.UI version: ${PMA.UI.getVersion()}`);
33
34    // Create a context
35    context = new PMA.UI.Components.Context({ caller: caller });
36
37    // Add an autologin authentication provider
38    new PMA.UI.Authentication.AutoLogin(context, [{ serverUrl: serverUrl, username: serverUsername, password: serverPassword }]);
39
40    // Create an image loader that will allow us to load images easily
41    slideLoader = new PMA.UI.Components.SlideLoader(context, {
42        element: slideLoaderElementSelector
43    });
44
45    // Load the image with the context
46    slideLoader.load(serverUrl, imagePath);
47});