Изменить цвет детали

Автор bbb, 01.12.16, 09:54:13

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

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

bbb

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

Цвет не меняется, у операции выдавливания (IExtrusion) нет цвета...

Алхимик

Тут: "vk(точека)com/topic-29994774_26653498" может посмотрите, Программист АСКОН там выкладывал макрос по покраске.

#2

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;

bbb

Цитата: 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;

Я так и делаю не меняется цвет

Я этого не увидел, что именно так.

bbb

Цитата: Sabahs от 01.12.16, 10:28:44
Я этого не увидел, что именно так.
Я же написал
detal.SetAdvancedColor(... тут задаю все параметры);

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

(попробовал щас с ColorParam результат отрицательный)

Вы весь мой код, нормально видите?
А я Ваш не вижу.

bbb

Цитата: Sabahs от 01.12.16, 10:45:45
Вы весь мой код, нормально видите?
А я Ваш не вижу.
Сейчас я протестировал ваш код, цвет не изменился

У меня, работает.

graphdark

Цитата: Sabahs от 01.12.16, 10:01:18ColorParam.color:=VColor;
Некропост. Но лучше новой темы. А как номер цвета высчитать? Пробовал из шестнадцетерички в десятичку. Цвет меняется, но явно не тот, который я хотел. Ну и порядка ради вместо VColor нужно написать цифру желаемого цвета.

Цитата: graphdark от 07.05.21, 13:33:50Некропост. Но лучше новой темы. А как номер цвета высчитать? Пробовал из шестнадцетерички в десятичку. Цвет меняется, но явно не тот, который я хотел. Ну и порядка ради вместо VColor нужно написать цифру желаемого цвета.
Код.

graphdark

Цитата: 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);

graphdark

Цитата: 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 нормально работает.

Это - не код.
Код - это полный проект.
У Вас - exe, у меня dll.
PS. Работают, они по разному.

graphdark

Цитата: Sabahs от 04.06.21, 09:42:28Это - не код.
Ввел в заблуждение. Часть кода процедуры генерирования 3D модели. Так понимаю, что изменение цвета детали от exe или dll версии проекта не сильно зависит?

graphdark

Я не знаю для кого это пишу. Возможно для себя, чтобы запомнить. Компас чудесатый. Поскольку инфы нет, форум не помогает. Пошел на ощупь. Сделал чистую функцию, в ней в парт кидал 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;

KilkennyCat

Цитата: 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 ;
- не одно и тоже.

graphdark

Цитата: 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. Свойство применимо для деталей и подсборок в сборке.