Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Panel
titleGoal of this tutorial

Anchor
1
1

In this tutorial we will introduce the "browser organ" with a user interface: the drive and the viewer.

System architecture:


Panel
titleDriveRequirements

For this tutorial you must have done the Basic Automate Tutorial


Viewer base
Panel
titleSet up the drive
title

Anchor
2
2
Install drive

A. Installation

First we need to install the Spinalcom Drive :

Code Block
languagebash
themeDJango
~/buttonequipment-system$ npm i -s https://github.com/spinalcom/spinal-browser-drive

share automate with me

go to drive

Download rvt file: http://www.autodesk.com/revit-rac-basic-sample-project-2016-enu?_ga=2.104361024.1367483780.1526027060-750616995.1518426196

Drop rvt file in drive

Panel

B. Share the Automate file

We're going to share the file "Automate" so, as a standard user, you can access your data in your drive.

First right click on the file "Automate" and choose share.

Image Added


Then give read, write and share rights to admin in the menu that appeared.

Image Added

To access the drive just change the url to http://localhost:7777/html/drive

Go in the folder "shared_with_me" and you should see the file Automate.


Panel
titleDiscover the viewer

Anchor
3
3

link utilities: install viewer / do it again but mention utilities => more infos

create digital twin

try Now we will install the Spinal Viewer.

You can have more informations to how to setup the Autodesk Forge account and import a 3D file (rvt, ifc, etc...) in our drive here.


Code Block
languagebash
themeDJango
$ npm install -s https://github.com/spinalcom/spinal-browser-viewer



Panel
titleInstall your first plugin viewer

Anchor
4
4

Download plugin, renameNow that you've seen the basics, let's try to install a plugin. Download and rename this example:

Code Block
languagebash
themeDJango
~/button-system$ git clone https://gist.github.com/Diclah/2887ee1bcf1353d9615a1dcf4c6a0128
~/button-system$ mv 2887ee1bcf1353d9615a1dcf4c6a0128 spinal-env-viewer-plugin-sample
edit

Don't forget to rename it in its package.json.

spinal-env-viewer-plugin-sample/package.json:

Code Block
languagejs
themeDJango
firstline2
linenumberstrue
  "name": "spinal-env-viewer-plugin-sample",

Now install it:

Code Block
languagebash
themeDJango
~/button-system$ npm i -s spinal-env-viewer-plugin-sample

edit Edit or create .config_env/viewer.json and add your new plugin to the list of viewer plugins.

.config_env/viewer.json

Code Block
languagejs
themeDJango
linenumberstrue
{
  "spinal-env-viewer-plugin-sample": "1.0.0"
}

config viewer:Now use create_viewer_env binary to configure the viewer.

Code Block
languagebash
themeDJango
~/button-system$ ./node_modules/.bin/create_viewer_env

reload Reload the spinal viewer => and the plugin should appear in the form of a button.

Image Added

Once you press it a small window will appear.

Image Added


Panel
titleEdit Modify your plugin viewer

Anchor
5
5

Load list in mounted, display list in template, create .container in style:This first plugin isn't really impressive, let's improve it. We're going to make it display the equipments from our Automate list.

To modify it, go to spinal-env-viewer-plugin-sample.

spinal-env-viewer-plugin-sample/testExtention.vue

Code Block
languagejs
themeDJango
linenumberstrue
<template>
<!-- 1: Add an md-element -->
  <md-content class="container md-scrollbar">
    <div>
      hey {{testHello}} - {{count}}
      <md-button @click="getSelection">
        TEST GET SELECTION
      </md-button>
      <md-button @click="logForgeFile">
        TEST GET ForgeFile
      </md-button>
    </div>
<!-- 2: Display the id, name, hydrometry, temperature and state of all equipments in the list -->
    <md-table>
      <md-table-row>
        <md-table-cell>Id</md-table-cell>
        <md-table-cell>Name</md-table-cell>
        <md-table-cell>Hydrometry<cell>Hygrometry</md-table-cell>
        <md-table-cell>Temperature</md-table-cell>

       <md-table-cell>Pressed</md-table-cell>
      </md-table-row>
      <md-table-row v-for="item in this.list"
                    :key="item._server_id">
        <md-table-cell>{{item.id.get()}}</md-table-cell>
        <md-table-cell>{{item.name.get()}}</md-table-cell>
        <md-table-cell>{{item.hydrometryhygrometry.get()}}</md-table-cell>
        <md-table-cell>{{item.temperature.get()}}</md-table-cell>
        <md-table-cell>{{item.pressed.get()}}</md-table-cell>
      </md-table-row>
    </md-table>
  </md-content>
</template>

<script>
function loop(func) {
  func();
  setTimeout(() => {
    loop(func);
  }, 1000);
}
var spinalSystem = window.spinal.spinalSystem;
var viewer = window.spinal.ForgeViewer.viewer;


// 3: Load Automate from the drive and fill the list with its elements
function loadList() {
  this.spinalSystem.load("/__users__/admin/shared_with_me/Automate").then(
    automate => {
      this.equip = automate.sensors;
      for (let i = 0; i < automate.sensors.length; i++) {
        this.list.push(automate.sensors[i]);
      }
    },
    () => {
      console.log("error: could not load Automate");
    }
  );
}

export default {
  name: "testExtention",

  data() {
	this.spinalSystem;
	this.viewer;
    this.equip;
    return {
      testHello: "HELLO WORLD",
      count: 0,
// 34: The list array which will contain the equipments
      list: []
    };
  },
  methods: {
    getSelection: function() {
      let testselection = this.viewer.getSelection();
      console.log(testselection);
    },
    logForgeFile: function() {
      this.spinalSystem.getModel().then(forgefile => {
        console.log(forgefile);
      });
    }
  },
  mountedcreated() {
// 4: Load Automate from the drive and fill the list with its elements
    spinalSystem.load("/__users__/admin/shared_with_me/Automate").then(
      automate => {
        for (let i = 0; i < automate.equipments.length; i++) {
          this.list.push(automate.equipments[i]);
        }
      },
      () => {
        console.log("error: could not load Automate" this.spinalSystem = window.spinal.spinalSystem;
    this.viewer = window.spinal.ForgeViewer.viewer;
  },
  mounted() {
// 5: Call to loadList
	loadList.call(this);

     }
    );
    let vm = this;
    loop(() => {
      vm.count += 1;
    });
  }
};
</script>

<style>
//* 56: Create the container style <style>*/
.container {
  height: calc(100% - 48px);
  overflow-y: auto;
  box-sizing: border-box;
}
</style>

Don't forget to execute ./node_modules/.bin/create_viewer_env and to reload spinal-env-viewer-plugin-sample or your changes won't show how it should look

Conclusion

.

Image Added


Conclusion


In this tutorial you learned:

  • how to use the spinal drive
  • how to use the spinal viewer
  • how to install and modify your spinal viewer plugin


This tutorial will be continued in /wiki/spaces/DOC/pages/42926106.