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

Профессиональные вопросы => Программирование приложений => Тема начата: bbb от 01.12.16, 09:54:13

Название: Изменить цвет детали
Отправлено: bbb от 01.12.16, 09:54:13
Как изменить цвет детали?
В сборке есть деталь это просто выдавленный прямоугольник (когда я его выдавливал задавал цвет).
У меня есть ksPart этой детали пробую изменить так:
detal.BeginEdit();
detal.SetAdvancedColor(... тут задаю все параметры);
или так detal.useColor=(int)...;
detal.EndEdit(true);

Цвет не меняется, у операции выдавливания (IExtrusion) нет цвета...
Название: Re: Изменить цвет детали
Отправлено: Алхимик от 01.12.16, 09:59:38
Тут: "vk(точека)com/topic-29994774_26653498" может посмотрите, Программист АСКОН там выкладывал макрос по покраске.
Название: Re: Изменить цвет детали
Отправлено: Sabahs от 01.12.16, 10:01:18

iPart:ksPart;
...
ColorParam:=ksColorParam(iPart.ColorParam);ColorParam.color:=VColor;
iPart.SetAdvancedColor(ColorParam.color,ColorParam.ambient,ColorParam.diffuse,ColorParam.specularity,
ColorParam.shininess,ColorParam.transparency,ColorParam.emission);
iPart.Update;
Название: Re: Изменить цвет детали
Отправлено: bbb от 01.12.16, 10:13:23
Цитата: Sabahs от 01.12.16, 10:01:18
iPart:ksPart;
...
ColorParam:=ksColorParam(iPart.ColorParam);ColorParam.color:=VColor;
iPart.SetAdvancedColor(ColorParam.color,ColorParam.ambient,ColorParam.diffuse,ColorParam.specularity,
ColorParam.shininess,ColorParam.transparency,ColorParam.emission);
iPart.Update;

Я так и делаю не меняется цвет
Название: Re: Изменить цвет детали
Отправлено: Sabahs от 01.12.16, 10:28:44
Я этого не увидел, что именно так.
Название: Re: Изменить цвет детали
Отправлено: bbb от 01.12.16, 10:38:36
Цитата: Sabahs от 01.12.16, 10:28:44
Я этого не увидел, что именно так.
Я же написал
detal.SetAdvancedColor(... тут задаю все параметры);

да я делал без ColorParam, но какая разница. я в SetAdvancedColor задал все параметры.

(попробовал щас с ColorParam результат отрицательный)
Название: Re: Изменить цвет детали
Отправлено: Sabahs от 01.12.16, 10:45:45
Вы весь мой код, нормально видите?
А я Ваш не вижу.
Название: Re: Изменить цвет детали
Отправлено: bbb от 01.12.16, 10:47:03
Цитата: Sabahs от 01.12.16, 10:45:45
Вы весь мой код, нормально видите?
А я Ваш не вижу.
Сейчас я протестировал ваш код, цвет не изменился
Название: Re: Изменить цвет детали
Отправлено: Sabahs от 01.12.16, 11:23:11
У меня, работает.
Название: Re: Изменить цвет детали
Отправлено: graphdark от 07.05.21, 13:33:50
Цитата: Sabahs от 01.12.16, 10:01:18ColorParam.color:=VColor;
Некропост. Но лучше новой темы. А как номер цвета высчитать? Пробовал из шестнадцетерички в десятичку. Цвет меняется, но явно не тот, который я хотел. Ну и порядка ради вместо VColor нужно написать цифру желаемого цвета.
Название: Re: Изменить цвет детали
Отправлено: Sabahs от 07.05.21, 14:59:47
Цитата: graphdark от 07.05.21, 13:33:50Некропост. Но лучше новой темы. А как номер цвета высчитать? Пробовал из шестнадцетерички в десятичку. Цвет меняется, но явно не тот, который я хотел. Ну и порядка ради вместо VColor нужно написать цифру желаемого цвета.
Код.
Название: Re: Изменить цвет детали
Отправлено: graphdark от 09.05.21, 10:42:53
Цитата: Sabahs от 07.05.21, 14:59:47Код.
Уже решил проблему. Выкидываем на форму colordialog, на кнопку вешаем:
ColorVar := 15387420;
ColorDialog1.Execute;
//ShowMessage(ColorToString(ColorDialog1.Color));
ColorVar:=Integer(ColorDialog1.Color);
Переменная colorvar-int в приватных переменных класса. Уже при перестроении вашей детали применяйте код выше.
ColorParam:=ksColorParam(iPart.ColorParam);
ColorParam.color:=colorVar;
iPart.SetAdvancedColor(ColorParam.color,ColorParam.ambient,ColorParam.diffuse,ColorParam.specularity,
ColorParam.shininess,ColorParam.transparency,ColorParam.emission);
Название: Re: Изменить цвет детали
Отправлено: graphdark от 04.06.21, 08:51:24
Цитата: Sabahs от 07.05.21, 14:59:47Код.
ColorParam := ksColorParam(ipart.ColorParam);
  ColorParam.Color := 15387420{StUnit.ColorVar}; // 15387420-голубой;//16744448-синий;
  iPart.SetAdvancedColor(ColorParam.Color, ColorParam.ambient,
    ColorParam.diffuse, ColorParam.specularity, ColorParam.shininess,
    ColorParam.transparency, ColorParam.emission);
  iPart.Update;
