示例#1
0
        private void AddNode(ShapeNode node, State<Shape, ShapeNode> state, string id)
        {
            Arc<Shape, ShapeNode> arc = state.Arcs.FirstOrDefault(a => node.Annotation.FeatureStruct.ValueEquals(a.Input.FeatureStruct));
            ShapeNode nextNode = node.GetNext(n => _filter(n.Annotation));
            State<Shape, ShapeNode> nextState;
            if (arc != null)
            {
                nextState = arc.Target;
                if (nextNode == node.List.End)
                {
                    nextState.IsAccepting = true;
                    nextState.AcceptInfos.Add(new AcceptInfo<Shape, ShapeNode>(id, (shape, match) => true, _shapeCount));
                }
            }
            else
            {
                nextState = nextNode == node.List.End ? _fsa.CreateAcceptingState(id, (shape, match) => true, _shapeCount) : _fsa.CreateState();
                FeatureStruct condition = node.Annotation.FeatureStruct.DeepClone();
                condition.Freeze();
                state.Arcs.Add(condition, nextState);
            }

            if (nextNode != node.List.End)
                AddNode(nextNode, nextState, id);
        }
示例#2
0
 public bool IsMapped(ShapeNode leftNode1, Ngram<Segment> target1, ShapeNode rightNode1, ShapeNode leftNode2, Ngram<Segment> target2, ShapeNode rightNode2)
 {
     if ((target1.Length == 0 || target1.First.Type == CogFeatureSystem.VowelType) && (target2.Length == 0 || target2.First.Type == CogFeatureSystem.VowelType))
         return _vowelMappings.IsMapped(leftNode1, target1, rightNode1, leftNode2, target2, rightNode2);
     if ((target1.Length == 0 || target1.First.Type == CogFeatureSystem.ConsonantType) && (target2.Length == 0 || target2.First.Type == CogFeatureSystem.ConsonantType))
         return _consMappings.IsMapped(leftNode1, target1, rightNode1, leftNode2, target2, rightNode2);
     return false;
 }
示例#3
0
 public static DiagramLink CreateLink(Diagram diagramNet, ShapeNode origin, ShapeNode destination, string toolTip = "#")
 {
     DiagramLink link = diagramNet.Factory.CreateDiagramLink(origin, destination);
     link.HeadShape = ArrowHeads.Tetragon;
     link.Brush = new SolidColorBrush(Colors.Green);
     link.Text = toolTip;
     UnSelectLinkLook(link);
     return link;
 }
示例#4
0
        public override IEnumerable <Tuple <ShapeNode, ShapeNode> > Apply(Match <Word, ShapeNode> match, Word output)
        {
            FeatureStruct fs = _simpleCtxt.FeatureStruct.DeepClone();

            fs.ReplaceVariables(match.VariableBindings);
            ShapeNode newNode = output.Shape.Add(fs);

            return(Tuple.Create((ShapeNode)null, newNode).ToEnumerable());
        }
示例#5
0
        public static bool TryGetMatchingSoundClass(this IEnumerable <SoundClass> soundClasses, SegmentPool segmentPool, Alignment <Word, ShapeNode> alignment, int seq, int col, out SoundClass soundClass)
        {
            ShapeNode       leftNode  = alignment.GetLeftNode(seq, col);
            Ngram <Segment> target    = alignment[seq, col].ToNgram(segmentPool);
            ShapeNode       rightNode = alignment.GetRightNode(seq, col);

            soundClass = soundClasses.FirstOrDefault(sc => sc.Matches(leftNode, target, rightNode));
            return(soundClass != null);
        }
示例#6
0
 private void styleNode(ShapeNode node)
 {
     node.Brush = new MindFusion.Drawing.SolidBrush(Color.White);
     node.Pen   = new MindFusion.Drawing.Pen(Color.FromArgb(68, 140, 255), 0.9f);
     node.TextFormat.Alignment     = StringAlignment.Center;
     node.TextFormat.LineAlignment = StringAlignment.Center;
     node.Font      = new Font("Segoe UI", 12, FontStyle.Bold, GraphicsUnit.Point, 0);
     node.TextBrush = new MindFusion.Drawing.SolidBrush(Color.Blue);
 }
示例#7
0
文件: NaturalClass.cs 项目: rmunn/cog
 public override bool Matches(ShapeNode leftNode, Ngram<Segment> target, ShapeNode rightNode)
 {
     foreach (Segment seg in target)
     {
         if (_fs.IsUnifiable(seg.FeatureStruct))
             return true;
     }
     return false;
 }
示例#8
0
        public void LoadFromNode(ShapeNode node)
        {
            richTextBox1.Enabled = true;
            richTextBox1.Text = node.ToolTip;
            richTextBox1.Tag = node;

            textBox1.Enabled = true;
            textBox1.Text = node.HyperLink;
        }
