|
|
|
|
|
21.12.2017, 12:21
|
|
Заявки на создание скрипта.
systland
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565
Сказал(а) спасибо: 303
Поблагодарили 452 раз(а) в 189 сообщениях
21.12.2017, 12:21
Рейтинг:
()
Тема создана для размещения заявок на написание скриптов.
Для того, чтобы заявка была рассмотрена, необходимо составить максимально понятное техзадание :
1. Описать, какую задачу должен выполнять скрипт.
2. Какие данные должны использоваться скриптом.
3. Алгоритм (последовательность действий) работы скрипта.
Заявки типа "Мне нужен скрипт для расстановки полок" или подобные рискуют остаться без внимания.
Любые заявки не обязательны для рассмотрения. Если Вам не ответили, значит по какой-либо причине нет возможности её выполнить.
Альтернативный вариант - обратиться лично к тем, кто может оказать такую услугу
Другие сообщения, не соответствующие назначению темы, будут удалены без предупреждения!
Просьба после того, как заявка будет выполнена и утратившая актуальность по другим причинам, оставлять соответствующее сообщение в этой же теме или обратится к модератору для закрытия заявки.
Последний раз редактировалось Uncle; 03.02.2020 в 20:07..
Причина: Поправил шапку
|
Просмотров: 330898
|
01.02.2024, 19:54
|
#671
|
Новичок
Регистрация: 15.12.2023
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Писал кто скрипт на проверку пересечения панелей?
|
|
|
01.02.2024, 20:22
|
#672
|
VIP
Регистрация: 13.09.2008
Адрес: Москва
Сообщений: 2,547
Сказал(а) спасибо: 5,788
Поблагодарили 7,200 раз(а) в 1,791 сообщениях
Вес репутации: 1885
|
Цитата:
Сообщение от DBTSP
Писал кто скрипт на проверку пересечения панелей?
|
С этим справляется анализ модели. Зачем еще дополнительный скрипт
__________________
"Кому, что нравится!" - сказал кот Васька , вылизывая собственные яйца
|
|
|
16.02.2024, 12:22
|
#673
|
Новичок
Регистрация: 16.10.2010
Сообщений: 8
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Всем привет! Есть ли какой-то способ изменения цвета фурнитуры в соответствии с заданным декором ЛДСП? Например у меня спроектирован стол письменный в цвете Выбеленный дуб, на котором заглушка кабель-канала и опоры в белом цвете. Далее я меняю ЛДСП в схеме замены материала на, например, Венге, а опоры и заглушка должны поменяться на черные. Потом на Дуб сонома и, соответственно, цвет заглушки и опор должен смениться на, например, рыжие. Мне это нужно просто для выгрузки картинок, коих у меня должно получиться в районе 19 тысяч на все стандартные позиции разработанной мебели. Можно, канеш, вручную перетаскивать соответствующие текстуры на эту фурнитуру, но у меня тогда год уйдет на эти манипуляции((
Может есть уже такое решение?
P.S. Базис 2023
Всем привет! Можно ли создать скрипт для выбора определенных позиций фурнитуры в модели и замены их цвета? По типу имеющихся в базисе схем замены материала.
Например, были в модели стола опоры и заглушки кабель-канала рыжие, стали белые или черные.
Здесь, на форуме, я нашёл скрипт добавления заглушек по цвету
В нём можно прописать заданные отверстия, к которым будут добавляться заглушки. В базу материалов я добавил заглушки различных цветов и теперь каждой текстуре ЛДСП у меня соответствует своя по цвету заглушка.
Собственно, есть ли подобная возможность назначить цвета прописанному типу фурнитуры в соответствии с декором ЛДСП?
Сам я не программист ни разу((
Последний раз редактировалось AlexBolton; 16.02.2024 в 16:38.
Причина: Превью для вставки на форум, оформление, ссыли на источник.
|
|
|
24.02.2024, 13:43
|
#674
|
Новичок
Регистрация: 15.12.2023
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Добавлено через 2 минуты
Цитата:
Сообщение от artart
Цитата:
Сообщение от DBTSP
Писал кто скрипт на проверку пересечения панелей?
С этим справляется анализ модели. Зачем еще дополнительный скрипт
__________________
"Кому, что нравится!" - сказал кот Васька , вылизывая собственные яйца
|
Нужен не сам скрипт, а функция для дальнейшего построения.
Пример:
1) при вращении двух панелей в 3-х плоскостях образовывался торцевой спил по биссектрисе .
2) аналогичная вращение, только спил у одной из панелей.
Для этого нужна функция проверки пересечения панелей и определения контура пересечения
|
|
|
24.02.2024, 17:39
|
#675
|
Местный
Регистрация: 15.05.2012
Адрес: Москва
Сообщений: 259
Сказал(а) спасибо: 43
Поблагодарили 211 раз(а) в 89 сообщениях
Вес репутации: 213
|
Такого скрипта пока нет. А при вращении панелей никаких спилов тоже не наблюдалось.
Зато существуют уже платные скрипты, которые при пересечении панелей могут создавать наклонные спилы, в местах сопряжения панелей. Вам это нужно?
|
|
|
25.02.2024, 14:34
|
#676
|
Местный
Регистрация: 15.10.2019
Адрес: Кишинёв
Сообщений: 198
Сказал(а) спасибо: 492
Поблагодарили 72 раз(а) в 31 сообщениях
Вес репутации: 89
|
Цитата:
Сообщение от DBTSP
Писал кто скрипт на проверку пересечения панелей?
|
есть только сырой вариант, работает только если идеальная стыковка :
PHP код:
function getPanelsFromObj(obj) {
const panels = [];
if (obj instanceof TFurnPanel) {
panels.push(obj);
} else if (obj instanceof TModelLimits || obj instanceof TFurnBlock || obj instanceof TDraftBlock || obj instanceof TFurnAsm || obj instanceof TLayer3D) {
const childCount = obj.Count;
for (let i = 0; i < childCount; i++) {
const childObj = obj.Objects[i];
panels.push(...getPanelsFromObj(childObj));
}
}
return panels;
}
function isEqualObjects(a, b) {
const epsilon = 1e-6;
for (const key in b) {
if (typeof a[key] === 'number' && typeof b[key] === 'number') {
if (Math.abs(a[key] - b[key]) > epsilon) return false;
} else {
if (a[key] !== b[key]) return false;
}
}
return true;
}
function ProcessSelectedPanels() {
const selectedObjects = Model.Selections;
const ObjCount = Model.SelectionCount;
if (ObjCount < 2) {
alert("Выберите хотя бы два объекта.");
return;
}
const selectedPanels = [];
for (let i = 0; i < ObjCount; i++) {
const panels = getPanelsFromObj(selectedObjects[i]);
selectedPanels.push(...panels);
}
const PanelCount = selectedPanels.length;
if (PanelCount < 2) {
alert("Выберите хотя бы две панели.");
return;
}
for (let i = 0; i < PanelCount - 1; i++) {
for (let j = i + 1; j < PanelCount; j++) {
const PanelA = selectedPanels[i];
const PanelB = selectedPanels[j];
if (PanelA instanceof TFurnPanel && PanelB instanceof TFurnPanel) {
const EdgeA = FindCommonEdge(PanelA, PanelB);
const EdgeB = FindCommonEdge(PanelB, PanelA);
if (EdgeA && EdgeB) {
const Angle = GetAngle(PanelA, PanelB, EdgeA);
SetCut(PanelA, Angle / 2, EdgeA);
SetCut(PanelB, Angle / 2, EdgeB);
}
}
}
}
}
function FindCommonEdge(PanelA, PanelB) {
for (let i = 0; i < PanelA.EdgesCount; i++) {
const EdgeA = PanelA.Edges[i];
for (let j = 0; j < PanelB.EdgesCount; j++) {
const EdgeB = PanelB.Edges[j];
if (isEqualEdges(EdgeA, EdgeB)) {
console.log('Found common Edge:', EdgeA);
return EdgeA;
}
}
}
console.log("No common edge found.");
return null;
}
function isEqualEdges(EdgeA, EdgeB) {
return isEqualObjects(EdgeA.GFirst, EdgeB.GFirst) && isEqualObjects(EdgeA.GLast, EdgeB.GLast) ||
isEqualObjects(EdgeA.GFirst, EdgeB.GLast) && isEqualObjects(EdgeA.GLast, EdgeB.GFirst);
}
function IsEqualObjects(a, b) {
const epsilon = 1e-6;
for (const key in b) {
if (typeof a[key] === 'number' && typeof b[key] === 'number') {
if (Math.abs(a[key] - b[key]) > epsilon) return false;
} else {
if (a[key] !== b[key]) return false;
}
}
return true;
}
function radiansToAngle(radians) {
return (180 / Math.PI) * radians;
}
function GetNormEdge(Edge, Panel) {
const Axis = IsEqualObjects(Edge.Dir(), AxisX) || IsEqualObjects(Edge.Dir(), Axis_X) ? AxisY : AxisX;
console.log('Axis for comparison:', Axis);
console.log('Panel Edges:', Panel.Edges);
let foundNormEdge = null;
for (let i = 0; i < Panel.EdgesCount; i++) {
console.log('Checking Edge:', Panel.Edges[i]);
console.log('Edge direction:', Panel.Edges[i].Dir());
if (IsEqualObjects(Axis, Panel.Edges[i].Dir())) {
console.log('Found norm Edge:', Panel.Edges[i]);
foundNormEdge = Panel.Edges[i];
break;
}
}
if (!foundNormEdge) {
console.error('No norm Edge found for Panel:', Panel);
}
return foundNormEdge;
}
function GetAngle(PanelA, PanelB, EdgeA) {
console.log('EdgeA:', EdgeA); // Добавлено для отладки
const contour = NewContour();
const Edges = [GetNormEdge(EdgeA, PanelA), GetNormEdge(EdgeA, PanelB)];
console.log('Edges:', Edges); // Добавлено для отладки
Edges.forEach((Edge, index) => {
if (!Edge) {
console.error('Edge ${index} is undefined'); // Добавлено для отладки
return;
}
const Panel = index === 0 ? PanelA : PanelB; // Используйте переменную panel
const First = Panel.ToObject(Edge.First); // Используйте переменную panel
const last = Panel.ToObject(Edge.Last); // Используйте переменную panel
contour.AddLine(First.x, First.z, last.x, last.z);
});
contour.OrderContours(true);
if (contour.IsClockOtherWise()) contour.InvertDirection();
const angleA = contour.Objects[0].LineAngle();
const angleB = contour.Objects[1].LineAngle();
const edgeANorm = GetNormEdge(EdgeA, PanelA);
const edgeBNorm = GetNormEdge(EdgeA, PanelB);
const xProduct = edgeANorm.Dir().x * edgeBNorm.Dir().z - edgeANorm.Dir().z * edgeBNorm.Dir().x;
const Angle = xProduct > 0 ? Math.abs(angleA - angleB) : Math.PI - Math.abs(angleA - angleB);
return Angle;
}
function SetCut(Panel, Angle, Edge) {
StartEditing(Panel);
const cut = Panel.AddCut('Уг XX гр.');
const contour = cut.Contour;
contour.AddLine(0, 0, 0, Panel.Thickness);
contour.AddLine(0, Panel.Thickness, Panel.Thickness * Math.tan(Angle), Panel.Thickness);
contour.AddLine(Panel.Thickness * Math.tan(Angle), Panel.Thickness, 0, 0);
// направление РЕЗА
if (Edge.First.z === Panel.Thickness) {
contour.Rotate(0, Panel.Thickness / 2, 180);
cut.Trajectory.AddLine(Edge.Last.x, Edge.Last.y, Edge.First.x, Edge.First.y);
} else {
contour.Rotate(0, Panel.Thickness / 2, 0);
cut.Trajectory.AddLine(Edge.First.x, Edge.First.y, Edge.Last.x, Edge.Last.y);
}
cut.Sign = 'Угол ' + Math.abs(radiansToAngle(Angle).toFixed(3)).toString().replace(/\./, ',') + ' °';
Panel.Build();
}
// Запуск основной функции
ProcessSelectedPanels();
Последний раз редактировалось AlexBolton; 25.02.2024 в 19:32.
Причина: оформление
|
|
|
Пользователь сказал cпасибо:
|
|
25.02.2024, 19:01
|
#677
|
Новичок
Регистрация: 15.12.2023
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Slav
Такого скрипта пока нет. А при вращении панелей никаких спилов тоже не наблюдалось.
Зато существуют уже платные скрипты, которые при пересечении панелей могут создавать наклонные спилы, в местах сопряжения панелей. Вам это нужно?
|
Верно, смысл функции именно такой
|
|
|
25.02.2024, 21:00
|
#678
|
Местный
Регистрация: 15.10.2019
Адрес: Кишинёв
Сообщений: 198
Сказал(а) спасибо: 492
Поблагодарили 72 раз(а) в 31 сообщениях
Вес репутации: 89
|
Цитата:
Сообщение от DBTSP
Верно, смысл функции именно такой
|
в открытом коде Вам такое навряд ли кто-то даст
|
|
|
25.02.2024, 23:15
|
#679
|
Местный
Регистрация: 15.05.2012
Адрес: Москва
Сообщений: 259
Сказал(а) спасибо: 43
Поблагодарили 211 раз(а) в 89 сообщениях
Вес репутации: 213
|
Цитата:
Сообщение от PravCom
в открытом коде Вам такое навряд ли кто-то даст
|
Так и есть, ведь форум предназначен для обмена опытом. Простенькие скрипты вы тут найдете. Плюс куча полезной инфы для самообразования. А что то посложнее - это уже надо покупать. Люди годами полировали навыки и не хотят теперь выкладывать это за спасибо.
Я покупал у Артема. Там ценник небольшой.
Вот его канал:
https://web.telegram.org/a/#-1001548656779
Скрипт называется "Разрезать панель по границе".
Добавлено через 2 минуты
Цитата:
Сообщение от PravCom
есть только сырой вариант, работает только если идеальная стыковка :
|
сорян за прямоту -но оно работает как то криво..
|
|
|
26.02.2024, 08:35
|
#680
|
Местный
Регистрация: 15.10.2019
Адрес: Кишинёв
Сообщений: 198
Сказал(а) спасибо: 492
Поблагодарили 72 раз(а) в 31 сообщениях
Вес репутации: 89
|
Цитата:
Сообщение от Slav
сорян за прямоту -но оно работает как то криво..
|
так я ж предупредил) криво и косо) ожидается релиз качественного в скором времени от известного автора на эту тему. Платный релиз
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 04:13. Часовой пояс GMT +3.
|