Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к производству и изготовлению мебели. Программы для конструирования и дизайна мебели. Мебельная литература и обучающие пособия.
 
 

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 06.06.2017, 08:56  
БАЗИС 10 - Скрипты
systland
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565

Сказал(а) спасибо: 303
Поблагодарили 451 раз(а) в 189 сообщениях
Версия для печати Отправить по электронной почте
systland systland вне форума 06.06.2017, 08:56
Рейтинг: ()

Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 10 в этой теме.
__________________


Последний раз редактировалось systland; 26.12.2017 в 11:52..
Просмотров: 432528
Ответить с цитированием Вверх
Старый 15.03.2019, 13:05   #371
Miracle01
Новичок
 
Регистрация: 26.02.2019
Сообщений: 14
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 2 сообщениях
Вес репутации: 0
Miracle01 пока не определено
Сообщение

Здравствуйте,

Подскажите, есть панель, как определить, какие стороны покрыты кромкой, такой вариант не работает:

PHP код:
 for (0Panel.Contour.Counti++) {
   if (
Panel.Contour.Butts) {
        ...
     }
 } 
Miracle01 вне форума   Ответить с цитированием Вверх
Старый 15.03.2019, 14:47   #372
Igor_482
VIP
 
Аватар для Igor_482
 
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
Igor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личность
По умолчанию

Цитата:
Сообщение от Miracle01 Посмотреть сообщение
Подскажите, есть панель, как определить, какие стороны покрыты кромкой
В примере для определенного элемента при наличии кромки/кромок возвращается их массив.

Код


Код HTML:
var Panel = Model.Selected.AsPanel;

function GetButtsOnElement(Panel, ElemIndex) {
  var List = new Array();
  for (var i = 0; i < Panel.Butts.Count; i++) {
    if (ElemIndex == Panel.Butts[i].ElemIndex) {
      List.push(Panel.Butts[i]);
    };
  };
  if (List.length) {
    return List;
  } else {
    return false;
  };
};

for (var i = 0; i < Panel.Contour.Count; i++) {
  system.log(GetButtsOnElement(Panel, i));
};
[свернуть]
Igor_482 вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Letos (15.03.2019), Miracle01 (15.03.2019), Ovsyanicov (15.03.2019)
Старый 16.03.2019, 10:10   #373
Miracle01
Новичок
 
Регистрация: 26.02.2019
Сообщений: 14
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 2 сообщениях
Вес репутации: 0
Miracle01 пока не определено
По умолчанию

Подскажите пожалуйста, как найти градусы всех углов панели, при этом учесть и количество закруглений? Заранее, спасибо за помощь.
Miracle01 вне форума   Ответить с цитированием Вверх
Старый 16.03.2019, 10:31   #374
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
IStiv скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Miracle01 Посмотреть сообщение
Подскажите пожалуйста, как найти градусы всех углов панели, при этом учесть и количество закруглений? Заранее, спасибо за помощь.
возможно Вам поможет.
не знаю что есть "градусы" возможно тут понадобиться знание тригонометрии.
в целом чтобы подойти к этому вопросу, нужно сперва получить контур панели, а потом что то делать с 2D элементами.
PHP код:
var pn AddPanel();
var 
isRectngl pn.IsContourRectangle;// панель прямоугольная?
var panelCntr pn.Contour;// конутр панели
var cntrLines panelCntr.Objects;//все элементы контура
var isArc cntrLines[0].IsArc;// это дуга? 
P.S. см. в отладчике VS CODE подсказки по методам/свойствам контура панели и элементов.
IStiv вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Miracle01 (19.03.2019), Ovsyanicov (16.03.2019)
Старый 16.03.2019, 19:06   #375
IStiv
Пользователь
 
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
IStiv скоро придёт к известности
По умолчанию

1.
PHP код:
Model.Load(path); 
возвращает boolean.
А как получить доступ к элементам которые загрузились после Load?
понятно что можно использовать.
PHP код:
 Model.Find(name); 
однако я не знаю имени. а там блок и мне надо его получить после Load в обработку.

2.
PHP код:
 ElasticResize({}); 