示例#9
0
 private static void AreEqual(ShapeNode expected, ShapeNode actual, string path)
 {
     Assert.AreEqual(expected == null ? "NULL" : "NOT_NULL", actual == null ? "NULL" : "NOT_NULL", path);
     if (expected != null && actual != null)
     {
         AreEqual(expected.Appearance, actual.Appearance, $"{path}/Appearance");
         AreEqual(expected.Geometry, actual.Geometry, $"{path}/Geometry");
     }
 }
示例#10
0
        private ShapeNode PickNextNode(ShapeNode root)
        {
            // TODO: Could auto-set geometry leaf nodes to Inactive.
            Predicate <TreeGraphNode> pred = (node) => {
                return(((ShapeNode)node).Value.Status == ShapeStatus.Active);
            };

            return(root.BreadthFirstSearch(pred) as ShapeNode);
        }
示例#11
0
        public void AllomorphEnvironments()
        {
            var vowel = FeatureStruct.New(Language.PhonologicalFeatureSystem).Symbol("voc+").Value;

            LexEntry headEntry = Entries["32"];
            Pattern <Word, ShapeNode> envPattern = Pattern <Word, ShapeNode> .New().Annotation(vowel).Value;

            var env = new AllomorphEnvironment(ConstraintType.Require, null, envPattern);

            headEntry.PrimaryAllomorph.Environments.Add(env);

            var word = new Word(headEntry.PrimaryAllomorph, FeatureStruct.New().Value);

            ShapeNode node         = word.Shape.Last;
            LexEntry  nonHeadEntry = Entries["40"];

            word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().CloneItems());
            Annotation <ShapeNode> nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last),
                                                                 nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.True);

            word.RemoveMorph(nonHeadMorph);

            nonHeadEntry = Entries["41"];
            word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().CloneItems());
            nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last),
                                          nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.False);

            headEntry.PrimaryAllomorph.Environments.Clear();

            env = new AllomorphEnvironment(ConstraintType.Require, envPattern, null);
            headEntry.PrimaryAllomorph.Environments.Add(env);

            word.RemoveMorph(nonHeadMorph);

            node         = word.Shape.First;
            nonHeadEntry = Entries["40"];
            word.Shape.AddRangeAfter(word.Shape.Begin,
                                     nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().CloneItems());
            nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev),
                                          nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.True);

            word.RemoveMorph(nonHeadMorph);

            nonHeadEntry = Entries["41"];
            word.Shape.AddRangeAfter(word.Shape.Begin,
                                     nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().CloneItems());
            word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.False);
        }
示例#12
0
            private static MDesign_Shape MDesign_Shape(ShapeNode shapeNode)
            {
                var result = new MDesign_Shape()
                {
                    Path  = MDesign_Path(shapeNode.Path),
                    Color = MDesign_Color(shapeNode.FabricStyle.Color)
                };

                return(result);
            }
示例#13
0
            private static XDesign_Shape XDesign_Shape(ShapeNode shapeNode)
            {
                var result = new XDesign_Shape()
                {
                    path  = XDesign_Path(shapeNode.Path),
                    color = XDesign_Color(shapeNode.FabricStyle.Color)
                };

                return(result);
            }
示例#14
0
        private static Match <ComplexConcParagraphData, ShapeNode> GetNextMatch(Match <ComplexConcParagraphData, ShapeNode> match)
        {
            ShapeNode nextNode = match.Span.GetEnd(match.Matcher.Direction);

            if (((FeatureSymbol)nextNode.Annotation.FeatureStruct.GetValue <SymbolicFeatureValue>("type")).ID != "bdry")
            {
                nextNode = nextNode.GetNext(match.Matcher.Direction);
            }
            return(match.Matcher.Match(match.Input, nextNode));
        }
示例#15
0
        public static bool IsComplex(this ShapeNode node)
        {
            SymbolicFeatureValue sfv;

            if (node.Annotation.FeatureStruct.TryGetValue(CogFeatureSystem.SegmentType, out sfv))
            {
                var symbol = (FeatureSymbol)sfv;
                return(symbol == CogFeatureSystem.Complex);
            }
            return(false);
        }
示例#16
0
        private ShapeNode generateShapeNode(IVisualizableNode visNode, ShapeNode parent)
        {
            var node = generateShapeNode(visNode);

            node.AttachTo(parent, AttachToNode.BottomCenter);
            var link = new DiagramLink(treeDiagram, parent, node);

            styleLink(link);
            treeDiagram.Links.Add(link);
            return(node);
        }
示例#17
0
 /// <summary>
 /// Move the visible space to show the specified note.
 /// </summary>
 public void FocusOn(ShapeNode node)
 {
     //float posX = node.Bounds.X;
     //float posY = node.Bounds.Y;
     float midX = node.Bounds.X + node.Bounds.Width / 2;
     float midY = node.Bounds.Y + node.Bounds.Height / 2;
     //datagramView.ScrollTo(posX, posY);
     CenterPoint(midX, midY);
     diagramView1.Diagram.Selection.Clear();
     diagramView1.Diagram.Selection.AddItem(node);
 }
