Практический семинар Tekla Structures 2017

Включить фильтр выбора средствами API

Ответить
Аватара пользователя
Антон
Сообщения: 31
Регистрация: 22 дек 2011, 14:23

Включить фильтр выбора средствами API

Сообщение Антон » 12 июн 2020, 11:01

Здравствуйте.
Кто сможет подсказать как средствами API создать свой фильтр выбора деталей, желательно не обращаясь к файловой системе (не создавать файл с параметрами фильтра, загружать и применять его). Для чего это нужно: хочу сделать макрос, который устанавливает фильтр выбора по определенному свойству выбранной детали. Например выбрал балку в стадии 2, запускаю макрос и он устанавливает текущее значение фильтра выбора как: Деталь -> Стадия -> Равно -> 2
20-06-12 10.56.17.png

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: Включить фильтр выбора средствами API

Сообщение CuPo>I<a » 15 июн 2020, 11:01

Как-то так. Проблемы с кириллицей

Код: Выделить всё

ModelObjectEnumerator moe = model.GetModelObjectSelector().GetObjectsByFilter(Helpers.CreateFilterByWISerialNumber(WIPos.ToString()));

Код: Выделить всё

public static class Helpers
    {
        public static FilterExpression CreateFilterByWISerialNumber(string WIPos)
        {
            var filterExpression1 = new BinaryFilterExpression(
                new PartFilterExpressions.PositionNumber(), StringOperatorType.IS_EQUAL, new StringConstantFilterExpression(WIPos));

            var filterExpression2 = new BinaryFilterExpression(
                new ObjectFilterExpressions.Type(), NumericOperatorType.IS_EQUAL,
                new NumericConstantFilterExpression(TeklaStructuresDatabaseTypeEnum.PART));

            var filterDefinition = new BinaryFilterExpressionCollection
            {
                new BinaryFilterExpressionItem(filterExpression1, BinaryFilterOperatorType.BOOLEAN_AND),
                new BinaryFilterExpressionItem(filterExpression2)
            };

            return filterDefinition;
        }
    }
    

Аватара пользователя
Антон
Сообщения: 31
Регистрация: 22 дек 2011, 14:23

Re: Включить фильтр выбора средствами API

Сообщение Антон » 15 июн 2020, 12:51

Спасибо, пока не разобрался как это работает, попробую вечером

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: Включить фильтр выбора средствами API

Сообщение CuPo>I<a » 16 июн 2020, 11:56

если есть кириллица - создавайте файлики.
ЗЫ А вообще, предлагаю не использовать форумы, на которых воруют посты из других источников. Сам бы не писал тут, но народ спрашивает, а в ответ тишина от админов

Аватара пользователя
Антон
Сообщения: 31
Регистрация: 22 дек 2011, 14:23

Re: Включить фильтр выбора средствами API

Сообщение Антон » 18 июн 2020, 22:31

Решили задачу с помощью CuPo>I<ы, если кому нужен код, работает в Текле 21.1 , на более поздних нужны небольшие изменения.
Макрос устанавливает фильтр выбора, по классу (цвету) выбранной детали

// Generated by Tekla.Technology.Akit.ScriptBuilder
using Tekla.Structures.Model;
using Tekla.Structures.Model.UI;
using Tekla.Technology.Akit.UserScript;
using Tekla.Technology.Scripting;
using System.Text;
using System.IO;


namespace Tekla.Technology.Akit.UserScript
{
public class Script
{
public static void Run(Tekla.Technology.Akit.IScript akit)
{
Model model = new Model();
Tekla.Structures.Model.UI.ModelObjectSelector selected = new Tekla.Structures.Model.UI.ModelObjectSelector();
Tekla.Structures.Model.ModelObjectEnumerator manyO = (selected.GetSelectedObjects() as ModelObjectEnumerator);
manyO.MoveNext();

if (manyO.Current != null)
{
var pp = (manyO.Current as Part);
string sCLASS = "";
pp.GetReportProperty("CLASS_ATTR", ref sCLASS);


string sysPath = "";
sysPath = model.GetInfo().ModelPath;
sysPath = Path.Combine(sysPath, "attributes");
sysPath = Path.Combine(sysPath, "Anton_Class.SObjGrp");
StreamWriter FF = new StreamWriter(sysPath, false, Encoding.Default);
FF.WriteLine("TITLE_OBJECT_GROUP");
FF.WriteLine("{");
FF.WriteLine(" Version= 1.05");
FF.WriteLine(" Count= 1");
FF.WriteLine(" SECTION_OBJECT_GROUP");
FF.WriteLine(" {");
FF.WriteLine(" 0");
FF.WriteLine(" 1");
FF.WriteLine(" co_part");
FF.WriteLine(" proCLASS");
FF.WriteLine(" albl_Class");
FF.WriteLine(" ==");
FF.WriteLine(" albl_Equals");
FF.WriteLine(" " + sCLASS);
FF.WriteLine(" 0");
FF.WriteLine(" Empty");
FF.WriteLine(" }");
FF.WriteLine("}");
FF.Close();

akit.ValueChange("main_frame", "sel_filter", "Anton_Class");
}



}
}
}

Ответить
phpbb3 styles

Вернуться в «Создание в Tekla Structures пользовательских компонентов»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость