Click here to Skip to main content
15,896,500 members
Articles / Desktop Programming / WPF

Integration: Kinematics + Digital Image Processing + 3D Graphics

Rate me:
Please Sign up or sign in to vote.
5.00/5 (4 votes)
9 Sep 2012CPOL12 min read 25.5K   3.4K   18  
Further promotion of integration ideas
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;


using CategoryTheory;
using DiagramUI;
using DiagramUI.Labels;
using MathGraph;
using DataPerformer.Interfaces;
using DiagramUI.Interfaces;

namespace DataPerformer
{
    /// <summary>
    /// Performer of all operations of time measure
    /// </summary>
    public class TimeMeasurePerformer
    {
       static private readonly string illegal = "Illegal sequence of time providers";
/*
        static IMeasure timeMeasure = new MeasureDerivation(a, new GetValue(GetTime), new ConstantMeasure(1), "Time");

        static private readonly Double a = 0;
*/
        static private void check(DataLink l)
        {
            object o = l.Object;
            if (o != null)
            {
                if (o is INamedComponent)
                {
                    INamedComponent nc = o as INamedComponent;
                    IDesktop d = nc.Desktop;
                    Check(d);
                }
            }
        }
        
        /// <summary>
        /// Sets link checker
        /// </summary>
        static public void SetLinkChecker()
        {
            DataLink.Checker = check;
        }
       
        /// <summary>
        /// Checks desktop
        /// </summary>
        /// <param name="desktop"></param>
        static public void Check(IDesktop desktop)
        {
            IDesktop d = desktop.Root;
            CheckObject ch = new CheckObject(checkLink);
            List<IObjectLabel> objects;
            List<IArrowLabel> arrows;
            PureDesktopPeer.GetFullList(d, out objects, out arrows);
            Digraph graph = PureDesktop.CreateDigraph(objects, arrows, null, ch);
            ArrayList loops = graph.Loops;
            foreach (DigraphLoop loop in loops)
            {
                check(loop);
            }
        }
/*
        static public void SetProvider(IDataConsumer consumer)
        {
            SetProvider(consumer, null);
        }

        static public void SetProvider(IDataConsumer consumer, ITimeMeasureProvider provider)
        {
            ITimeMeasureProvider p = provider;
            if (consumer is ITimeMeasureConsumer)
            {
                ITimeMeasureConsumer cons = consumer as ITimeMeasureConsumer;
                if (provider == null)
                {
                    cons.Time = timeMeasure;
                }
                else
                {
                    cons.Time = provider.Time;
                }
            }
            if (consumer is ITimeMeasureProvider)
            {
                p = consumer as ITimeMeasureProvider;
            }
            for (int i = 0; i < consumer.Count; i++)
            {
                IMeasurements m = consumer[i];
                if (m is IDataConsumer)
                {
                    IDataConsumer cons = m as IDataConsumer;
                    SetProvider(cons, p);
                    continue;
                }
                if (m is ITimeMeasureConsumer)
                {
                    ITimeMeasureConsumer cons = m as ITimeMeasureConsumer;
                    if (p == null)
                    {
                        cons.Time = timeMeasure;
                    }
                    else
                    {
                        cons.Time = p.Time;
                    }
                }
            }
        }*/


        static private void check(DigraphLoop loop)
        {
            ITimeMeasureProvider[] p = new ITimeMeasureProvider[] { getProvider(loop[0]), getProvider(loop[1]) };
            if (p[0] == null | p[1] == null)
            {
                return;
            }
            if (p[0] != p[1])
            {
                throw new Exception(illegal);
            }
        }

        static private ITimeMeasureProvider getProvider(DigraphPath path)
        {
            ITimeMeasureProvider p = null;
            for (int i = 0; i < path.Count - 1; i++)
            {
                ICategoryObject ob = path[i].CategoryObject;
                if (ob is ITimeMeasureProvider)
                {
                    p = ob as ITimeMeasureProvider;
                }
            }
            return p;
        }

        static private bool checkLink(object obj)
        {
            return obj is DataLink;
        }

        /// <summary>
        /// The unity
        /// </summary>
        /// <returns>Unity</returns>
        static private object Unity()
        {
            return (double)1;
        }

/*

        /// <summary>
        /// Measurement of time
        /// </summary>
        static public IMeasure TimeMeasure
        {
            get
            {
                return timeMeasure;
            }
        }

        /// <summary>
        /// Gets time
        /// </summary>
        /// <returns>The time</returns>
        static private object GetTime()
        {
            return StaticDataPerformer.Strategy.Time;
        }*/

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
Russian Federation Russian Federation
Ph. D. Petr Ivankov worked as scientific researcher at Russian Mission Control Centre since 1978 up to 2000. Now he is engaged by Aviation training simulators http://dinamika-avia.com/ . His additional interests are:

1) Noncommutative geometry

http://front.math.ucdavis.edu/author/P.Ivankov

2) Literary work (Russian only)

http://zhurnal.lib.ru/editors/3/3d_m/

3) Scientific articles
http://arxiv.org/find/all/1/au:+Ivankov_Petr/0/1/0/all/0/1

Comments and Discussions