示例#18
0
 public override bool Matches(ShapeNode leftNode, Ngram <Segment> target, ShapeNode rightNode)
 {
     foreach (Segment seg in target)
     {
         if (_fs.IsUnifiable(seg.FeatureStruct))
         {
             return(true);
         }
     }
     return(false);
 }
示例#19
0
        private void RenderShapeNodeStitch(Graphics graphics, ShapeNode shapeNode, Point origin)
        {
            if (shapeNode == null)
            {
                throw new ArgumentNullException(nameof(shapeNode));
            }

            var points = CreatePointArray(shapeNode.Path, origin);

            graphics.DrawPolygon(Pens.Black, points);
        }
示例#20
0
    public override Node Create(Vector2 pos)
    {
        ShapeNode node = CreateInstance <ShapeNode> ();

        node.rect = new Rect(pos.x, pos.y, 150, 340);
        node.name = "ShapeNode";

        node.CreateOutput("Texture", "TextureParam", NodeSide.Right, 50);

        return(node);
    }
        private void Unapply(Match <Word, ShapeNode> targetMatch, Range <ShapeNode> range, VariableBindings varBindings)
        {
            ShapeNode curNode = range.Start;

            for (int i = 0; i < _targetCount; i++)
            {
                curNode.Annotation.Optional = true;
                curNode.SetDirty(true);
                curNode = curNode.Next;
            }
        }
示例#22
0
 public SamplingOffsetCalculator(IEnumerable <Point2Dmm[]> clusters)
 {
     _clusters   = clusters.Select(c => makeDense(c.Select(OffsetCalculator.AsPoint)).ToArray()).ToList();
     _shapeNodes = ShapeNode.From(_clusters).ToList();
     /**/
     foreach (var node in _shapeNodes)
     {
         var mesh = createMesh(node);
         _meshes.Add(mesh);
     }/**/
 }
示例#23
0
文件: Stemmer.cs 项目: JRetza/cog
        private bool CheckStemWholeWord(Match <Word, ShapeNode> match)
        {
            Annotation <ShapeNode> stemAnn = match.Input.Stem;
            ShapeNode end = stemAnn.Range.End;

            while (end.Type() == CogFeatureSystem.ToneLetterType)
            {
                end = end.Prev;
            }
            return(!match.Range.Contains(Range <ShapeNode> .Create(stemAnn.Range.Start, end)));
        }
示例#24
0
 public static void UnSelectNode(ShapeNode node)
 {
     UnSelectNodeLook(node);
     foreach (var link in node.OutgoingLinks)
     {
         UnSelectLinkLook(link);
     }
     foreach (var link in node.IncomingLinks)
     {
         UnSelectLinkLook(link);
     }
 }
示例#25
0
 public bool IsMapped(ShapeNode leftNode1, Ngram <Segment> target1, ShapeNode rightNode1, ShapeNode leftNode2, Ngram <Segment> target2, ShapeNode rightNode2)
 {
     if ((target1.Length == 0 || target1.First.Type == CogFeatureSystem.VowelType) && (target2.Length == 0 || target2.First.Type == CogFeatureSystem.VowelType))
     {
         return(_vowelMappings.IsMapped(leftNode1, target1, rightNode1, leftNode2, target2, rightNode2));
     }
     if ((target1.Length == 0 || target1.First.Type == CogFeatureSystem.ConsonantType) && (target2.Length == 0 || target2.First.Type == CogFeatureSystem.ConsonantType))
     {
         return(_consMappings.IsMapped(leftNode1, target1, rightNode1, leftNode2, target2, rightNode2));
     }
     return(false);
 }
 void NodesFromLib()
 {
     shapeList.Items.Clear();
     foreach (var shape in shapeLibrary.Shapes)
     {
         var node = new ShapeNode();
         node.Shape = shape;
         node.Text  = node.Shape.Id;
         node.Resize(80, 40);
         shapeList.Items.Add(node);
     }
 }
示例#27
0
        private void CreareNod(int index, float x, float y)
        {
            counter = counter + 1;                                                    //incrementam numarul de noduri (porti logice)
            ShapeNode nod = diagram1.Factory.CreateShapeNode(x - 16, y - 16, 70, 70); // pozitia x, pozitia y, latima, inaltimea

            nod.Transparent    = true;
            nod.EnabledHandles = AdjustmentHandles.Move;           //sa se poata muta nodu pe diagrama fara a fi schimbata dimensiunea nodului
            nod.Tag            = index + "|" + counter.ToString(); // tagu contine indexul porti logice din listview1 si numarul de la counter

            nod.ImageAlign               = MindFusion.Drawing.ImageAlign.TopLeft;
            nod.TextFormat.Alignment     = StringAlignment.Center;
            nod.TextFormat.LineAlignment = StringAlignment.Far;
            nod.AnchorPattern            = PoartaLogica.Ancorare(index); // daca modificam dimensiunea 70, 70 trebuie modificate si puncetele de ancorare

            //setam imaginea si textul pentru nod (poarta logica)
            if (index == 0) //AND
            {
                nod.Image = imageList1.Images[0];
                nod.Text  = "AND";
            }
            else if (index == 1) //OR
            {
                nod.Image = imageList1.Images[1];
                nod.Text  = "OR";
            }
            else if (index == 2) //XOR
            {
                nod.Image = imageList1.Images[2];
                nod.Text  = "XOR";
            }
            else if (index == 3) //NOT
            {
                nod.Image = imageList1.Images[3];
                nod.Text  = "NOT";
            }
            else if (index == 4) //INPUT 0
            {
                nod.Image    = imageList1.Images[4];
                nod.Text     = labelCounter + "#IN: 0";
                labelCounter = labelCounter + 1;
            }
            else if (index == 5) //INPUT 1
            {
                nod.Image    = imageList1.Images[5];
                nod.Text     = labelCounter + "#IN: 1";
                labelCounter = labelCounter + 1;
            }
            else if (index == 6) //terminator
            {
                nod.Image = imageList1.Images[6];
                nod.Text  = "OUTPUT";
            }
        }
