Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Visual Basic (VB, VBA, VB.NET) => Тема начата: olden от 12.10.06, 08:35:42

Название: Исходники, описания, примеры
Отправлено: olden от 12.10.06, 08:35:42
Предлагаю в этот топик скидывать свои примеры с описанием (по возможности) или кусочки программ  использования разных функций и команд. Так как по справке не всегда понятно использование той или иной команды. И в примерах можно не найти все что нужно. Я думаю что многие оценят стоимость данного топика.
Название: Re:Исходники, описания, примеры
Отправлено: olden от 12.10.06, 08:38:33
Начну первым.
Три примера по созданию панели инструментов (VB6).
Название: Re:Исходники, описания, примеры
Отправлено: Маратович от 14.10.06, 11:11:23
Предлагаю небольшое дополнение - Обязательно указывать для какой версии написаны исходники. (хотя-бы на чём проверены)
Название: Re:Исходники, описания, примеры
Отправлено: olden от 14.10.06, 19:50:11
Извеняюсь. Исходники выше проверены на Компас-3D 8+
Название: Re:Исходники, описания, примеры
Отправлено: olden от 24.10.06, 23:14:24
Люди отзавитесь. Что никому не интересна эта тема? Почему никто не помогает развиваться этому топику? Не стесняйтесь.
Название: Re:Исходники, описания, примеры
Отправлено: Lito 2 от 25.10.06, 18:15:32
Эх, исходников жалко, стока труда ;)
Название: Re:Исходники, описания, примеры
Отправлено: olden от 25.10.06, 19:05:48
необязательно выкладывать полность весь исходник. Достаточно в исходнике осветить какую нибудь тему. Например: работа с базой данных, как нарисовать линию, запросы к системе, создание панелей свойств и так далее и тому подобное.
Название: Re:Исходники, описания, примеры
Отправлено: Гость от 26.10.06, 16:14:19
Вот здесь несколько прикладных библиотек http://www.kompas-sapr.com/index.php?option=com_content&task=blogcategory&id=15&Itemid=45 там ниппеля, пуансоны, фиксаторы, установочные кольца, винты, втулки, гайки и опоры
Название: Re:Исходники, описания, примеры
Отправлено: olden от 04.11.06, 09:18:35
Как создать пространственную кривую - ломаную. VB6. Компас-3D 8+ SP2.
история:
1.   Создать ломанную
2.   Добавить вершину между двумя вершинами
3.   Удалить вершину
4.   Получить параметры вершины с индексом
5.   Узнать координаты вершин ломаной
Название: Re:Исходники, описания, примеры
Отправлено: olden от 11.11.06, 11:20:42
Всяко-разно. VB6. Компас-3D 8+ SP2.
история:
1. Получить индекс объекта в дереве построения по имени и типу объека
Название: Re:Исходники, описания, примеры
Отправлено: olden от 16.11.06, 23:40:58
Друзья помогайте. Я не в состоянии охватить все темы API. Или уже никто ничего не пишит под компас.
Название: Re:Исходники, описания, примеры
Отправлено: IronMaxxx от 17.11.06, 10:51:43
Цитата: olden от 16.11.06, 23:40:58
Друзья помогайте. Я не в состоянии охватить все темы API. Или уже никто ничего не пишит под компас.

Пишут. Но, перед тем, как выкладывать, исходники "причесать" надо, комментарии туда напихать всякие, а это - время... А время - это... :)
Название: Re:Исходники, описания, примеры
Отправлено: olden от 17.11.06, 18:43:22
Цитата: IronMaxxx от 17.11.06, 10:51:43
исходники "причесать" надо
Тогда неприменно ждем «после визита парикмахера».  :)  :)  :)
Название: Re:Исходники, описания, примеры
Отправлено: Andrei от 23.11.06, 11:55:38
Исходник и исполняемый файл для Компас-7 и Delphi 7, реализующие вызов Компаса, построение плоских и пространственных графических моделей по заданным размерам. Для плоского чертежа реализована штриховка и простановка размеров. Пример демонстрировался на региональном семинаре "Аскон-Центр" в Липецком государственном техническом университете 21 ноября 2006 г, включен в учебное пособие по дисциплине "Программное обеспечение САПР" для студентов специальности "Автомобиле- и тракторостроение" специализации "САПР" (правда, в более документированном виде).

С уважением - автор.
Название: Сохранение чертежей в формате gif
Отправлено: userascon2 от 08.12.06, 11:04:49
Программа автоматически сохраняет все чертежи Компаса в выбранной папке в формате gif (рисунков).

Высылаю файлы проекта, необходимо только добавить в проект VB в меню Project-References элементы:
OLE-Automation
Kompas6API2D5COM
Kompas6API3D5COM
Kompas6API5
Kompas6Constants
Kompas6Constants3D

просто напротив них поставить галочки, и запускайте, должно работать.

Au revoir.
Название: Re:Исходники, описания, примеры
Отправлено: olden от 08.12.06, 20:18:15
Спасибо Всем, кто помогает в развитии этой темы. И до новых встреч на страницах этой темы.
Название: Re:Исходники, описания, примеры
Отправлено: olden от 24.01.07, 07:22:35
Я смотрю тема заглохла. У меня тоже неполучается. Но обещаю что буду продолжать вылаживать свои описания. Люди подключайтесь. Вылаживайте. Зачем мучатся в одиночку. Если разобрался, поделись мыслями своими.
Название: Re:Исходники, описания, примеры
Отправлено: Nesh от 23.02.07, 17:14:27
Вот мой код содания массива операций по концетрической сетке. при работе Компас выдает сообщение: "Вырожденый обьект". Что я делаю не так.
Пример кода:
mass1:=ksEntity(part.NewEntity(o3d_circularCopy));
     massoSetke:=ksCircularCopyDefinition(mass1.GetDefinition);
     massoSetke.SetAxis(entityAxisPLane);
   entityCollection:=ksEntityCollection(part.EntityCollection(o3d_bossExtrusion));
   ent:=ksEntity(part.NewEntity(o3d_bossExtrusion));
      massoSetke.GetOperationArray();
    ent:=ksEntity(entityCollection.GetByIndex(0)) (так как у меня только одна операция);
