// process click event
    public void PlacePlaneClickRecieved(EventParam positionParam)
    {
        if (clickCount == 0)
        {
            planeDistanceInstance = new PlaneDistanceClass();
            instanceList.Add(planeDistanceInstance);
        }

        if (clickCount < 2)
        {
            clonePlane = Instantiate(refPlane, cloneParent);
            clonePlane.SetActive(true);
            clonePlane.transform.position = positionParam.getPointParam();

            if (clickCount == 1)
            {
                normalLine = Instantiate(refLine, clonePlane.transform);
                normalLine.SetActive(true);
                normalLine.transform.localPosition = Vector3.zero;
                normalLine.transform.eulerAngles   = Vector3.zero;
                normalLine.name = "Arrow";
            }

            planeDistanceInstance.AddElement(clonePlane);
        }

        clickCount += 1;
    }
    // restore saved measures method
    private void Restore(EventParam jsonStringParam)
    {
        // create an new measure instance from the JSON string
        planeDistanceInstance = JsonUtility.FromJson <PlaneDistanceClass>(jsonStringParam.getStringParam());
        instanceList.Add(planeDistanceInstance);

        // instantiate 2 planes
        GameObject p1 = Instantiate(refPlane, cloneParent);

        p1.SetActive(true);

        normalLine = Instantiate(refLine, p1.transform);
        normalLine.SetActive(true);
        normalLine.transform.localPosition = Vector3.zero;
        normalLine.transform.eulerAngles   = Vector3.zero;

        GameObject p2 = Instantiate(refPlane, cloneParent);

        p2.SetActive(true);

        normalLine = Instantiate(refLine, p2.transform);
        normalLine.SetActive(true);
        normalLine.transform.localPosition = Vector3.zero;
        normalLine.transform.eulerAngles   = Vector3.zero;

        // set the non serializable fields of the measure instance
        planeDistanceInstance.RestoreInstance(p1, p2);
    }