示例#28
0
        public ShapeTrie(Term pattern)
        {
            Contract.Requires(pattern != null && pattern.Groundness != Groundness.Type);
            Pattern = pattern;
            root    = CreateDontCareNodes();

            //// If there are no don't care nodes, then create a dummy node.
            if (root == null)
            {
                root = new ShapeNode();
            }
        }
 /// <summary>
 /// Gets all of the string representations that match the specified segment.
 /// </summary>
 /// <param name="node">The phonetic shape node.</param>
 /// <returns>The string representations.</returns>
 public IEnumerable <string> GetMatchingStrReps(ShapeNode node)
 {
     foreach (CharacterDefinition cd in this)
     {
         if (cd.FeatureStruct.IsUnifiable(node.Annotation.FeatureStruct))
         {
             foreach (string representation in cd.Representations)
             {
                 yield return(representation);
             }
         }
     }
 }
示例#30
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (RootNode == null)
            {
                var rootNode = new ShapeNode(treeDiagram);
                rootNode.Bounds = new RectangleF(40, 15, 18, 10);
                styleNode(rootNode);
                rootNode.Text = $"No {nameof(RootNode)}!";

                treeDiagram.Nodes.Add(rootNode);
            }
        }
示例#31
0
        private void RenderShapeNode(Graphics graphics, ShapeNode shapeNode, Point origin)
        {
            if (shapeNode == null)
            {
                throw new ArgumentNullException(nameof(shapeNode));
            }

            using var brush = new SolidBrush(ToDrawingColor(shapeNode.FabricStyle.Color));

            var points = CreatePointArray(shapeNode.Path, origin);

            graphics.FillPolygon(brush, points);
        }
 private static void MoveNodesAfter(Shape shape, ShapeNode cur, Span <ShapeNode> span)
 {
     foreach (ShapeNode node in shape.GetNodes(span).ToArray())
     {
         if (node.Type() == HCFeatureSystem.Segment)
         {
             node.Remove();
             cur.AddAfter(node);
             node.SetDirty(true);
         }
         cur = node;
     }
 }
示例#33
0
        static void Transform(int id, Vec3S32 offset, int[,] rot, Dictionary <int, Node> nodes)
        {
            Node node = nodes[id];

            switch (node.Type)
            {
            // traverse the multiple children nodes
            case NodeType.Group:
                for (int i = 0; i < node.Children.Length; i++)
                {
                    Transform(node.Children[i], offset, rot, nodes);
                }
                break;

            // transform might or might not change parent transformation
            case NodeType.Transform:
                TransformNode trans = (TransformNode)node;
                string        raw;

                if (trans.FrameAttribs.TryGetValue("_t", out raw))
                {
                    string[] bits = raw.SplitSpaces(3);
                    offset.X += int.Parse(bits[0]);
                    offset.Y += int.Parse(bits[1]);
                    offset.Z += int.Parse(bits[2]);
                }
                if (trans.FrameAttribs.TryGetValue("_r", out raw))
                {
                    byte flags = byte.Parse(raw);
                    rot = new int[3, 3];

                    rot[0, (flags >> 0) & 3] = (flags & 0x10) != 0 ? -1 : 1;
                    rot[1, (flags >> 2) & 3] = (flags & 0x20) != 0 ? -1 : 1;
                    rot[2, 2] = (flags & 0x40) != 0 ? -1 : 1;
                }
                Transform(node.Children[0], offset, rot, nodes);
                break;

            // apply transformation to model
            case NodeType.Shape:
                ShapeNode shape = (ShapeNode)node;
                shape.Model.X = offset.X;
                shape.Model.Y = offset.Y;
                shape.Model.Z = offset.Z;
                if (rot != null)
                {
                    shape.Model.Rot = rot;
                }
                break;
            }
        }