Kompas.ksMessage(ent.name);
mass1.Create;
Название: Re:Исходники, описания, примеры
Отправлено: woodyfon от 03.03.07, 22:46:05
Просмотрел ответы, а примеров то нет! Если можно , то приведите пример на Delphi код построения одной линии в Компас 7+ со всеми подключенными модулями и интерфейсами.
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 04.03.07, 00:12:07
Вот пример. правда для 8+. но надеюсь поможет. делфи7
Название: Re:Исходники, описания, примеры
Отправлено: woodyfon от 04.03.07, 19:14:14
Спасибо за отклик!  ;)Пример помог разобраться в процедурах построения графических примитивов. Но если создавать библиотеки вручную (я имею ввиду прорисовывать каждый фрагмент схемы :((()), то времени не наберешься. Можно сделать так, чтобы опрашивать лист Компаса, где нарисованы некоторые фрагменты и дольше их использовать( вернее сгнерированный код) в создании библиотеки. Если возможно, то наведите примерный код программы (на  Delphi  :shu:). Заранее спасибо!
Название: Re:Исходники, описания, примеры
Отправлено: nalex от 10.03.07, 19:13:08
Господа! Исходники это конечно хорошо, но подскажите литературу, где можно почитать о программировании библиотек! :?: Хотелось бы не только самому освоить, но и научить студентов!
Название: Re:Исходники, описания, примеры
Отправлено: olden от 11.03.07, 13:01:10
Единственная, в своем роде, литература (которая мне встречалась) - это Компас-Мастер SDK. Она идет вместе с компасом. И данный форум. ВСЕ! А чуть не забыл. И вот эта ссылка: http://support.ascon.ru/download.php?act=cat&cat=3#97   .Ну а теперь точно ВСЕ!
Название: Re:Исходники, описания, примеры
Отправлено: nowi от 11.03.07, 14:23:12
Цитата: olden от 11.03.07, 13:01:10
Единственная, в своем роде, литература (которая мне встречалась) - это Компас-Мастер SDK. Она идет вместе с компасом. И данный форум. ВСЕ! А чуть не забыл. И вот эта ссылка: http://support.ascon.ru/download.php?act=cat&cat=3#97   .Ну а теперь точно ВСЕ!

Мда... оно очень старое, еще для 5-й версии.
Название: Re:Исходники, описания, примеры
Отправлено: woodyfon от 11.03.07, 16:31:03
Вы хотите библиотеки писать в чем API, Auto или COM. Если в AUTO, то литература по ссілке то, что надо. Советую в API: там и кода меньше и она более понятна.
Название: Re:Исходники, описания, примеры
Отправлено: olden от 29.04.07, 23:47:19
Что-то все забыли про эту тему. Люди отзавитесь. Не уж то никто ничего не пишит?
Название: Re:Исходники, описания, примеры
Отправлено: Маратович от 02.05.07, 11:58:27
Пишем потихоньку......
Только не сезон для глобальных вещей.
Вот у нас в строительной конторе - сезон попёр. И соответственно директор достал весь проектный отдел (2 чел) времени чаю хлебнуть нету, а писать программу темболее. Да ещё один перец поставил вместо 5.11 -  8+ . Ну соответственно коэфициент производительности упал до минимума, и ещё гордится........ скоро по чайнику получит.
Пишу дома вечерами, пару часиков в VB-6. Прога специфическая, в основном связь с екселем, ну и чертит потихоньку.
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 03.05.07, 18:32:35
вот пример библиотеки с формой на делфи7
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 04.05.07, 18:13:57
Пример выбора элемента детали методом Choose
Название: Re:Исходники, описания, примеры
Отправлено: Death от 08.05.07, 15:02:33
Если интересуют примеры, написанные на Visual C++, на следующей неделе выложу программу, генерирующую по чертежу в КОМПАСЕ команды для ЧПУ.
Название: Re:Исходники, описания, примеры
Отправлено: Bumsi от 08.05.07, 17:24:03
Как и обещал - построение эвольвенты  !!!! извините, причесал как мог.... :o:
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 08.05.07, 18:21:38
Пример построения 3д модели детали с резьбой Патрубок
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 08.05.07, 18:30:40
Пример построения операции приклеить выдавливанием с указанием пользователем грани
Название: Re:Исходники, описания, примеры
Отправлено: Astasheva от 11.05.07, 11:01:13
Приветик. Подскажите, пожалуйста, как создать сборку в автоматизированном режиме в компас 8+ из Дельфи.
Название: Re:Исходники, описания, примеры
Отправлено: Nesh от 14.05.07, 14:32:20
Цитата: Death от 08.05.07, 15:02:33
Если интересуют примеры, написанные на Visual C++, на следующей неделе выложу программу, генерирующую по чертежу в КОМПАСЕ команды для ЧПУ.
Очень даже интересует. Киньте, подалуйста на форум, или мне на мыло!!!
Заранее спасибо
Название: Re:Исходники, описания, примеры
Отправлено: olden от 14.05.07, 18:49:38
Цитата: Death от 08.05.07, 15:02:33
Если интересуют примеры, написанные на Visual C++, на следующей неделе выложу программу, генерирующую по чертежу в КОМПАСЕ команды для ЧПУ.

Конечно очень интересует. UpLoad прям сюда.
Название: Re:Исходники, описания, примеры
Отправлено: Death от 18.05.07, 10:10:50
Вот обещанный генератор кодов ЧПУ. Не всё в этой программе идеально, но для примера должно хватить и этого.
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 05.06.07, 18:33:56
пример заполнения основной надписи текущего чертежа и присваивания ему имени файла
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 14.06.07, 14:19:07
пример использования функции UserSelectEntity
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 14.06.07, 19:18:53
Пример создания произвольного ассоциативного вида с модели
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 22.06.07, 10:38:47
примеры использования функции UserGetPlacementAndEntity:
1. Выбор цилиндрической поверхности и плоской.
2. Выбор двух цилиндрических поверхностей.
Название: Re:Исходники, описания, примеры
Отправлено: Death от 22.06.07, 16:44:18
Финальная версия библиотеки, генерирующей команды ЧПУ. Генерирует команды как для ЧПУ, так и для машины плазменной резки типа "Портал". В проекте присутствуют все файлы, необходимые для успешной компиляции. Это даже не пример, а готовая программа! Кроме того, архив содержит краткую справку, которая поможет быстро разобраться во всех функциях библиотеки. Разработано на Visual C++ 8.0 для КОМПАС V7. Не пропустите!
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 27.09.07, 18:01:09
Пример построения операции по сечениям с указанием направления в виде цилиндрической спирали. Делфи7. Компас 9
Название: Re:Исходники, описания, примеры
Отправлено: olden от 05.10.07, 12:20:16
Пример типа Дерево модели. Если че пишите на личку будем исправлять. Компас 9SP1
Название: Re:Исходники, описания, примеры
Отправлено: Judzhin от 30.10.07, 09:21:16
Две библиотеки для Компас-Макро. Одна скрывает начала координат и координатные плоскости текущей сборки и всех входящих деталей/подсборок. Вторая показывает.
2.11.07 Для ускорения работы отключена обработка стандартных компонентов. Добавлены два макроса для обработки только деталей/подсборок первого уровня.
Название: Re:Исходники, описания, примеры
Отправлено: sorockinalex от 15.11.07, 11:26:13
Друзья! Кто-нибудь помогите! Напишите как мне пошагово настроить Delphi7 для создания библиотек и приложений. Открываю файл примера step1, нажимаю F9, но он не компилируется - вылетает с ошибкой...
Название: Re:Исходники, описания, примеры
Отправлено: Lito 2 от 15.11.07, 11:34:08
Цитата: sorockinalex от 15.11.07, 11:26:13
Друзья! Кто-нибудь помогите! Напишите как мне пошагово настроить Delphi7 для создания библиотек и приложений. Открываю файл примера step1, нажимаю F9, но он не компилируется - вылетает с ошибкой...
Это конечно не та ветка, но все же отвечу.
Смотри документ "Компиляция библиотек под К9.doc"
"Delphi Automation
1.   Подключите новую библиотеку (файл с расширением tlb). Для этого выполните следующее.
1.1.   Вызовите команду Project - Import type library - Add.
1.2.   Выберите файл kAPI5.tlb.
2.   Укажите путь к корневой папке размещения примеров (Unit dir name).
3.   Нажмите кнопку Create Unit.
4.   Переименуйте полученный файл в KsTLB.pas и отредактируйте его первую строку."
:w:
Название: Re:Исходники, описания, примеры
Отправлено: sorockinalex от 15.11.07, 11:52:04
Друзья! Помогите пожалуйста! Поситал файлик sdk.hlp но ничего не понял как сделать библиотеку. Загрузил файл примеры step1, нажал f9, но он не компилируется - вылетает с ошибкой. Читал ещё какой-то файл "компиляция под компас 9", не понял. Поэтому прошу помощи у Вас. Напишите по пунктам что нужно сделать, чтобы настроить delphi 7 для создания библиотек и приложений компас. От самого начала и до компиляции простейшей библиотеки step1. Очень нужна ваша помощь! Замучался уже!
Название: Re:Исходники, описания, примеры
Отправлено: sorockinalex от 15.11.07, 22:16:29
Разобрался! Скачал файл 3 метра с pdf файлами.
Не знаю почему компас не включает их в свой дистрибутив... :%:

Но есть проблемка:
1) Делаю всё по примеру. Создал каталог C:\RTWExamples\Example1
В нём лежат все файлы pas и dcu (из папки include SDK), там же сохранён мой проект библиотеки.
2) код программы:

