Вставка детали в сборку из стандартных библеотек

Автор JohnLeon, 17.03.06, 02:20:18

« предыдущая - следующая »

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

JohnLeon

Здравствуйте, общий вопрос звучит следующим образом. Как вставить в сборку деталь из библеотеки посреством внешнего управляющего приложения (например болт из constr3d.rtw). Хочется заметить что просмотрел все вопросы на форуме хоть как то связанные с библеотеками и ответа на данный вопрос не нашел, также в поставке с Компас нет подобного примера, а справка SDK слишком кратко объясняет работу функций (без контекста так сказать) и не поясняет алгоритм работы с ними.
Библеотека подключается с помощью
libID:=AppKomp.ksAttachKompasLibrary('constr3d.rtw');
С помощью команды
AppKomp.ksExecuteKompasLibraryCommand(libID,1);
запускается диалоговое окно но как указать параметры болта и собственно осуществить их ввод не известно. Возможно я ошибаюсь в самом подходе. Буду благодарен любому ответвету хоть сколько нибудь преближающему к поставленной цели. В заранее спасибо...

IronMaxxx

Если я Вас правильно понял, Вы ошибаетесь в самом подходе. Для вставки болта из конструкторской библиотеки не нужно ее подключать и запускать из своего приложения. Модель стандартного крепежного изделия из библиотеки можно вставить как и любую другую деталь, т.е. с помощью метода ksDocument3D::SetPartFromFile, только в качестве пути файла следует указать полный путь к модели (путь к файлу библиотеки и путь к модели внутри самой библиотеки). Вот например: "C:\Program Files\ASCON\KOMPAS-3D V8\Libs\constr3d.l3d|Болты|Болт_1".
Если Вы не знаете точно путь к нужной Вам модели внутри библиотеки, его не сложно узнать. Для этого вручную вставьте в сборку требуемый крепежный элемент и в Свойствах компонента посмотрите Файл-источник - это и будет искомый полный путь.
Еще один нюанс. При программной вставке библиотечного элемента все его параметры установлены по умолчанию (для болта это диаметр, длина, высота шапочки, различные конструктивные исполнения и пр. и пр.). Чтобы их изменить на требуемые, нужно получить указатель на интерфейс динамического массива внешних переменных модели. Это делается следующим образом:
ksVariableCollection iVarColl(iPart.VariableCollection);
где iPart - интерфейс детали, вставленной из библиотеки. Далее уже несложно изменять значение любого элемента массива. Для того, чтобы быстро узнать, какие именно переменные находятся в массиве для конкретной библиотечной детали, нужно вставить эту деталь из библиотеки моделей (подчеркиваю - не из конструкторской, а из библиотеки документов; для крепежа это "constr3d.l3d") и просмотреть набор внешних переменных. Это и будет массив, указатель на который Вы получите вызовом метода ksPart::VariableCollection.

JohnLeon

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

JohnLeon

Новые вопросы действительно появились. Да, деталь вставляется, но при этом необходимо самому следить за соответствием ГОСТу. То есть удалось вставить болт, просмотрел все переменные и оказалось, что этими переменными в принципе можно описать болт отвечающий любому ГОСТу (или не отвечающему). Отсюда вполне резонный вопрос, в библиотеке где-то наверно имеется таблица с помощью которой приводятся параметры к значениям в ГОСТе. Собственно вопрос состоит в следующем, каким образом можно вставить деталь и установить параметры оперируя понятиями ГОСТа, тоесть само наименование ГОСТа, исполнение, клас точности, диаметр длинна. Ну а все остальные параметры, чтобы брались из ГОСТа. И возможно ли это, а то самому составлять базу данных стандартных изделей очень уж не охота...

IronMaxxx

Вы абсолютно правы. Контроль за соответсвием стандартной детали ГОСТу полностью возложен на разработчика.
А таблицы параметров, конечно, есть. Посмотрите в "C:\Program Files\ASCON\KOMPAS-3D V8\Libs\load\" - один из файлов "*.loa" и будет набором точных параметров для Вашего болта (или чего-нибудь еще). Какой именно файл, это уж смотрите сами. Это все обычные текстовые файлы, поэтому считывание из них данных не составит труда.

JohnLeon

Спасибо IronMax за отзывчивость. Да но отсюда вытекает еще пара вопросов. Если разработчики Компас решили записывать таблицы ГОСТов в обыкновенные текстовые файлы, то это верно не зря. Разбирать текстовый файл гораздо неприятнее, чем работать с каким нибудь класическим драйвером БД. При прочтении файлов *.loa было замеченно, что все они записанны в четком формате, а следовательно и разбираются одинаковым образом. Вопрос в том имеются ли разработанные средства прочтения файлов *.loa и/или какой нибудь язык запросов подобный SQL для работы ними. Второй вопрос в том каким образом можно узнать какой файл какому ГОСТу соответствует и что делать с параметрами не указанными в файле loa на соответствующий ГОСТ. Другими словами как мне узнать какой ГОСТ и исполнение какие параметры задает и при этом не составлять собственную таблицу.
Также не хотелось бы изобретать велосипед и если имеется пример кода и желание им поделится, то это было бы замечательно. Среда разработки особого значения не имеет, но приоритетность следующая: Delphi, Builder, VC  и далее все остальное.
Еще раз большое спасибо за участие IronMax!