а можно как то получить параметры "эластика" у блока?
т.е. x.max/x.min/steep ? т.е. мне нужно прочитать имеющиеся настройки
IStiv вне форума   Ответить с цитированием Вверх
Старый 18.03.2019, 10:25   #376
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Miracle01 Посмотреть сообщение
Подскажите пожалуйста, как найти градусы всех углов панели, при этом учесть и количество закруглений? Заранее, спасибо за помощь.
Дополню ответ товарища IStiv. Под спойлером код, который для выделенной панели считает углы между отрезками и выводит информацию об углах в лог редактора скриптов(!). Также считает кол-во дуг и в конце скрипта выводит сообщение о кол-ве дуг. Попытался снабдить код максимальным количеством комментариев, чтобы было лучше понятно, что для чего используется.

Код


PHP код:

//Вычисление длины вектора
function VLength(v) {
  return 
Math.sqrt(v.v.v.v.y);
}

// Панель для анализа - выделенный объект
// Если выделенный объект не панель, то следующее условие отсеет объект и скрипт завершится
var Model.Selected.AsPanel;
if (
p) {
  var 
cnt p.Contour// контур панели
  /**предыдущая линия */
  
var prevLine cnt.Objects[cnt.Count 1]; 
  
// Если объект не линия, то обнуляем переменную
  
if (!prevLine.IsLine()) {
    
prevLine undefined;
  }
  
/**Кол-во дуг в контуре */
  
var arcCount 0;
  for (var 
0cnt.Counti++) {
    
/**Текущий элемент контура в цикле */
    
var cnt.Objects[i];
    if (
o.IsLine()) { //Проверяем, что элемент - линия
      
if (prevLine) { // Если существует предыдущая линия, значит можем вычислить угол между линиями
        
var line prevLine.AsLine();
        
/** первый вектор */
        
var v1 = {
          
xline.Pos1.line.Pos2.x,
          
yline.Pos1.line.Pos2.y
        
}
        
line o.AsLine();
        
/** второй вектор */
        
var v2 = {
          
xline.Pos1.line.Pos2.x,
          
yline.Pos1.line.Pos2.y
        
}
        
// Косинус угла между двумя векторами равен скалярному произведению 
        // векторов, делённому на произведение длин векторов.
        
var cosA = (v1.v2.v1.v2.y) / (VLength(v1) * VLength(v2));
        
// Арккосинус возвращает угол в радианах
        
var rad Math.acos(cosA);
        
// Переводим угол в градусы
        
var deg rad 180 Math.PI;
        
// Вывод сообщения о величине угла
        
system.log(`Угол между ${cnt.IndexOf(prevLine)} и ${i} элементами равен ${deg} град.`);
      }
      
// В следующей итерации цикла предыдущей линией будет текущий элемент
      
prevLine o;
    }
    else { 
// если элемент не линия
      // В следующей итерации цикла предыдущей линии не будет, т.к. 
      // текущий элемент - не линия
      
prevLine undefined
      
// Если элемент - дуга, увеличиваем значение в переменной кол-ва дуг.
      
if (o.IsArc()){
        
arcCount++;
      }
    }
  }
}
// Вывод информации о кол-ве дуг
alert(`кол-во дуг в контуре: ${arcCount}`); 
[свернуть]
Letos вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Miracle01 (18.03.2019), Ovsyanicov (18.03.2019), АлКузнецов (21.03.2020)
Старый 18.03.2019, 10:54   #377
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от IStiv Посмотреть сообщение
1.
PHP код:
Model.Load(path); 
возвращает boolean.
А как получить доступ к элементам которые загрузились после Load?
понятно что можно использовать.
PHP код:
 Model.Find(name); 
однако я не знаю имени. а там блок и мне надо его получить после Load в обработку.

2.
PHP код:
 ElasticResize({}); 
