/// <summary> /// Получить коллекцию конструкций, соответствующих указанной конструкции-шаблону. /// </summary> /// <param name="template">Конструкция-шаблон.</param> /// <returns>Список конструкций (списков элементов).</returns> public List <List <ScAddress> > IterateElements(ConstructionTemplate template) { if (!knowledgeBase.IsAvaible) { return(new List <List <ScAddress> >()); } var cmd = new IterateElementsCommand(template); var rsp = (IterateElementsResponse)knowledgeBase.ExecuteCommand(cmd); return(rsp.Constructions); }
public List <ScAddress> FindApples() { List <ScAddress> apples = new List <ScAddress>(); //ищем адресс класса яблоко var classAppleAddress = this.FindElementAddress(class_apple); //ищем все экземпляры класса яблоко. Вот здесь обычно очень нужно находить подмаски масок элементов и сравнивать их var template = new ConstructionTemplate(classAppleAddress, ElementType.PositiveConstantPermanentAccessArc, ElementType.ConstantNode); var cmdFindApples = new IterateElementsCommand(template); var rspIterateAppels = (IterateElementsResponse)client.Send(cmdFindApples); //и при итерации добавляем в коллекцию адреса яблок (у нас в примере один, но суть можно уловить) foreach (var construction in rspIterateAppels.Constructions) { apples.Add(construction[2]); } return(apples); }
/// <summary> /// Получение произвольного идентификатора. узла /// </summary> /// <param name="scAddress">SC-адрес узла</param> /// <param name="identifierType">тип идентификатора</param> /// <returns>идентификатор</returns> public Identifier GetNodeIdentifier(ScAddress scAddress, Identifier identifierType) { Identifier identifier = Identifier.Invalid; if (knowledgeBase.IsAvaible) { var template = new ConstructionTemplate(scAddress, ElementType.ConstantCommonArc_c, ElementType.Link_a, ElementType.PositiveConstantPermanentAccessArc_c, GetNodeAddress(identifierType)); var command = new IterateElementsCommand(template); var response = (IterateElementsResponse)knowledgeBase.ExecuteCommand(command); if (response.Constructions.Count == 1) { ScAddress link = response.Constructions[0][2]; var commandGetLink = new GetLinkContentCommand(link); var responseGetLink = (GetLinkContentResponse)knowledgeBase.ExecuteCommand(commandGetLink); if (responseGetLink.Header.ReturnCode == ReturnCode.Successfull) { identifier = LinkContent.ToString(responseGetLink.LinkContent); } } } return(identifier); }
/// <summary> /// Функция для поиска значения ссылки по отношению, например в констукции bittersweet_apple => nrel_price:[5,5]; /// </summary> /// <param name="node">это адрес узла, например, bittersweet_apple у которого есть ссылка, например [5,5]</param> /// <param name="predicate">это отношение, например nrel_price, которое поясняет, что это за ссылка</param> /// <returns></returns> private double FindValueByPredicate(ScAddress node, ScAddress predicate) { double value = double.NaN; //итерируем конструкцию var template = new ConstructionTemplate(node, ElementType.ConstantCommonArc, ElementType.Link, ElementType.PositiveConstantPermanentAccessArc, predicate); var cmdIterateElements = new IterateElementsCommand(template); var rspIterateElements = (IterateElementsResponse)client.Send(cmdIterateElements); //если число конструкций равно 1, то ищем значение ссылки if (rspIterateElements.Constructions.Count() == 1) { var cmdGetValue = new GetLinkContentCommand(rspIterateElements.Constructions[0][2]); var rspGetValue = (GetLinkContentResponse)client.Send(cmdGetValue); value = LinkContent.ToDouble(rspGetValue.LinkContent); } if (predicate.Offset == 2087) { int i = 0; i = 1; } return(value); }
public List<ScAddress> FindApples() { List<ScAddress> apples = new List<ScAddress>(); //ищем адресс класса яблоко var classAppleAddress = this.FindElementAddress(class_apple); //ищем все экземпляры класса яблоко. Вот здесь обычно очень нужно находить подмаски масок элементов и сравнивать их var template = new ConstructionTemplate(classAppleAddress, ElementType.PositiveConstantPermanentAccessArc, ElementType.ConstantNode); var cmdFindApples = new IterateElementsCommand(template); var rspIterateAppels = (IterateElementsResponse)client.Send(cmdFindApples); //и при итерации добавляем в коллекцию адреса яблок (у нас в примере один, но суть можно уловить) foreach (var construction in rspIterateAppels.Constructions) { apples.Add(construction[2]); } return apples; }
/// <summary> /// Функция для поиска значения ссылки по отношению, например в констукции bittersweet_apple => nrel_price:[5,5]; /// </summary> /// <param name="node">это адрес узла, например, bittersweet_apple у которого есть ссылка, например [5,5]</param> /// <param name="predicate">это отношение, например nrel_price, которое поясняет, что это за ссылка</param> /// <returns></returns> private double FindValueByPredicate(ScAddress node, ScAddress predicate) { double value = double.NaN; //итерируем конструкцию var template = new ConstructionTemplate(node, ElementType.ConstantCommonArc, ElementType.Link, ElementType.PositiveConstantPermanentAccessArc, predicate); var cmdIterateElements = new IterateElementsCommand(template); var rspIterateElements = (IterateElementsResponse)client.Send(cmdIterateElements); //если число конструкций равно 1, то ищем значение ссылки if (rspIterateElements.Constructions.Count() == 1) { var cmdGetValue = new GetLinkContentCommand(rspIterateElements.Constructions[0][2]); var rspGetValue = (GetLinkContentResponse)client.Send(cmdGetValue); value = LinkContent.ToDouble(rspGetValue.LinkContent); } if (predicate.Offset == 2087) { int i = 0; i = 1; } return value; }