Не знаете, почему так в 18 нельзя? У вас скрин с какой версии в 19 нормально работает.
Название: Re: Изменить цвет детали
Отправлено: Sabahs от 04.06.21, 09:42:28
Это - не код.
Код - это полный проект.
У Вас - exe, у меня dll.
PS. Работают, они по разному.
Название: Re: Изменить цвет детали
Отправлено: graphdark от 04.06.21, 11:17:54
Цитата: Sabahs от 04.06.21, 09:42:28Это - не код.
Ввел в заблуждение. Часть кода процедуры генерирования 3D модели. Так понимаю, что изменение цвета детали от exe или dll версии проекта не сильно зависит?
Название: Re: Изменить цвет детали
Отправлено: graphdark от 05.06.21, 08:24:44
Я не знаю для кого это пишу. Возможно для себя, чтобы запомнить. Компас чудесатый. Поскольку инфы нет, форум не помогает. Пошел на ощупь. Сделал чистую функцию, в ней в парт кидал 0 деталь из дерева и пробовал для нее сменить цвет. Интересно, что в 3х случаях из пяти цвет не меняется. Компас учит познанию дзен и смирению. Поэтому даже не удивился, 6 лет конструктор в компасе. Начал копать дальше. Вспомнил, что есть чудесное свойство UseColor. Оно задает, откуда брать цвет. UseColor := 3 всегда меняет цвет на черный. В свойствах модели смотрим. 3-цвет по слою, 2-цвет по исходному объекту. 1-цвет по источнику. Логично предположить, что свой цвет-это 4. Нет. Это мне логично, я смотрю на порядок в свойствах. На самом деле свой цвет-это 0. И после этого все заработало уже в 5ти случаях из пяти. Оставлю уфологам разбираться почему в 19ом компасе все работает без useColor. Привожу полный кусок кода процедуры по разукрашиванию деталей(чтобы уж всем понятно):

procedure TStUnit.test(Sender: TObject);
var
  kompas: KompasObject;
  doc3D: ksDocument3D;
  part: ksPart;
  colorParam: ksColorParam;
  i: integer;
begin
  kompas := KompasObject(GetActiveOleObject('Kompas.Application.5'));
  Doc3D := ksDocument3D(kompas.ActiveDocument3D());
//  Doc3D.Open('test.m3d',false);
  Part := ksPart(Doc3D.GetPart(0));
  Part.useColor := 0;
  i := Part.useColor;
  ShowMessage(IntToStr(i));
  ColorParam := ksColorParam(part.ColorParam);
  //  ipart.marking := 'test';
  ColorParam.Color := StUnit.ColorVar;
  part.Update();
//  ColorChange(Part);
end;
Название: Re: Изменить цвет детали
Отправлено: KilkennyCat от 05.06.21, 11:56:51
Цитата: graphdark от 05.06.21, 08:24:44Логично предположить, что свой цвет-это 4. Нет. Это мне логично, я смотрю на порядок в свойствах. На самом деле свой цвет-это 0.

UseColor - Типы используемого цвета

