проблемка с деталями с исполнениями

Автор jkl, 02.12.25, 11:10:48

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

jkl

Добрый день формучане.
может кто подскажет как тут корректно все сделать.
суть такая есть деталь(листовая) у нее есть исполнения к примеру деталь, деталь-10, деталь-15, ... деталь-30
получаю с помощью IEmbodimentsManager количество исполнений и "for (int i = 0; i < embCount; i++)" таким образом прогоняю все исполнения, но получаю список отформатированный по имени, тоесть если создать исполнение к примеру [-12], оно будет i=2, а по факту индекс исполнения у нее другой(последний)
не могу понять как мне получить настоящий индекс исполнения CurrentEmbodimentIndex возвращает текущее открытое исполнение, не хотелось бы их все по очереди в начале открывать, делать текущим, потом выявлять его индекс т.к. есть сборки очень большие и с немалым кол-вом исполнений... так же бывают сборки где только одно из исполнений...

сама проблема заключается в том что когда я делаю чертеж (для дальнейшего вывода развертки)
var emb = assoc as IEmbodimentsManager;
if (emb != null)
{
   emb.SetCurrentEmbodiment(idx);
}

устанавливаю индекс исполнения к примеру той детали [-12] idx=2, то получаю совсем другое исполнение в моем примере это былоб исполнение -15 так как по мере создания исполнений i=2 является именно оно

Хмарик

Цитата: jkl от 02.12.25, 11:10:48к примеру деталь, деталь-10, деталь-15, ... деталь-30
У  каждой Детали должно быть Наименование и Обозначение:
Деталь 125698 например.
Деталь с исполнениями будет  выглядеть так: Деталь 125698-20
jkl, сделайте исполнения вашей детали "вручную", потом приладите программу.


jkl

да имеется и обозначение и наименование, на скриншотах видно отображение в компасе и отображение в моей программе.... тоесть все исполнения в моей программе расположены по имени.... но если в данном случае нажать вывести dxf боковину L1250, в моей программе получается индекс 4, создаю чертеж ассоциативного вида 4ого по индексу исполнения (emb.SetCurrentEmbodiment(idx)) то получаю см. скриншот не то исполнение, но если я удалю исполнение -04, и список и в компасе и в программе становиться в одном и том же порядке, то все корректно....

Хмарик

Исполнения должны быть ЗАВИСИМЫМИ тогда все будет хорошо.
У каждого ЗАВИСИМОГО исполнения Наименование должно быть одинаковые "Боковина"
Не может быть
"Боковина L1000"
"Боковина L1200"
...

Обозначение может быть таким
АКО 2096-1000
АКО 2096-1200
...


jkl

у нас вот такая структура, не всегда детали рисуем мы, и каждому говорить что делайте так, не представляется возможным, по этому приходится бороться с этим моментом... да и вообще не в этом дело, даже когда все исполнения зависимые и называются одинаково, все равно тоже самое... если исполнения называются 12345-123-деталь, 12345-038-деталь, 12345-258-деталь тоесть они будут в компасе в этом порядке, а когда я вывожу список в программу, они будут так  12345-038-деталь, 12345-123-деталь, 12345-258-деталь деталь будет выводиться не та, хотя подтягивается информация вся верная... а вот когда ставлю SetCurrentEmbodiment(idx) исполнение делается не то...

Хмарик

jkl, прошу, почти умоляю: начинайте предложения с Большой буквы.
Если в Компасе для Деталей и Сборок назначить вот так, то будет намного лучше.

jkl

Мне не очень подходят эти решения, т.к. не все детали рисуем мы, не могу всем говорить чтоб писали именно так как мне надо, тоесть даже если я сделаю так, то придут детали которые будут созданы так что дерево исполнений будет не по алфавиту и когда буду получать список исполнений, они будут по алфавиту и опять будет та же проблема... как моно получить список именно в последовательности как делает это компас...

Хмарик

Цитата: jkl от 02.12.25, 16:32:05именно в последовательности как делает это компас...
Если вам нравится как делает Компас - проблема в вашей программе. Ее надо пороть.
Как называется и откуда вы ее выхватили?

jkl

В общем я победил эту тему))) когда через EmbodimentsCount получаю кол-во исполнений и перебираю и получаю  IEmbodiment, они идут по алфавиту, а когда в чертеже вставляю вид и ставлю исполнение SetCurrentEmbodiment(embodimentIndex) там совсем другое исполнение.... но я в общем уже нашел как с этим бороться, это явно баг api... тоесть вся фишка в том, когда я получаю IEmbodimentsManager от IPart7 там по алфавиту, а когда от IAssociationView, то там так как это отображается в компасе в дереве исполнений.... теперь просто когда хочу вставить вид просто сопоставляю обозначение и получаю индекс какой мне надо....

p3452

При чем здесь API Компас, если проблема в Вашей программе - в организации "Дерева"?!

Нормальный "Нод" имеет три поля: Name, Text, Tag - храниете "исполнение" в Таg, а в Name и Text пишете то что Вам нужно, для удобства поиска и сортировки... 

jkl

Цитата: p3452 от 02.12.25, 20:47:39При чем здесь API Компас, если проблема в Вашей программе - в организации "Дерева"?!

Нормальный "Нод" имеет три поля: Name, Text, Tag - храниете "исполнение" в Таg, а в Name и Text пишете то что Вам нужно, для удобства поиска и сортировки... 
Как причем? это нормально, что в одном и том же интерфейсе, только полученный чуть по-другому, "дерево" по разному сортируется!? тут не в моей организации "дерева" я беру как даёт интерфейс. И нод у меня все что необходимо мне получает от интерфейса корректно и ни чего не сортирую самостоятельно, мне это незачем. В общем, что тут доказывать все решено, проблема позади... вы можете считать как хотите, у меня свое мнение по поводу api