示例#34
0
        /// <summary>
        /// Creates nodes in the trie to capture all the don't care (unbound) locations in the pattern.
        /// </summary>
        private ShapeNode CreateDontCareNodes()
        {
            int       i;
            bool      isExpanded;
            ShapeNode n;

            ShapeNode[] children;
            return(Pattern.Compute <ShapeNode>(
                       (x, s) => x.Groundness == Groundness.Variable ? x.Args : null,
                       (x, ch, s) =>
            {
                if (x.Symbol.Arity == 0)
                {
                    if (Executer.IsUnboundPatternVariable(x))
                    {
                        return new ShapeNode(true);
                    }
                    else
                    {
                        return null;
                    }
                }

                Contract.Assert(x.Symbol.IsDataConstructor);
                isExpanded = false;
                foreach (var m in ch)
                {
                    if (m != null)
                    {
                        isExpanded = true;
                        break;
                    }
                }

                if (!isExpanded)
                {
                    return null;
                }

                children = new ShapeNode[x.Symbol.Arity];
                i = 0;
                foreach (var m in ch)
                {
                    children[i++] = m;
                }

                n = new ShapeNode();
                n.AddRefinement((UserSymbol)x.Symbol, children);
                return n;
            }));
        }
示例#35
0
        private void ProcessSyllableWithMaximalOnset(ShapeNode startNode, ShapeNode endNode, Shape newShape)
        {
            ShapeNode node       = startNode;
            ShapeNode onsetStart = node;

            while (node.Type() == CogFeatureSystem.ConsonantType && node != endNode.Next)
            {
                node = node.Next;
            }
            ShapeNode onsetEnd = node.Prev;

            if (onsetStart != node && onsetStart != onsetEnd)
            {
                ShapeNode n = onsetStart;
                if (onsetStart != onsetEnd.List.First)
                {
                    for (; n != onsetEnd.Next; n = n.Next)
                    {
                        string onsetStr = n.GetNodes(onsetEnd).StrRep();
                        if (_initialOnsets.Value.Contains(onsetStr))
                        {
                            break;
                        }
                    }

                    // TODO: ambiguous onset, what should we do? For now, we just assume maximal onset
                    if (n == onsetEnd.Next)
                    {
                        n = onsetStart;
                    }
                }
                if (n != onsetStart)
                {
                    if (onsetStart.Prev.Type() == CogFeatureSystem.ConsonantType)
                    {
                        CombineWith(newShape.GetLast(nd => nd.Type() == CogFeatureSystem.ConsonantType), onsetStart, n.Prev);
                    }
                    else
                    {
                        Combine(CogFeatureSystem.Coda, newShape, onsetStart, n.Prev);
                        Annotation <ShapeNode> prevSyllableAnn = newShape.Annotations.Last(ann => ann.Type() == CogFeatureSystem.SyllableType);
                        prevSyllableAnn.Remove();
                        newShape.Annotations.Add(prevSyllableAnn.Range.Start, newShape.Last, FeatureStruct.New().Symbol(CogFeatureSystem.SyllableType).Value);
                    }
                    startNode = n;
                }
            }

            ProcessSyllable(startNode, endNode, newShape);
        }
示例#36
0
文件: SegmentPool.cs 项目: rmunn/cog
        public Segment Get(ShapeNode node)
        {
            if (node == null)
                return null;

            return _segments.GetOrAdd(node.StrRep(), s =>
                {
                    FeatureStruct fs = node.Annotation.FeatureStruct.DeepClone();
                    fs.RemoveValue(CogFeatureSystem.OriginalStrRep);
                    fs.RemoveValue(CogFeatureSystem.SyllablePosition);
                    fs.Freeze();
                    return new Segment(fs);
                });
        }
示例#37
0
        private void Unapply(Match <Word, ShapeNode> targetMatch, Span <ShapeNode> span, VariableBindings varBindings)
        {
            int i = 0;

            foreach (Constraint <Word, ShapeNode> constraint in _analysisRhs.Children.Cast <Constraint <Word, ShapeNode> >())
            {
                ShapeNode     node = targetMatch.GroupCaptures["target" + i].Span.GetStart(targetMatch.Matcher.Direction);
                FeatureStruct fs   = node.Annotation.FeatureStruct.DeepClone();
                fs.PriorityUnion(constraint.FeatureStruct);
                node.Annotation.FeatureStruct.Union(fs, varBindings);
                node.SetDirty(true);
                i++;
            }
        }
示例#38
0
        public override bool Matches(ShapeNode leftNode, Ngram<Segment> target, ShapeNode rightNode)
        {
            string strRep = target.ToString();
            if (_ignoreModifiers)
                strRep = StripModifiers(strRep);

            if (leftNode != null && leftNode.Type() == CogFeatureSystem.AnchorType && _normalizedSegments.Contains(string.Format("#{0}", strRep)))
                return true;

            if (rightNode != null && rightNode.Type() == CogFeatureSystem.AnchorType && _normalizedSegments.Contains(string.Format("{0}#", strRep)))
                return true;

            return _normalizedSegments.Contains(strRep);
        }
示例#39
0
        private void rearrange(ShapeNode rootNode)
        {
            if (treeLayout == null)
            {
                treeLayout = new TreeLayout(rootNode,
                                            TreeLayoutType.Centered,
                                            false,
                                            TreeLayoutLinkType.Rounded,
                                            TreeLayoutDirections.TopToBottom,
                                            10, 5, true, new SizeF(10, 10));
            }

            treeLayout.Arrange(treeDiagram);
        }
示例#40
0
        public bool IsMapped(ShapeNode leftNode1, Ngram<Segment> target1, ShapeNode rightNode1, ShapeNode leftNode2, Ngram<Segment> target2, ShapeNode rightNode2)
        {
            if (_threshold == 0 || target1.Length == 0 || target2.Length == 0)
                return false;

            IWordAligner aligner = _project.WordAligners[_alignerID];

            foreach (Segment seg1 in target1)
            {
                foreach (Segment seg2 in target2)
                {
                    if (aligner.Delta(seg1.FeatureStruct, seg2.FeatureStruct) <= _threshold)
                        return true;
                }
            }

            return false;
        }
示例#41
0
        public XMLNode(ShapeNode _node)
        {
            node = _node;
            pnode = new ProxyNode(node);
            Text = node.Text;
            HyperLink = node.HyperLink;
            Tooltip = node.ToolTip;

            NodeFont = XMLFont.FromFont(node.Font);
            TextColor = System.Drawing.ColorTranslator.ToHtml(pnode.TextColor);
            FillColor = System.Drawing.ColorTranslator.ToHtml(pnode.FillColor);
            FrameColor = System.Drawing.ColorTranslator.ToHtml(pnode.FrameColor);

            FrameThickness = (int)pnode.FrameThickness;
            Width = (int)pnode.Width;
            Height = (int)pnode.Height;
            X = (int)pnode.X;
            Y = (int)pnode.Y;
            ZIndex = pnode.ZIndex;
        }
示例#42
0
 /// <summary>
 /// Is note1 to the right of note2?
 /// </summary>
 public bool Right(ShapeNode node2)
 {
     if (node.Bounds.X > node2.Bounds.X) return true;
     else return false;
 }
示例#43
0
        // отрисовка диаграммы
        private void DrawDiagram()
        {
            FrameDiagram.ClearAll();
            List<Frame> curList = ClassFactory.kBase.FrameList();
            foreach (Frame frm in curList)
            {
                // рисование вершин
                ShapeNode node = new ShapeNode { Text = frm.FrameName, Id = frm.FrameId, Brush = new SolidBrush(Color.PowderBlue), Shape = Shapes.Ellipse };
                node.Font = new System.Drawing.Font("Microsoft Sans Serif", 9, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
                node.TextFormat.Alignment = StringAlignment.Center;
                node.TextFormat.LineAlignment = StringAlignment.Center;
                node.SetBounds(new RectangleF(new PointF(frm.X, frm.Y), new SizeF(100, 30)), true, true);
                FrameDiagram.Nodes.Add(node);

                //if (frm.IsA != null)
                //{
                //    DiagramNode from, destination;
                //    from=
                //    DiagramLink link=new DiagramLink(FrameDiagram, origin, destination);

                //    //FrameDiagram.Links.Add(
                //}

            }

            foreach (Frame frm in curList)
            {
                foreach (Slot slot in frm.FrameSlots)
                    if (slot.SlotType == Classes.SlotType.Frame)
                    {
                        //значит, это субфрейм. Надо нарисовать дугу :)
                        ShapeNode nodeSubframe = findNodeById(slot.frameId);
                        ShapeNode nodeMainFrame = findNodeById(frm.FrameId);
                        DiagramLink link = new DiagramLink(FrameDiagram, nodeSubframe, nodeMainFrame);
                        link.Text = "Sub";
                        link.TextColor = Color.DarkBlue;
                        link.Pen.Color = Color.Blue;
                        FrameDiagram.Links.Add(link);
                    }
            }

            //link.HeadShape = FrameDiagram.Nodes[1];
            foreach (ShapeNode node in FrameDiagram.Nodes)
            {
                Frame from = ClassFactory.kBase.FrameList().Find(f => f.FrameId == (int)node.Id);
                if (from.IsA != null)
                {
                    if (from.IsA.frameId != -1)
                    {
                        ShapeNode nodeTo = null;
                        int idTo = from.IsA.frameId;

                        foreach (ShapeNode innerNode in FrameDiagram.Nodes)
                            if (((int)innerNode.Id) == idTo)
                            {
                                nodeTo = innerNode;
                                break;
                            }
                        DiagramLink link = new DiagramLink(FrameDiagram, node, nodeTo);
                        link.Text = "Is_a";
                        link.TextColor = Color.DarkRed;
                        link.Pen.Color = Color.Red;
                        FrameDiagram.Links.Add(link);
                    }
                }
                //if (node.GetBounds().Contains(e.X, e.Y))
                //{
                //    ClassFactory.kBase.FrameList().Find(f => f.FrameId == (int)node.Id).X = e.X;
                //    ClassFactory.kBase.FrameList().Find(f => f.FrameId == (int)node.Id).Y = e.Y;
                //}
            }
            //FrameDiagram.Links.
        }
示例#44
0
 private static void SelectNodeLook(ShapeNode node)
 {
     node.Brush = new LinearGradientBrush(Colors.Green, Colors.BurlyWood, 20); // Brushes.Green;
     node.ZIndex = 20;
 }
示例#45
0
 private static void UnSelectNodeLook(ShapeNode node)
 {
     node.Brush = new LinearGradientBrush(Colors.Yellow, Colors.BurlyWood, 20);// Brushes.Yellow;
     node.ZIndex = 10;
 }
示例#46
0
        public static bool TryGetMatchingSoundClass(this IEnumerable<SoundClass> soundClasses, SegmentPool segmentPool, ShapeNode node, out SoundClass soundClass)
        {
            Annotation<ShapeNode> stemAnn = ((Shape) node.List).Annotations.First(ann => ann.Type() == CogFeatureSystem.StemType);
            ShapeNode left = null;
            if (stemAnn.Span.Contains(node) || node.Annotation.CompareTo(stemAnn) > 0)
            {
                ShapeNode leftNode = node.GetPrev(NodeFilter);
                if (leftNode != null)
                    left = stemAnn.Span.Contains(leftNode) ? leftNode : node.List.Begin;
            }

            Ngram<Segment> target = stemAnn.Span.Contains(node) ? segmentPool.Get(node) : Segment.Anchor;

            ShapeNode right = null;
            if (stemAnn.Span.Contains(node) || node.Annotation.CompareTo(stemAnn) < 0)
            {
                ShapeNode rightNode = node.GetNext(NodeFilter);
                if (rightNode != null)
                    right = stemAnn.Span.Contains(rightNode) ? rightNode : node.List.End;
            }

            soundClass = soundClasses.FirstOrDefault(sc => sc.Matches(left, target, right));
            return soundClass != null;
        }
示例#47
0
        void nodeSelected_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ShapeNode node = sender as ShapeNode;
            if (_selectedLink != null)
            {
                DiagramHelper.UnSelectLink(_selectedLink);
                _selectedLink = null;
            }

            if(node == _selectedNode)
            {
                DiagramHelper.UnSelectNode(_selectedNode);
                _selectedNode = null;
                return;
            }

            if (_selectedNode != null)
                DiagramHelper.UnSelectNode(_selectedNode);
            _selectedNode = node;
            DiagramHelper.SelectNode(node);
        }
