Как изменить цвет детали?
В сборке есть деталь это просто выдавленный прямоугольник (когда я его выдавливал задавал цвет).
У меня есть ksPart этой детали пробую изменить так:
detal.BeginEdit();
detal.SetAdvancedColor(... тут задаю все параметры);
или так detal.useColor=(int)...;
detal.EndEdit(true);
Цвет не меняется, у операции выдавливания (IExtrusion) нет цвета...
Тут: "vk(точека)com/topic-29994774_26653498" может посмотрите, Программист АСКОН там выкладывал макрос по покраске.
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;
Цитата: 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;
Я так и делаю не меняется цвет
Я этого не увидел, что именно так.
Цитата: Sabahs от 01.12.16, 10:28:44
Я этого не увидел, что именно так.
Я же написал
detal.SetAdvancedColor(... тут задаю все параметры);
да я делал без ColorParam, но какая разница. я в SetAdvancedColor задал все параметры.
(попробовал щас с ColorParam результат отрицательный)
Вы весь мой код, нормально видите?
А я Ваш не вижу.
Цитата: Sabahs от 01.12.16, 10:45:45
Вы весь мой код, нормально видите?
А я Ваш не вижу.
Сейчас я протестировал ваш код, цвет не изменился
У меня, работает.
Цитата: Sabahs от 01.12.16, 10:01:18ColorParam.color:=VColor;
Некропост. Но лучше новой темы. А как номер цвета высчитать? Пробовал из шестнадцетерички в десятичку. Цвет меняется, но явно не тот, который я хотел. Ну и порядка ради вместо VColor нужно написать цифру желаемого цвета.
Цитата: graphdark от 07.05.21, 13:33:50Некропост. Но лучше новой темы. А как номер цвета высчитать? Пробовал из шестнадцетерички в десятичку. Цвет меняется, но явно не тот, который я хотел. Ну и порядка ради вместо VColor нужно написать цифру желаемого цвета.
Код.
Цитата: 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);
Цитата: 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. Работают, они по разному.
Цитата: Sabahs от 04.06.21, 09:42:28Это - не код.
Ввел в заблуждение. Часть кода процедуры генерирования 3D модели. Так понимаю, что изменение цвета детали от exe или dll версии проекта не сильно зависит?
Я не знаю для кого это пишу. Возможно для себя, чтобы запомнить. Компас чудесатый. Поскольку инфы нет, форум не помогает. Пошел на ощупь. Сделал чистую функцию, в ней в парт кидал 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;
Цитата: 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 ;
- не одно и тоже.
Цитата: 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. Свойство применимо для деталей и подсборок в сборке.
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)
Цитата: 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
Не работает ссылка.(
да, почему-то потерялось двоеточие после 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)
теперь работает, хотя цвет почему-то перестал быть синим.
Цитата: KilkennyCat от 05.06.21, 14:23:22теперь работает, хотя цвет почему-то перестал быть синим.
Пасибки скачал.
В SDK, все написано.
UseColor.png
Цитата: Sabahs от 06.06.21, 06:35:18В SDK, все написано.
Да, проморгал видимо. О невероятных глюках, там тоже ни слова. Хотя может и про это есть.
Для страждущих полезно будет: "МАНИПУЛИРОВАНИЕ ЦВЕТАМИ В .NET" (http://www.cyberguru.ru/algorithms/algorithms-theory/algorithms-color-manipulation-in-net-part-i.html).
А эту (https://forum.ascon.ru/index.php?topic=32855.0) тему изучать как Букварь!
Причём здесь .Net?
Цитата: KilkennyCat от 06.06.21, 20:51:16Причём здесь .Net?
1. Как ответ на вот это:
Цитата: graphdark от 07.05.21, 13:33:50А как номер цвета высчитать?
2. Дал ссылку на ТЕМУ - "Букварь", смотрели?
3. Ну и куда же без .Net!? .Net - это "наше все"!