useColorUnknown -1 тип не определен
useColorOur 0 собственный цвет
useColorOwner 1 цвет хозяина
useColorSource 2 цвет источника
useColorLayer 3 цвет слоя

(с) Руководство пользователя KOMPAS-Invisible (API КОМПАС-3D), стр. 4954

Рискну позволить себе сделать замечание, что
Part.useColor := 0;
и
Part.useColor := UseColor.useColorOur ;
- не одно и тоже.
Название: Re: Изменить цвет детали
Отправлено: graphdark от 05.06.21, 12:16:26
Цитата: KilkennyCat от 05.06.21, 11:56:51(с) Руководство пользователя KOMPAS-Invisible (API КОМПАС-3D), стр. 4954
Честно, даже не знал, что кроме справки по SDK и книги программирование в delphi для компас что-то есть. Пасибки, найду.

Я вот по справке ориентировался.
Интерфейс...

Справка системы КОМПАС...


Тип данных: long

Значения свойства...

Синтаксис Automation:


useColor = iPart.useColor
 Получить свойство (* )
 
iPart.useColor = useColor
 Установить свойство (* )
 
useColor = iPart.GetUseColor()
 Получить свойство (**)
 
iPart.SetUseColor(useColor)
 Установить свойство (**)
 

Примечания:

1. Cобственный цвет можно получить или установить, используя методы:

SetAdvancedColor, GetAdvancedColor и ColorParam.

2. Свойство применимо для деталей и подсборок в сборке.

 
Название: Re: Изменить цвет детали
Отправлено: KilkennyCat от 05.06.21, 13:40:40
https://kompas.ru/source/documents/2021/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20KOMPAS-Invisible.pdf (http://https://kompas.ru/source/documents/2021/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20KOMPAS-Invisible.pdf)
Название: Re: Изменить цвет детали
Отправлено: graphdark от 05.06.21, 13:58:49
Цитата: KilkennyCat от 05.06.21, 13:40:40https://kompas.ru/source/documents/2021/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20KOMPAS-Invisible.pdf
Не работает ссылка.(
Название: Re: Изменить цвет детали
Отправлено: KilkennyCat от 05.06.21, 14:23:22
да, почему-то потерялось двоеточие после https...
https://kompas.ru/source/documents/2021/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20KOMPAS-Invisible.pdf (https://kompas.ru/source/documents/2021/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20KOMPAS-Invisible.pdf)

теперь работает, хотя цвет почему-то перестал быть синим.
Название: Re: Изменить цвет детали
Отправлено: graphdark от 05.06.21, 16:21:13
Цитата: KilkennyCat от 05.06.21, 14:23:22теперь работает, хотя цвет почему-то перестал быть синим.
Пасибки скачал.
Название: Re: Изменить цвет детали
Отправлено: Sabahs от 06.06.21, 06:35:18
В SDK, все написано.
UseColor.png
Название: Re: Изменить цвет детали
Отправлено: graphdark от 06.06.21, 07:44:35
Цитата: Sabahs от 06.06.21, 06:35:18В SDK, все написано.
Да, проморгал видимо. О невероятных глюках, там тоже ни слова. Хотя может и про это есть.
Название: Re: Изменить цвет детали
Отправлено: p3452 от 06.06.21, 11:05:09
Для страждущих полезно будет: "МАНИПУЛИРОВАНИЕ ЦВЕТАМИ В .NET" (http://www.cyberguru.ru/algorithms/algorithms-theory/algorithms-color-manipulation-in-net-part-i.html).
Название: Re: Изменить цвет детали
Отправлено: p3452 от 06.06.21, 12:04:48
А эту (https://forum.ascon.ru/index.php?topic=32855.0) тему изучать как Букварь!
Название: Re: Изменить цвет детали
Отправлено: KilkennyCat от 06.06.21, 20:51:16
Причём здесь .Net?
Название: Re: Изменить цвет детали
Отправлено: p3452 от 06.06.21, 22:47:15
Цитата: KilkennyCat от 06.06.21, 20:51:16Причём здесь .Net?
1. Как ответ на вот это:
Цитата: graphdark от 07.05.21, 13:33:50А как номер цвета высчитать?
2. Дал ссылку на ТЕМУ - "Букварь", смотрели?
3. Ну и куда же без .Net!?  .Net - это "наше все"!