PROJECT1.dpr
library Project1;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }



{$R 'Example1.res' 'Example1.rc'}

uses
  SysUtils,
  Classes,
  Windows,
  LDefin2D,
  ksAuto,
  KsTLB,
  command in 'command.pas';

{$E rtw}

{$R *.res}
  var iKompas : KompasObject;

  function LibraryName: PChar; pascal;
begin
result := 'Библиотека Example1 на Delphi';
end;

function LibraryID: UINT; pascal;
begin
result := LIB_ID;
end;

procedure LibraryEntry (command: WORD); pascal;
begin
iKompas := KompasObject(CreateKompasObject);
if iKompas <> nil then
Exit;

case command of
1 : iKompas.ksMessage ( 'Болт 7798' );
2 : iKompas.ksMessage ( 'Шайба 18123' );
3 : iKompas.ksMessage ( 'Гайка 6393' );
4 : iKompas.ksMessage ( 'Гайка 5915' );
5 : iKompas.ksMessage ( 'Гайка 15521' );
6 : iKompas.ksMessage ( 'Штифт 10774' );
end;

iKompas.ksMessage('ПРИВЕТ!!!');
iKompas := nil;
end;

exports
LibraryName name 'LIBRARYNAME',
LibraryEntry name 'LIBRARYENTRY';

begin
end.


COMMAND.rh

#ifndef __COMMAND_RH
#  define __COMMAND_RH

#define LIB_ID    1000
#define COMMAND_1 1
#define COMMAND_2 2
#define COMMAND_3 3
#define COMMAND_4 4
#define COMMAND_5 5
#define COMMAND_6 6

#endif



EXAMPLE1.rc
#ifndef __COMMAND_RH
#include "command.rh"
#endif

// Описание меню команд библиотеки
// Примечание: идентификаторы команд должны быть в интервале от 1 до 900
1000 MENU
{
MENUITEM "Болт ГОСТ 7798-70", COMMAND_1
MENUITEM "Болт ГОСТ 18123-72", COMMAND_2
POPUP "ГАЙКИ"
{
MENUITEM "Гайка ГОСТ 6393-73", COMMAND_3
POPUP "ГАЙКИ ШЕСТИГРАННЫЕ"
{
MENUITEM "Гайка ГОСТ 5915-70", COMMAND_4
MENUITEM "Гайка ГОСТ 15521-50", COMMAND_5
}
}
MENUITEM "Штифт ГОСТ 10774-80", COMMAND_6
}

//Определение BMP-слайдов для команд библиотеки
COMMAND_1 BITMAP "1.bmp"
COMMAND_2 BITMAP "2.bmp"
COMMAND_3 BITMAP "3.bmp"
COMMAND_4 BITMAP "4.bmp"
COMMAND_5 BITMAP "5.bmp"
COMMAND_6 BITMAP "6.bmp"

//Размеры окна вывода BMP-слайда:
1000 RCDATA {
160 // Размер по горизонтали
140 // Размер по вертикали
}

// Имя библиотеки
STRINGTABLE
{
1000 "Библиотека Example1 на Delphi"
}

// Пиктограмма для свёрнутого окна библиотеки
1000 ICON "Example1.ico"



COMMAND.pas
unit command;

interface

const LIB_ID    = 1000;
COMMAND_1 = 1;
COMMAND_2 = 2;
COMMAND_3 = 3;
COMMAND_4 = 4;
COMMAND_5 = 5;
COMMAND_6 = 6;
implementation

end.




При компиляции выдаёт такую ошибку:
[Warning] Project1.dpr(28): Symbol 'KompasObject' is specific to a platform
[Warning] Project1.dpr(42): Symbol 'KompasObject' is specific to a platform

строка 28: var iKompas : KompasObject;
строка 42: iKompas := KompasObject(CreateKompasObject);

научите, пожалуйста! что мне нужно сделать, чтобы этих ошибок не выдавалось?
Название: Re:Исходники, описания, примеры
Отправлено: sorockinalex от 15.11.07, 22:22:40
ЦитироватьЭто конечно не та ветка, но все же отвечу.
Смотри документ "Компиляция библиотек под К9.doc"
"Delphi Automation
1.   Подключите новую библиотеку (файл с расширением tlb). Для этого выполните следующее.
1.1.   Вызовите команду Project - Import type library - Add.
1.2.   Выберите файл kAPI5.tlb.
2.   Укажите путь к корневой папке размещения примеров (Unit dir name).
3.   Нажмите кнопку Create Unit.
4.   Переименуйте полученный файл в KsTLB.pas и отредактируйте его первую строку."
Work