示例#48
0
 private void AssertShapeNodeEqual(ShapeNode actualNode, string expectedStrRep, FeatureSymbol expectedType)
 {
     Assert.That(actualNode.StrRep(), Is.EqualTo(expectedStrRep));
     Assert.That(actualNode.Type(), Is.EqualTo(expectedType));
 }
示例#49
0
文件: SegmentPool.cs 项目: rmunn/cog
 public Segment GetExisting(ShapeNode node)
 {
     return GetExisting(node.StrRep());
 }
示例#50
0
        void linkSelect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (_selectedNode != null)
            {
                DiagramHelper.UnSelectNode(_selectedNode);
                _selectedNode = null;
            }

            DiagramLink link = sender as DiagramLink;
            if (link == _selectedLink)
            {
                DiagramHelper.UnSelectLink(link);
                _selectedLink = null;
                return;
            }

            if (_selectedLink != null)
                DiagramHelper.UnSelectLink(_selectedLink);
            _selectedLink = sender as DiagramLink;
            DiagramHelper.SelectLink(_selectedLink);
        }
示例#51
0
 private static bool NodeFilter(ShapeNode node)
 {
     return node.Type().IsOneOf(CogFeatureSystem.VowelType, CogFeatureSystem.ConsonantType, CogFeatureSystem.AnchorType);
 }
示例#52
0
 private Shape3D TestConvShape(ShapeNode node)
 {
     AppearanceNode appearance = (AppearanceNode)node.appearance.node;
     MaterialNode material = appearance.material.node as MaterialNode;
     if (node.geometry.node is SphereNode) {
         SphereNode sphereNode = (SphereNode)node.geometry.node;
         Sphere3D sphere = new Sphere3D();
         sphere.Position = new Graph3D.Framework.Math.Vector3D(0, 0, 0);
         sphere.Radius = sphereNode.radius.value;
         SetAppearance(sphere, appearance);
         return sphere;
     }
     if (node.geometry.node is IndexedFaceSetNode) {
         IndexedFaceSetNode faceSetNode = (IndexedFaceSetNode)node.geometry.node;
         Shape3DComposite composite = new Shape3DComposite();
         int facesCount = 0;
         for (int i = 0; i < faceSetNode.coordIndex.length; i++)
             if (faceSetNode.coordIndex[i] == -1) facesCount++;
         MFVec3f coords = ((CoordinateNode)faceSetNode.coord.node).point;
         for (int faceOffsetIndex = 0; faceOffsetIndex < faceSetNode.coordIndex.length; faceOffsetIndex++) {
             Triangle3D triangle;
             triangle = new Triangle3D();
             SFVec3f a = coords[faceSetNode.coordIndex[faceOffsetIndex]];
             SFVec3f b = coords[faceSetNode.coordIndex[faceOffsetIndex + 1]];
             SFVec3f c = coords[faceSetNode.coordIndex[faceOffsetIndex + 2]];
             triangle.A = new Vector3D(a.x, a.y, a.z);
             triangle.B = new Vector3D(b.x, b.y, b.z);
             triangle.C = new Vector3D(c.x, c.y, c.z);
             SetAppearance(triangle, appearance);
             composite.Add(triangle);
             faceOffsetIndex += 3;
             while (faceSetNode.coordIndex[faceOffsetIndex] != -1) {
                 faceOffsetIndex++;
             }
         }
         triangles += facesCount;
         return composite;
     }
     return null;
 }
