public void ImportScrewRule(int i)
    {
        rule = new AnimeRule(highlighter.animationRule.objNames);
        //Create markers
        //Transform sourceObj = GameObject.Find(rule.objNames[0]).transform;
        Transform targetObj = GameObject.Find(rule.objNames[1]).transform;

        rule.targetNormal = targetObj.TransformVector(highlighter.animationRule.targetNormal);
        rule.sourceNormal = transform.TransformVector(highlighter.animationRule.sourceNormal);
        //rule.targetCentroid = targetObj.TransformPoint(highlighter.animationRule.targetCentroid);
        rule.targetCentroid = targetObj.TransformPoint(highlighter.animationRule.contactlist[i]);
        rule.startpt        = highlighter.animationRule.startpt;
        rule.endpt          = highlighter.animationRule.endpt;
        rule.contactpt      = highlighter.animationRule.contactlist[i];

        marker_start                  = Instantiate(marker, transform.TransformPoint(rule.startpt), Quaternion.identity);
        marker_start.name             = "start";
        marker_end                    = Instantiate(marker, transform.TransformPoint(rule.endpt), Quaternion.identity);
        marker_end.name               = "end";
        marker_start.transform.parent = transform;
        marker_end.transform.parent   = transform;

        marker_contact = Instantiate(marker, targetObj.TransformPoint(rule.contactpt), Quaternion.identity);

        marker_contact.name             = "contact";
        marker_contact.transform.parent = targetObj;

        AlignObjects(rule);
        animeReady = true;
    }
 public void ImportGearRule()
 {
     rule              = new AnimeRule();
     rule.gearAngle    = highlighter.animationRule.gearAngle;
     rule.targetNormal = highlighter.animationRule.targetNormal;
     Transform[] gears = gameObject.GetComponentsInChildren <Transform>();
     GearSetup(rule.targetNormal, rule.gearAngle, gears);
     animeReady = true;
 }
    private void AlignObjects(AnimeRule rule)
    {
        Transform sourceObj = GameObject.Find(rule.objNames[0]).transform;
        Transform targetObj = GameObject.Find(rule.objNames[1]).transform;

        transform.rotation = Quaternion.FromToRotation(-rule.sourceNormal, rule.targetNormal) * transform.rotation;
        transform.position = rule.targetCentroid + rule.targetNormal;
        isAligned          = true;
    }
 // Start is called before the first frame update
 void Start()
 {
     cam           = Camera.main;
     animationRule = new AnimeRule();
     if (cam == null)
     {
         Debug.Log("camera null reference");
     }
 }