А это вообще не знаю к чему. Сделал как было в KDMA_02.pdf и ничего из перечисленного выше не делал.. Простейшая библиотека работала. А когда дальше пошёл - начал выдавать описанную ошибку...
Название: Re:Исходники, описания, примеры
Отправлено: sorockinalex от 15.11.07, 22:31:04
Сейчас нашёл в яндексе. Оказывается, это просто предупреждение о возможном несоответствии на другой платворме или типа того.
Библиотека в компасе загружается, но пунктов никаких почему-то нет... И картинок подгруженных тоже! Картинки и иконка лежат тоже в папке Example1... Помогите, друзья!!!
Название: Re:Исходники, описания, примеры
Отправлено: Николай от 16.11.07, 09:33:17
Уважаемый  sorockinalex!
Вы вчера скачали где-то "3 метра с pdf с файлами" по по созданию библиотек. Не могли бы скинуть ссылку на эти материалы?
Название: Re:Исходники, описания, примеры
Отправлено: sorockinalex от 16.11.07, 09:51:51
Блин. Я и не помню уже... Попробуйте поискать в Download секции - тут вверху окна ссылка
Название: Re:Исходники, описания, примеры
Отправлено: Sure от 16.11.07, 10:21:14
Цитата: Николай от 16.11.07, 09:33:17
ссылку на эти материалы
http://support.ascon.ru/download.php?act=cat&cat=3#97
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 20.11.07, 18:54:02
Пример заполнения основной надписи чертежа
Делфи 7
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 20.11.07, 18:55:32
Пример считывания данных с основной надписи чертежа с указанием номера ячейки
Делфи 7
Название: Re:Исходники, описания, примеры
Отправлено: yarikv от 12.05.08, 19:13:02
Пример вставки стандартной детали из библиотеки моделей в сборку с указанием местоположения и присвоением переменных. Делфи 7. Компас 9
Название: Re:Исходники, описания, примеры
Отправлено: Sheiker от 06.03.09, 16:59:22
Пример из книги Максима Кидрука:
Мини-САПР, создающая по минимальному количеству исходных данных 3D-модель зубчатого колеса (как прямозубого, так и косозубого).
Название: Re:Исходники, описания, примеры
Отправлено: Sheiker от 06.03.09, 17:02:08
Ребят, а подскажите как создать подсборку в сборке  ??
Название: Re:Исходники, описания, примеры
Отправлено: sulyco от 06.03.09, 17:38:58
создаете отдельную сборку-вставляете ее в другую сборку и она становится подсборкой. Если надо сделать из текущей - пересохраняете имеющуюся с именем подсборки - удаляете лишние детали. В головной сборке удаляете детали подсборки и вставляеете туда подсборку.
Ну как-то так.
Название: Re:Исходники, описания, примеры
Отправлено: Sheiker от 07.03.09, 14:15:03
Спасибо.... :) но  уж больно хитро-мудро.
Скрее всего должен быть более простой способ , без пересохранений и вставок других сборок)))
В КОМПАС 10 есть компонент создания детали, а так же компонент создания подсборки.

С деталью понятно : ksDocument3D::CreatePartFromFile или ksDocument3D::CreatePartInAssembly.
Может и подсборку можно аналогично создать???
Если есть у кого пример, буду признателен.
PS
не совсем понял по поводу "...Если надо сделать из текущей ..."
Название: Re:Исходники, описания, примеры
Отправлено: NilsBor от 09.04.09, 14:38:01
Есть у кого скомпилированная библиотека генерации команд для станка с ЧПУ, исходники которой представлены в посте
http://forum.ascon.ru/index.php/topic,5841.msg44925.html#msg44925?
Самому скомпилировать не удается по причине отсутствия компилятора. А посмотреть очень хочется.
Название: Re:Исходники, описания, примеры
Отправлено: SHTORM от 27.04.09, 09:02:12
помогите TestTypes.dcu найти компонент для Delphi
bymer2@list.ru    жду....................
Название: Re: Исходники, описания, примеры
Отправлено: chifir от 09.06.09, 15:54:18
Есть вопрос товарищи, есть поподробней по программированию Компаса, чем хелп и примеры в сдк, какие нибудь туториалы или маны? гуглил гуглил но ничего конкретного не нашел...  буду благодарен.
Название: Re: Исходники, описания, примеры
Отправлено: Prog2 от 10.06.09, 08:38:44
Цитата: chifir от 09.06.09, 15:54:18
...есть поподробней по программированию Компаса, чем хелп и примеры в сдк, какие нибудь туториалы или маны?
Пока не видел ничего лучше вот этих пособий:
http://download.ascon.ru/public/educat/master/DelphiAUTO.zip
http://download.ascon.ru/public/educat/master/BuilderAUTO.zip
Название: Re: Исходники, описания, примеры
Отправлено: chifir от 30.06.09, 01:30:45
спасибо большое, уже нашел) но некоторые вопросы до сих пор остались...
Название: Re: Исходники, описания, примеры
Отправлено: Sabahs от 30.06.09, 21:26:12
Цитата: chifir от 09.06.09, 15:54:18
Есть вопрос товарищи, есть поподробней по программированию Компаса, чем хелп и примеры в сдк, какие нибудь туториалы или маны? гуглил гуглил но ничего конкретного не нашел...  буду благодарен.

SDK 50% информации, правда нужно код прорабатывать, но зато практика. Начинайте с простого и все у Вас получится.