示例#53
0
文件: SoundClass.cs 项目: rmunn/cog
 public abstract bool Matches(ShapeNode leftNode, Ngram<Segment> target, ShapeNode rightNode);
示例#54
0
        public bool IsMapped(ShapeNode leftNode1, Ngram<Segment> target1, ShapeNode rightNode1, ShapeNode leftNode2, Ngram<Segment> target2, ShapeNode rightNode2)
        {
            if (_mappings.Count == 0)
                return false;

            foreach (string strRep1 in GetStrReps(target1))
            {
                foreach (string strRep2 in GetStrReps(target2))
                {
                    if (strRep1 == strRep2)
                        return true;

                    Dictionary<string, List<Tuple<Environment, Environment>>> segments;
                    List<Tuple<Environment, Environment>> contexts;
                    if (_mappingLookup.TryGetValue(strRep1, out segments) && segments.TryGetValue(strRep2, out contexts))
                        return contexts.Any(ctxt => CheckEnvironment(ctxt.Item1, leftNode1, rightNode1) && CheckEnvironment(ctxt.Item2, leftNode2, rightNode2));
                }
            }
            return false;
        }
示例#55
0
 private bool CheckEnvironment(Environment env, ShapeNode leftNode, ShapeNode rightNode)
 {
     return (env.LeftEnvironment == null || env.LeftEnvironment == leftNode.Type()) && (env.RightEnvironment == null || env.RightEnvironment == rightNode.Type());
 }
示例#56
0
 /// <summary>
 /// The default constructor.
 /// </summary>
 public ProxyNode(ShapeNode note)
 {
     node = note;
 }
示例#57
0
 // закидываем создаем новый фрейм и отображаем
 private void добавитьФреймшаблонToolStripMenuItem_Click(object sender, EventArgs e)
 {
     AddFrameFrm frm = new AddFrameFrm();
     if (frm.ShowDialog()== DialogResult.OK)
     {
         Random rand = new Random();
         Frame frame = new Frame { FrameId = ClassFactory.kBase.GetMaxNodeId(1), FrameName = frm.TextBox };
         //frame.FrameSlots.Add(new Slot { SlotName = "slot" + ClassFactory.kBase.GetMaxSlotId(1), SlotId = 0, SlotInheritance = SlotInherit.Override, SlotType = Classes.SlotType.Integer });
         //frame.FrameSlots.Add(new Slot { SlotName = "slo1t" + ClassFactory.kBase.GetMaxSlotId(1), SlotId = 1, SlotInheritance = SlotInherit.Same, SlotType = Classes.SlotType.Frame });
         ShapeNode node = new ShapeNode { Text = frame.FrameName, Id = frame.FrameId, Brush = new SolidBrush(Color.PowderBlue), Shape = Shapes.Ellipse };
         node.SetBounds(new RectangleF(new PointF(rand.Next(100, 400), rand.Next(100, 400)), new SizeF(100, 30)), true, true);
         node.Font = new System.Drawing.Font("Microsoft Sans Serif", 9, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
         node.TextFormat.Alignment = StringAlignment.Center;
         node.TextFormat.LineAlignment = StringAlignment.Center;
         ClassFactory.isSaved = false;
         frame.X = node.GetBounds().X;
         frame.Y = node.GetBounds().Y;
         FrameDiagram.Nodes.Add(node);
         ClassFactory.kBase.AddFrame(frame);
         TreeNode frameitem = new TreeNode { Text = frame.FrameName };
         FrameTreeView.Nodes.Add(frameitem);
     }
 }
示例#58
0
 /// <summary>
 /// Is note1 higher than note2?
 /// </summary>
 public bool Higher(ShapeNode node2)
 {
     if (node.Bounds.Y < node2.Bounds.Y) return true;
     else return false;
 }
示例#59
0
 public bool IsMapped(ShapeNode leftNode1, Ngram<Segment> target1, ShapeNode rightNode1, ShapeNode leftNode2, Ngram<Segment> target2, ShapeNode rightNode2)
 {
     return _segmentMappingsComponents.Any(sm => sm.IsMapped(leftNode1, target1, rightNode1, leftNode2, target2, rightNode2));
 }
示例#60
0
 public WordSegmentViewModel(ShapeNode node)
 {
     _node = node;
     _strRep = node.OriginalStrRep();
 }