IronMaxxx

Цитата: JohnLeon от 17.03.06, 21:39:00
Если разработчики Компас решили записывать таблицы ГОСТов в обыкновенные текстовые файлы, то это верно не зря. Разбирать текстовый файл гораздо неприятнее, чем работать с каким нибудь класическим драйвером БД.

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

Цитата: JohnLeon от 17.03.06, 21:39:00
При прочтении файлов *.loa было замеченно, что все они записанны в четком формате, а следовательно и разбираются одинаковым образом. Вопрос в том имеются ли разработанные средства прочтения файлов *.loa и/или какой нибудь язык запросов подобный SQL для работы ними.

Да, такие средства в КОМПАС-Мастер имеются. Примеры есть в SDK: пример разработки пользовательской библиотеки гайки и, по-моему, даже где-то отдельный пример для работы с текстовыми БД.
Но, на мой взгляд, они не рациональны. Я лично никогда не пользуюсь КОМПАСовскими методами для считывания данных из файла. Всегда обходился своими процедурами, конкретно под каждую задачу. Написать такую, думаю, не составит труда - так как в файле обычный текст (вот в чем, собственно, и главное удобство).

Цитата: JohnLeon от 17.03.06, 21:39:00
Второй вопрос в том каким образом можно узнать какой файл какому ГОСТу соответствует и что делать с параметрами не указанными в файле loa на соответствующий ГОСТ. Другими словами как мне узнать какой ГОСТ и исполнение какие параметры задает и при этом не составлять собственную таблицу.

В каждом файле есть комментарии, или же указаны наименования ГОСТов. Вот по ним нужно и смотреть. А параметры должны быть все, по крайней мере все необходимые для построения модели.

JohnLeon

Ну по поводу наилучшего хранения информации в текстовых файлах, это вопрос конечно спорный. Потому как изначально для хранения данных и использовались именно текстовые файлы, а вот потом уже начали придумавать различные извращения и не зря. По поводу работы драйверов БД под различными платформами вопрос тоже не однозначный, потому как кроме Windows и КОМПАС работать не будет, да и кстате сам компас держит БД в mdb. Так что вопрос о совместимости вряд ли уместен, а вот удобство ну хотя бы по универсальности использования гораздо выше и размер исходного кода при работе с класическими драйверами БД гораздо меньше.
Описание в начале каждого файла я видел, но я также и заметил что во первых названия файлов совпадают с ГОСТом который они описывают. Но при этом я не нашел файла с теми ГОСТами, которые предлагаются на выбор в компасе при ручной вставки, того же самого приславутого болта, не понятно где их искать. И когда я говорил, что пораметры для различных ГОСТов разные я имел ввиду, что в loa таблицах указаны не все пораметры, так как в некоторых ГОСТах этих отверстий или других конструктивных элементов просто нет, поэтому и не указаны. Поэтому я хотел узнать какие пораметры указаны для того, чтобы создать набор функций которые будут вставлять детали задавая ГОСТ и исполнение и основные параметры указывающиеся в обозначении. Для этого необходим общий подход и уникальная реализация не подходит. Повторюсь составлять свои таблицы ГОСТов не резонно, так как они уже имеются в КОМПАСе, а вот все ГОСТы в файлах loa мне почему то найти не удалось (может быть плохо смотрел).
Самое обидное что при всем удобстве библиотек, они не совсем корректны причем на мой взгляд в существенных моментах. Например таких как отсутствие обозначения резьбы, хоть в параметрах и имеется длинна резьбы, но самого обозначения в детали нет, а это приводит к неккоректности чертежей составленных с использованием библиотечных элементов входящих в состав КОМПАСа. Хотелось бы спросить имеется ли возможность программно исправить компонент входящий в библиотеку и если это возможно, то насколько подробно необходимо знать внутренюю реализацию.
Конечно, данные вопросы уже далеко выходят за рамки данной темы, но все таки...

IronMaxxx