Название: Re: Исходники, описания, примеры
Отправлено: MalCer от 15.07.09, 19:07:42
Привет всем, я новичок, так что ногами не пинать:) Решил не создавать новую тему, а написать сюда. Решил вот написать свою программу на Делфи для Компаса. Скачал много исходников, но никак не могу скомпилировать ни один проект :(. Делфи знаю на среднем уровне, но таких программ в жизни не писал. Так вот, скажите мне, почему у меня постоянно выскакивает ошибка при подключения модуля:
Chertezh_1 in 'Chertezh_1.pas';
Спасибо, все кто откликнется!!!
Название: Re: Исходники, описания, примеры
Отправлено: Sabahs от 15.07.09, 23:16:48
Цитата: MalCer от 15.07.09, 19:07:42
Привет всем, я новичок, так что ногами не пинать:) Решил не создавать новую тему, а написать сюда. Решил вот написать свою программу на Делфи для Компаса. Скачал много исходников, но никак не могу скомпилировать ни один проект :(. Делфи знаю на среднем уровне, но таких программ в жизни не писал. Так вот, скажите мне, почему у меня постоянно выскакивает ошибка при подключения модуля:
Chertezh_1 in 'Chertezh_1.pas';
Спасибо, все кто откликнется!!!

Файлы *.pas сгенерираванные под Dilphi7, для Компас V11, V10 можно скачать здесь:

http://mariupolsapr.narod.ru/

пример проекта библиотеки http://mariupolsapr.narod.ru/lib/animaciq3d.rar
Название: Re: Исходники, описания, примеры
Отправлено: НовичЁк от 15.09.09, 12:31:05
Люди может кто помочь)))), в общем задача такая, необходимо создать прикладную библиотеку в делфи для компаса, кажется со всем понятно, только в прямоугольнике не могу сделать фаски или скругления, заранее всем спасибо....
Кстати кому может поможет у меня есть пример в СИ, а надо в делфи...
reference arr = ::CreateArray (CORNER_ARR, 0);    // создать массив параметров углов
CornerParam par;               // структура параметров угла
par.index = 5;               // индекс угла
par.fillet = 0;                  // признак фаски
par.l1 = 345;                  // длина фаски 1 сегмента
par.l2 = 456.987;               // длина фаски 2 сегмента
::AddArrayItem (arr, -1, &par, sizeof (CornerParam)); // добавить угол в массив
par.index = 45;               // индекс угла
par.fillet = 0;                  // признак фаски

par.l1 = 345;                  // длина фаски 1 сегмента
par.l2 = 456.987;               // длина фаски 2 сегмента
::AddArrayItem (arr, -1, &par, sizeof (CornerParam));// добавить угол в массив
par.index = 65;               // индекс угла
par.fillet = 0;                  // признак фаски
par.l1 = 345;                  // длина фаски 1 сегмента
par.l2 = 456.987;               // длина фаски 2 сегмента
::AddArrayItem (arr, -1, &par, sizeof (CornerParam));// добавить угол в массив
par.index = 85;               // индекс угла

par.fillet = 0;                  // признак фаски
par.l1 = 345;                  // длина фаски 1 сегмента
par.l2 = 456.987;               // длина фаски 2 сегмента
::AddArrayItem (arr, -1, &par, sizeof (CornerParam));// добавить угол в массив
int count = ::GetArrayCount (arr);         // количество элементов в массиве
for ( int i = 0; i < count; i++ ) {

// выводим параметры углов в окне сообщения
char buf[128];
if ( ::GetArrayItem (arr, i, &par, sizeof (CornerParam))) {

::sprintf ( buf, "индекс элемента %i равен %i; %i, %f, %f", i,

par.index, par.fillet, par.l1, par.l2);

::Message (buf);

}

}
::ExcludeArrayItem (arr, 2);            // удаляем второй элемент массива
count = ::GetArrayCount (arr);         // количество элементов в массиве
for ( int i = 0; i < count; i++ ) {

// выводим параметры углов в окне сообщения
char buf [128];
if ( ::GetArrayItem (arr, i, &par, sizeof (CornerParam))) {

::sprintf (buf, "индекс элемента %i равен %i; %i, %f, %f", i, par.index,

par.fillet, par.l1, par.l2 );

::Message( buf );

}

}
if ( ::GetArrayItem (arr, 1, &par, sizeof (CornerParam))) {

// изменяем параметры элемента с индексом 1
par.index = 0;
par.fillet = 0;
par.l1 = 0;
par.l2 = 0;
::SetArrayItem( arr, 1, &par, sizeof(CornerParam) );
}

count = ::GetArrayCount (arr);         // количество элементов в массиве
for ( int i = 0; i < count; i++ ) {

// выводим параметры углов в окне сообщения
char buf[128];
if ( ::GetArrayItem (arr, i, &par, sizeof (CornerParam))) {

::sprintf (buf, "индекс элемента %i равен %i; %i, %f, %f", i, par.index,

par.fillet, par.l1, par.l2);

::Message( buf );
}
}
::ClearArray (arr);               // очищаем массив
char buf[128];
::sprintf (buf, "кол-во элементов = %i", ::GetArrayCount (arr));
::Message (buf);
::DeleteArray (arr);               // удаляем массив
Название: Re: Исходники, описания, примеры
Отправлено: lewka от 19.08.10, 14:02:19
Привет!!! Подскажите пожалуйста как делать сопряжения деталей 3D в сборке с помощью Delphi 7.
Название: Re: Исходники, описания, примеры
Отправлено: Sabahs от 25.11.10, 07:27:09
Цитата: lewka от 19.08.10, 14:02:19
Привет!!! Подскажите пожалуйста как делать сопряжения деталей 3D в сборке с помощью Delphi 7.
//Добавить сопряжение совпадение
     PartCollection1:=ksPart(iDoc3DSborka.GetPart(-1));
     EntityCollection:=
      ksEntityCollection(PartCollection1.EntityCollection(o3d_pointCS));
     Entity1:=ksEntity(EntityCollection.GetByIndex(0));
     PartCollection1:=ksPart(iDoc3DSborka.GetPart(0));
     EntityCollection:=
      ksEntityCollection(PartCollection1.EntityCollection(o3d_pointCS));
     Entity2:=ksEntity(EntityCollection.GetByIndex(0));
     iDoc3DSborka.AddMateConstraint(mc_Coincidence,Entity1,Entity2,0,0,0);
     iDoc3DSborka.RebuildDocument;