а можно как то получить параметры "эластика" у блока?
т.е. x.max/x.min/steep ? т.е. мне нужно прочитать имеющиеся настройки
1. Model.Load загружает в модель объекты из файла. Думаю, лучше создать скриптом блок и в него загружать из файла:
PHP код:
AddBlock('Name').Load(path
Для приведённого вами примера небольшой скрипт: загружает файл и для каждого загруженного корневого объекта (которые в загруженной модели были в корне) выводит сообщение с его именем. Также, обратите внимание на "Undo.Added". Это сообщает в историю, что был добавлен объект, ибо Базис автоматически этого не делает (почему я и рекомендовал способ выше, чтобы не морочаться с историей).
PHP код:
var cnt Model.Count;
Model.Load('D:\\test.b3d');
for (var 
cntModel.Counti++) {
  var 
obj Model.Objects[i];
  
Undo.Added(obj);
  
alert(obj.Name);

2. Эластичность записана в параметрах объекта, но там дофига в отладчике покопаться надо, чтобы разобраться, откуда что доставать.
Вот пример, как получить ноду с описанием плоскостей эластичности:
PHP код:
var node block.ParamSectionNode('Elastic'False);
var 
planesNode node.Find('Planes'); 
Letos вне форума   Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
AndrianoS (09.01.2021), IStiv (21.03.2019), maxgmv (18.03.2019), АлКузнецов (21.03.2020), Станислав Станилевич (24.06.2022)
Старый 20.03.2019, 16:01   #378
potomu4to
Местный
 
Аватар для potomu4to
 
Регистрация: 18.02.2008
Адрес: Санкт-Петербург
Сообщений: 508
Сказал(а) спасибо: 531
Поблагодарили 401 раз(а) в 127 сообщениях
Вес репутации: 327
potomu4to - очень-очень хороший человекpotomu4to - очень-очень хороший человекpotomu4to - очень-очень хороший человекpotomu4to - очень-очень хороший человекpotomu4to - очень-очень хороший человек
По умолчанию

Добрый день.А возможно или уже есть скрипт которые предположим по виду спереди поставить размеры между полками ?
Типа такого чтоб получилось.
Миниатюры
4.jpg  
__________________
potomu4to вне форума   Ответить с цитированием Вверх
Старый 20.03.2019, 20:38   #379
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Igor_482 Посмотреть сообщение
В примере для определенного элемента при наличии кромки/кромок возвращается их массив.

Код


Код HTML:
var Panel = Model.Selected.AsPanel;

function GetButtsOnElement(Panel, ElemIndex) {
  var List = new Array();
  for (var i = 0; i < Panel.Butts.Count; i++) {
    if (ElemIndex == Panel.Butts[i].ElemIndex) {
      List.push(Panel.Butts[i]);
    };
  };
  if (List.length) {
    return List;
  } else {
    return false;
  };
};

for (var i = 0; i < Panel.Contour.Count; i++) {
  system.log(GetButtsOnElement(Panel, i));
};
[свернуть]
а как определить какая сторона покрыта кромкой если панель квадратная? я имею ввиду если облицована одна сторона то длина кромки будет равняться и длине и ширине детали, как понять кромить по длине или по ширине?
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 21.03.2019, 16:37   #380
Miracle01
Новичок
 
Регистрация: 26.02.2019
Сообщений: 14
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 2 сообщениях
Вес репутации: 0
Miracle01 пока не определено
Вопрос

Здравствуйте,

Подскажите, как найти различия нанесения кромки на детали, если кромка нанесена на радиусный объект одним отрезом, то для сметы параметр
n=Panel.Butts.Count; уже не корректен, отсюда вопрос, как определить кромку нанесенную одним отрезом на радиус/деталь/участок. Чтобы затем в смете правильно посчитать её. Либо как определить, что это отрезок кромки...
PHP код:
if (Panel.Butts) {
    
n=Panel.Butts.Count//Количество кромок, но если кромка нанесена одним отрезком на радиусную деталь, то считается не верно
    
for (i=0i<Panel.Butts.Counti++){ //Анализ по кромкам на панели
        
var butt Panel.Butts.Butts[i];
        var 
elem Panel.Contour.Objects[butt.ElemIndex];//элемент контура, на котором кромка
        
Result += (elem.ObjLength() + butt.Overhung)/1000;//Длина элемента контура + Значение свеса кромки
        
    
}
}

Result =Result/n
Miracle01 вне форума   Ответить с цитированием Вверх
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис-Мебельщик 10 systland Базис-мебельщик 10 1264 13.03.2024 22:48
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7 2230 29.11.2019 10:37
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 10:08


Текущее время: 20:37. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL

џндекс.Њетрика