Различные "извращения", как Вы говорите, начали придумывать тогда, когда возникла необходимость в БД хранить рисунки, видео, сложные структуры данных, но даже и сейчас, если Ваши данные ограничиваются только текстовым форматом, не стоит использовать для их хранения классические базы. Кроме того, не забывайте, что главное назначение современных БД - это удобство сортировки, хранения и поиска (выборки) данных. А это имеет решающее значение только если количество записей перевалило за тысячи или десятки тысяч. Ну зачем Вам использовать мощнейшую БД, для хранения нескольких десятков строк параметров болта?
Относительно размера исходного кода... Он, может быть, и меньше (хотя любая из моих процедур по считыванию данных из файла не превышала сотни строк кода), но посмотрите на объем исполнительного файла после подключения к нему модулей для работы с любым форматом баз данных - он значительно увеличится. Такой ли большой после этого выигрыш? Кроме того сами данные в текстовом формате занимают очень мало места на жестком диске (в среднем меньше 1 Кб/файл), тогда как любой другой формат коммерческой БД, содержащий те же данные будет однозначно больше. А если у Вас в проекте 100, 200, 500 таких файлов?
А еще часто возникают проблемы с версиями БД: что-то не открывается, что-то теряется... Поэтому использование классических БД для работы с текстовыми (или числовыми) данными считаю неоправданным.

JohnLeon

Здравствуйте, я не хотел заострять внимание на способе хранения данных. Потому как по этому вопросу неприменно у каждого есть свое мнение и огромное количество доказательств своей правоты. И все в общем сводится к важности тех или иных фактов для конкретного разработчика. Мне наиболее интересен последний вопрос.
Цитата: JohnLeon от 18.03.06, 02:43:30
Хотелось бы спросить имеется ли возможность программно исправить компонент входящий в библиотеку и если это возможно, то насколько подробно необходимо знать внутренюю реализацию.

Да ну и наверное если возможно, то как...

IronMaxxx

Цитата: JohnLeon от 18.03.06, 02:43:30
Хотелось бы спросить имеется ли возможность программно исправить компонент входящий в библиотеку и если это возможно, то насколько подробно необходимо знать внутренюю реализацию.


Может я неправильно понял вопрос, но через ksVariableCollection Вы как раз его и изменяете...

JohnLeon

Цитата: IronMaxxx от 18.03.06, 19:56:36
Может я неправильно понял вопрос, но через ksVariableCollection Вы как раз его и изменяете...

Да вопрос действительно другой. Можно ли добавить операции в деталь имеющуюся в библиотеке. Например, тот же болт быполнен без условного обозначения резьбы (уже в библиотеке) при выполнении ассоциативного чертежа сборки в которой имеется такой болт резьба обозначаться не будет. Это не правильно. Можно ли добавить к той моделе, которая имеется в библеотеке операцию обозначения резьбы. Не переделывая модель и исправив при этом содержимое библиотеки. А переменные всего лишь задают параметры построения самой модели, с их помощью новых элементов не добавишь. Надеюсь мне удалось разъяснить свой вопрос. IronMax, спасибо за быстрое реагирование и внимание.

IronMaxxx

Цитата: JohnLeon от 20.03.06, 11:12:28
Да вопрос действительно другой. Можно ли добавить операции в деталь имеющуюся в библиотеке. Например, тот же болт быполнен без условного обозначения резьбы (уже в библиотеке) при выполнении ассоциативного чертежа сборки в которой имеется такой болт резьба обозначаться не будет. Это не правильно. Можно ли добавить к той моделе, которая имеется в библеотеке операцию обозначения резьбы. Не переделывая модель и исправив при этом содержимое библиотеки. А переменные всего лишь задают параметры построения самой модели, с их помощью новых элементов не добавишь. Надеюсь мне удалось разъяснить свой вопрос. IronMax, спасибо за быстрое реагирование и внимание.


Вообще-то задача решаема, только для этого опять же придется писать свою библиотеку. Порядок ее действий следующий: вставляем деталь из "constr.l3d", присваиваем внешним переменным нужные значения, и, на уже перестроенной модели, формируем изображение резьбы. Для длин резьбового участка придется формировать свои базы. Вот только... ммм... я не знаю есть ли возможность программного создания условного изображения резьбы - никогда этим не занимался.

JohnLeon

Тоесть если я правильно понял, исправить саму библиотеку constr.l3d невозможно. Но на базе этой библиотеки можно построить свою уже с обозначением резьбы. Это конечно выход, но добавляет проблем. Да я думаю, что условного обозначения резьбы в крепежных деталях нет только лишь потому, что обозначение резьбы недавно (точно не помню в какой версии КОМПАС) появились. Я тоже еще не смотрел каким образом можно сделать условное обозначение резьбы, но не думаю, что возникнут сложности. Должно быть все также как и с остальными операциями.

IronMaxxx

Цитата: JohnLeon от 20.03.06, 12:04:02
Тоесть если я правильно понял, исправить саму библиотеку constr.l3d невозможно.


Нет, почему же, это возможно. Просто я сначала об этом даже не подумал. Ее можно изменить как любую другую бибиотеку моделей КОМПАС. Т.е. можно будет "наложить" на модель болта условное обозначений резьбы, а длину и диаметр этого обозначения вынести во внешние переменные. Но в любом случае надстройку, чтобы программно управлять этими значениями (аналог конструкторской библиотеки "constr.rtw"), придется писать самому, потому как изменить "constr.rtw" без перекомпиляции невозможно.