Название: Re: Исходники, описания, примеры
Отправлено: schevron от 20.06.11, 23:21:08
Кто-нибудь может выложить исходник программы или библиотеки, который создает чертеж со всеми наворотами ( тт , указанная и не указанная шероховатость , и т.д.) . И если можно то в VB6 . Хоть что-нибудь .
Название: Re: Исходники, описания, примеры
Отправлено: Николай от 21.06.11, 07:55:53
У меня тоже такая потребность, но, похоже, все программеры игнорируют VB и подробной методички под Бейсик не предвидится.
Название: Re: Исходники, описания, примеры
Отправлено: aalleexxaa от 02.09.11, 12:16:44
Здравствуйте, а исходных примеров к книге Максима Кидрука (КОМПАС-3D V10 на 100 %) нет ни у кого? А то по книге делаю, а многое (даже на начальном этапе не работает). в интернете не нашел (((
Название: Re: Исходники, описания, примеры
Отправлено: Vovavovckiy от 13.06.12, 11:59:32
aalleexxaa, привет. У меня есть диск к книге Кидрука, если хочешь, могу прислать исходники, пиши почту @.
Название: Re: Исходники, описания, примеры
Отправлено: aalleexxaa от 15.06.12, 11:11:56
жду  :)
Цитировать
aalleexxaa@mail.ru
пасиба
Название: Re: Исходники, описания, примеры
Отправлено: Vovavovckiy от 15.06.12, 14:19:27
Проверяйте  почту, предлагаю сотрудничать. Я отправил только 6 главу, там где исходные коды приложений, есть еще и другие главы, если надо , пишите
Название: Re: Исходники, описания, примеры
Отправлено: snegok74 от 24.07.12, 12:42:06
Выкладываю свой примерчик который умеет:
1. Менять форматы чертежа (A3 ,А4 портрет, ландшафт)в одно нажатие кнопки на панели кнопок
2. Нарисовать две пересекающиеся прямые, что то типа начала координат в пару нажатий кнопки
3. Нарисовать прямоугольник (заготовку) детали .

После подключения  библиотеки включите отображение панели инструментов "Подготовка чертежа"
(//)
Все создано под Компас 3-D V13 sp1 и в Borland Delphi 7
Название: Re: Исходники, описания, примеры
Отправлено: snegok74 от 19.11.12, 22:59:22
Спешу поделиться своим примерчиком "Диалог открытия файла с предварительным просмотром".
Написано и проверено в Компас 3D V13, Windows 7 sp1 32bit, Delphi 7
Что мне нужно было от этого диалога:
- возможность изменения размеров окна предпросмотра при открытии файлов стандартным диалогом стиля Windows XP
- находить, просматривать и открывать файлы измененные за какой то период, допустим за последний месяц
Что он умеет:
- изменять размеры формы предварительного просмотра которая приклеена рядом к диалогу
- искать файлы по имени и дате изменения, и показывать их в окне предпросмотра
Плюсы:
- работает, уже пол дня им пользовался ))))
Минусы:
- поиск (вернее просмотр из поиска) некорректно работает под Windows XP
- нет возможности выбора нескольких файлов(можно сделать кнопку типа "Открыть в фоне не закрывая диалог")
- не задействована галочка "Только чтение"(забыл про нее совсем)
- пример не является образцом хорошего программирования, и не отлажен до конца

Скриншот, исходники(source.7z)  и компилированая библиотека(EventsAuto.7z.001 и 002) прилагаются.
Название: Re: Исходники, описания, примеры
Отправлено: msvteh от 21.11.12, 21:50:32
классная идея с большим окном предпросмотра, интересно в 14-ом компасе изменения в этом плане есть или все по старому?
только вот при открытии многолистового документа вижу в окне только первый лист, нельзя просматривать в окне растровые форматы, новый диалог не работает при вставке рисунка в чертеж.
Название: Re: Исходники, описания, примеры
Отправлено: snegok74 от 26.02.13, 07:52:50
полностью готовая библиотека с сиходниками от yarikv
что умеет:
- создавать форму в библиотеке;
- в m3d a3d документах работает с полями 'обозначение' и 'наименование' в свойствах дерева детали;
- в kdw spw cdw документах работает с полями основной надписи 'обозначение' и 'наименование';
- плюс описание по использованию библиотеки;
- написана в Delphi.
Название: Вращение компоненты
Отправлено: Akew от 18.02.15, 19:48:23

Реализовал вращение компоненты посредством метода RotateComponent (как пример использования).

//-------------------------------------------------------------------------------
// Функция поворачивает первую компоненту открытой сборки на 70 градусов вокруг оси 0X.
// Фиксация компонент сборки должна быть отключена.
//
// "MyKompasObject" - это переименованный "kompas" (тип KompsasObject), например, в примере Step3d2 Visualc AUTO; определяется в функции void GetKompas().
// ---
void RotateComponent() {
CString title_dialog; title_dialog.Format( _T( "Функция %s" ), _T( "RotateComponent" ) ); // Заголовок окна сообщений функции
CString tmstr;

ksDocument3DPtr cur_doc = MyKompasObject->ActiveDocument3D();
if( cur_doc == NULL ) {
MessageBox(NULL, _bstr_t( _T("*** cur_doc == NULL. Выход.") ), title_dialog, MB_OK); return;
}

ksPartPtr part = cur_doc->GetPart( 0 );
if ( !part ) {
MessageBox(NULL, _T("*** не удалось получить part. Выход." ), title_dialog, MB_OK); return;
}

ksComponentPositionerPtr positioner = cur_doc->ComponentPositioner();
if( positioner == NULL ) {
MessageBox(NULL, _bstr_t( _T("*** positioner == NULL. Выход.") ), title_dialog, MB_OK); return;
}

if(!(positioner->SetAxisByPoints( 0,0,0,100,0,0 ))) { // Указание оси по двум точкам (ось 0X)
MessageBox(NULL, _T( "*** positioner->SetAxisByPoints() не отработал. Выход." ), title_dialog, MB_OK); return;
}

if( positioner->Prepare( part, pnRotate ) != 0 ) {
MessageBox(NULL, _T( "*** positioner->Prepare() не отработал. Выход." ), title_dialog, MB_OK); return;
}

if(!(positioner->RotateComponent( ( 3.1415926535897932384626433832795*(70.0/180.0) ) ))) { // Указание поворота на 70 градусов, перевод в радианы
MessageBox(NULL, _T( "*** positioner->RotateComponent() не отработал." ), title_dialog, MB_OK);
}

if(!(positioner->Finish())) {
MessageBox(NULL, _T( "*** positioner->Finish() не отработал. Выход." ), title_dialog, MB_OK);
return;
}

cur_doc->RebuildDocument(); // Перестроить сборку

return;
}


Желаю успехов!

Название: Re: Исходники, описания, примеры
Отправлено: snegok74 от 27.02.15, 07:44:30
В дополнение к сообщению:
Выкладываю свой примерчик который .... http://forum.ascon.ru/index.php/topic,5841.msg157208.html#msg157208 (http://forum.ascon.ru/index.php/topic,5841.msg157208.html#msg157208)

добавлена кнопка отображениия листа без рамки. иногда очень полезно т.к. эскизы, в отличии от чертежей, не позволяют создавть виды -> масштабы.
Название: Re: Исходники, описания, примеры
Отправлено: Akew от 06.03.15, 19:35:13
Код реализует доступ к интерфейсу поверхности сети точек.

Он получает грани детали, открытой в Компасе, и создает для них поверхности IMeshPointsSurface.
Внимание!
У меня этот код В КОМПАСе версии 14 (sp1 и sp2) приводил к его вылету, на разных машинах. Предположительно, из-за наличия "косяка" в этих версиях. Это легко проверить, попытавшись вручную создать поверхность по сети точек для грани.
В версии 15 sp1 код работает нормально.

//-------------------------------------------------------------------------------
// Получить поверхности как сеть точек для всех граней открытого документа
// ---
void MakeMeshPointSurfaceAllFaces() {
CString title_dialog; title_dialog.Format( _T( "Функция %s" ), _T( "MakeMeshPointSurfaceAllFaces" ) );
CString tmpstr;

// 01. Получаем интерфейс открытого документа
ksDocument3DPtr opened_document_3d = MyKompasObject->ActiveDocument3D(); // MyKompasObject - то же самое, что и kompas в примерах (объект KompasObjectPtr)
if ( !opened_document_3d ) {
MessageBox(NULL, _bstr_t( _T("*** интерфейс opened_document_3d не получен. Выход.") ), title_dialog, MB_OK); return;
}

IKompasDocument3DPtr kompas_opened_document_3d( IUnknownPtr( ksTransferInterface( opened_document_3d, ksAPI7Dual, 0), false) );
if ( !kompas_opened_document_3d ) {
MessageBox(NULL, _bstr_t( _T("*** интерфейс kompas_opened_document_3d не получен. Выход.") ), title_dialog, MB_OK); return;
}

// 02. Получаем интерфейс корневой детали
ksPartPtr top_part_opened_doc = opened_document_3d->GetPart( pTop_Part );
if ( top_part_opened_doc == NULL ) {
MessageBox(NULL, _T("*** не удалось получить top_part_opened_doc. Выход." ), title_dialog, MB_OK); return;
}

ksBodyPtr ptr_body = top_part_opened_doc->GetMainBody(); // Объявление переменной типа "Указатель на интерфейс ksBody"
if ( ! ptr_body ) {
MessageBox(NULL, _bstr_t( _T( "*** интерфейс ptr_body не получен. Выход." ) ), title_dialog, MB_OK); return;
}

// 03. Получаем коллекцию граней корневой детали
ksFaceCollectionPtr face_collection = ptr_body->FaceCollection();
if ( ! face_collection ) {
MessageBox(NULL, _bstr_t( _T( "*** интерфейс face_collection не получен. Выход." ) ), title_dialog, MB_OK); return;
}

tmpstr.Format( _T("В модели %ld граней."), face_collection->GetCount() ); // Показать число граней в коллекции
MessageBox(NULL, tmpstr, title_dialog, MB_OK);

// 04. Получаем интерфейс коллекций поверхностей IMeshPointsSurfaces открытого документа
IPart7Ptr doc_part7 = kompas_opened_document_3d->TopPart;
if( doc_part7 == NULL ) {
MessageBox(NULL, _bstr_t( _T("*** doc_part7 == NULL. Выход.") ), title_dialog, MB_OK); return;
}

ISurfaceContainerPtr surface_container( doc_part7 );
if ( ! surface_container ) {
MessageBox(NULL, _bstr_t( _T( "*** surface_container не получен. Выход." ) ), title_dialog, MB_OK); return;
}

// 04. Получаем интерфейс коллекций поверхностей IMeshPointsSurfaces открытого документа
IMeshPointsSurfacesPtr mesh_points_surfaces( surface_container->MeshPointsSurfaces );
if ( ! mesh_points_surfaces ) {
MessageBox(NULL, _bstr_t( _T( "*** mesh_points_surfaces не получен. Выход." ) ), title_dialog, MB_OK); return;
}

for( long i=0; i<face_collection->GetCount(); ++i ) { // Проход по всем граням коллекции
// 05. Получаем грань из коллекции и переводим ее в тип IModelObject
ksFaceDefinitionPtr face_definition = face_collection->GetByIndex( i ); // Получить определитель i-й грани
if ( ! face_definition ) {
MessageBox(NULL, _bstr_t( _T( "*** интерфейс face_definition не получен. Продолжение." ) ), title_dialog, MB_OK); continue;
}

ksSurfacePtr surface = face_definition->GetSurface();
if ( ! surface ) {
MessageBox(NULL, _bstr_t( _T( "*** интерфейс surface не получен. Продолжение." ) ), title_dialog, MB_OK); continue;
}

IModelObjectPtr face_model_object( IUnknownPtr( ksTransferInterface( surface, ksAPI7Dual, 0), false) );
if ( ! face_model_object ) {
MessageBox(NULL, _bstr_t( _T( "*** face_model_object не получен. Продолжение." ) ), title_dialog, MB_OK); continue;
}

// 06. Создаем новую поверхность по сети точек
IMeshPointsSurfacePtr mesh_points_surface( mesh_points_surfaces->Add() );
if ( ! mesh_points_surface ) {
MessageBox(NULL, _bstr_t( _T( "*** mesh_points_surface не получен. Продолжение." ) ), title_dialog, MB_OK); continue;
}

// 07. Инициализируем поверхность по сети точек гранью face_model_object (получена на шаге 05)
if(!(mesh_points_surface->InitParamByFace( face_model_object ) ) ) {
MessageBox(NULL, _bstr_t( _T( "*** mesh_points_surface->InitParamByFace не отработал. Продолжение." ) ), title_dialog, MB_OK); continue;
}
mesh_points_surface->Update();
}

MessageBox(NULL, _bstr_t( _T("Поверхности граней документа получены.") ), title_dialog, MB_OK);

return;
}

Название: Re: Исходники, описания, примеры
Отправлено: Vitalij Lysanov от 24.04.15, 13:28:04
Табличное задание для параметров модели

В таблице три колонки 
Наименование
Значение
Управляющие (Построение и выход)

Исходная информация готовится в Excel и записывается на диск "С:\"  в формате с разделителем табуляция.
На новой детали включаем макрос, появляется таблица с исходными данными, можно изменить и на выполнение.

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


Из опыта применения в качестве аналога, кода записанного в графическом режиме.

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

В этом примере применена плоскость плоскость XY для построения эскизов.

   

     
Название: Выбор и удаление компоненты
Отправлено: Akew от 04.06.15, 19:17:44
Предлагаю Вашему вниманию фрагмент кода для программного выбора и удаления компонент из текущей сборки.
Комментарии - в коде:

//-------------------------------------------------------------------------------
// Выбрать компоненту для удаления, и удалить
//
// Фунцкия находит в текущей сборке вставленные компоненты, показывает их пользователю,
// и предлагает удалить одну из них по введенному порядковому номеру.
// ---
void ChooseComponent() {
CString title_dialog; title_dialog.Format( _T( "Функция %s" ), _T( "ChooseComponent" ) ); // Заголовок окна сообщений функции
CString tmpstr; // Строка для временных сообщений

ksDocument3DPtr document_3D = MyKompasObject->ActiveDocument3D(); // MyKompasObject - то же самое, что KompasObject в примерах
if ( !document_3D ) {
MessageBox(NULL, _bstr_t( _T("*** интерфейс document_3D не получен. Выход.") ), title_dialog, MB_OK); return;
}

IKompasDocument3DPtr doc3D( IUnknownPtr( ksTransferInterface( document_3D, ksAPI7Dual, 0), false) );
if ( !doc3D ) {
MessageBox(NULL, _bstr_t( _T("*** интерфейс doc3D не получен. Выход.") ), title_dialog, MB_OK); return;
}

IPart7Ptr topPart7 = doc3D->TopPart;
if ( !topPart7 ) {
MessageBox(NULL, _bstr_t( _T( "*** интерфейс IPart7Ptr не получен. Выход." ) ), title_dialog, MB_OK); return;
}

// Выйти на вставленные компоненты
_variant_t uniqueParts( topPart7->PartsEx[ ( long )ksAllParts ] ); // Получить массив вставленных деталей и компонент на корневом уровне сборки
if ( ! ( uniqueParts.vt == ( VT_ARRAY | VT_DISPATCH ) ) ) return;

int count = uniqueParts.parray->rgsabound[0].cElements - uniqueParts.parray->rgsabound[0].lLbound;
if ( uniqueParts.parray->cDims != 1 ) return;

LPDISPATCH HUGEP *pvar;
HRESULT hr = ::SafeArrayAccessData( uniqueParts.parray, ( void HUGEP* FAR*)&pvar);
if ( ! ( !FAILED( hr ) && pvar ) ) return;

// Сосчитать компоненты и сформировать их список в строке
long count_components = 0; // кол-во компонент
for ( int i = 0; i < count; i++ ) {
IPart7Ptr obj( pvar[i] );
if ( !( obj ) ) continue;
if( obj->GetDetail() ) continue; // простые детали пропускаем

tmpstr.Format( _T("%ld "), i+1 );
components_str = components_str + tmpstr; // сохраняем название компоненты в строке
++count_components; // подсчитываем кол-во компонент
}

// Проверить, что компоненты в сборке есть
if( count_components == 0 ) {
tmpstr.Format( _T("В данной сборке нет ни одной компоненты. Выход.") );
MessageBox(NULL, tmpstr, title_dialog, MB_OK);
return;
}

// Сохранить номера компонент в массиве
long *num_components = new long[ count_components ]; // создаем массив для сбора индексов компонент в сборке
long i_c = 0;
for ( int i = 0; i < count; i++ ) {
IPart7Ptr obj( pvar[i] );
if ( !( obj ) ) continue;
if( obj->GetDetail() ) continue;

num_components[ i_c++ ] = i;
}

// Собрать названия компонент в строке и показать ее
CString components_str = _T("В данной сборке есть следующие компоненты:\n\n"); // строка для списка компонент в сборке
for ( int i = 0; i < count_components; ++i ) {
IPart7Ptr obj( pvar[ num_components[ i ] ] );
if ( !( obj ) ) continue;
if( obj->GetDetail() ) continue;

tmpstr.Format( _T("%ld. Компонент %3ld: %s\n"), i+1, num_components[ i ], (LPWSTR)obj->GetName() ); // i+1 - для того чтобы отсчет велся с 1, а не с 0.
components_str = components_str + tmpstr;
}
tmpstr.Format( _T("         Всего: %ld\n\nВыберите компоненту, которую нужно удалить, и в следующем диалоге укажите ее номер (%ld...%ld)."), count_components, 1, count_components );
components_str = components_str + tmpstr;
MessageBox(NULL, components_str, title_dialog, MB_OK); // Выдача диалога со списком компонент

TCHAR bufPromptInsertNumber[255];
LPWSTR PromptInsertNumber; // Строка подсказки в диалоге ввода целого числа
_stprintf_s(bufPromptInsertNumber, _T("Введите номер компоненты (%ld...%ld), которая будет удалена:"), 1, count_components );
PromptInsertNumber = bufPromptInsertNumber;

long choosed_num; // Номер компоненты (порядковый), который будет удален
if( ! MyKompasObject->ksReadInt( PromptInsertNumber, 1, 1, count_components, &choosed_num )) { // Выдача диалога с запросом ввести целое число
tmpstr.Format( _T("*** отказ от ввода"), choosed_num );
MessageBox(NULL, tmpstr, title_dialog, MB_OK);
return;
}

IPart7Ptr obj( pvar[ num_components[ choosed_num-1 ] ] ); // Получить IPart7 выбранной копоненты.
// choosed_num-1 - для того чтобы вернуть нумерацию с 0, а не с 1
tmpstr.Format( _T("Введено %ld.\nКомпонента\n%s\nбудет удалена."), choosed_num, (LPWSTR)obj->GetName() );
MessageBox(NULL, tmpstr, title_dialog, MB_OK);

// Подготовка к удалению. Получить интерфейс IFeature7 удаляемого IPart7
IFeature7Ptr part7_feature7( IUnknownPtr( ksTransferInterface( obj, ksAPI7Dual, 0 ), false) );

// Так тоже работает:
// const IFeature7Ptr part7_feature7;
// if ( obj->QueryInterface( IID_IFeature7, (void **)&part7_feature7 ) != S_OK || !part7_feature7 ) {
// tmpstr.Format( _T("*** obj->QueryInterface( . . . ) не отработал. Выход") );
// MessageBox(NULL, tmpstr, title_dialog, MB_OK);
// return;
// }

if( part7_feature7 == NULL ) {
tmpstr.Format( _T("*** не удалось получить part7_feature7. Выход") );
MessageBox(NULL, tmpstr, title_dialog, MB_OK);
return;
}

if( ! part7_feature7->Delete()  ) {
tmpstr.Format( _T("*** не удалось удалить компоненту № %ld. Выход"),
num_components[ choosed_num-1 ] // choosed_num-1 - для того чтобы вернуть нумерацию с 0, а не с 1
);
MessageBox(NULL, tmpstr, title_dialog, MB_OK);
}
MessageBox(NULL, _T("Гип-гип ура, компонента успешно удалена."), title_dialog, MB_OK);

return;
}


Успехов!
Название: Re: Исходники, описания, примеры
Отправлено: EKosarev от 07.12.20, 11:05:30
Может есть у кого подробный пример кода что бы с 3д модели сделать развертку и сохранить её как чертеж, мне бы очень помогла для понимания
Название: Re: Исходники, описания, примеры
Отправлено: Slaviation от 07.12.20, 13:27:16
Добрый день.
Пример макроса на Python во вложении. Запускать на активном чертеже. В чертеже создается вид развертки с детали Electrical appliance box.m3d.

ЦитироватьМожет есть у кого подробный пример кода что бы с 3д модели сделать развертку и сохранить её как чертеж, мне бы очень помогла для понимания
Название: Re: Исходники, описания, примеры
Отправлено: Антон Каргонский от 04.10.24, 10:29:56
Добрый день, хотел спросить есть ли у кого-либо рабочий код с ComponentPositioner на перемещение?