|
|
|
|
|
06.06.2017, 08:56
|
|
БАЗИС 10 - Скрипты
systland
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565
Сказал(а) спасибо: 303
Поблагодарили 451 раз(а) в 189 сообщениях
06.06.2017, 08:56
Рейтинг:
()
Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 10 в этой теме.
Последний раз редактировалось systland; 26.12.2017 в 11:52..
|
Просмотров: 438723
|
25.03.2023, 11:47
|
#681
|
Пользователь
Регистрация: 03.12.2019
Сообщений: 88
Сказал(а) спасибо: 28
Поблагодарили 115 раз(а) в 34 сообщениях
Вес репутации: 85
|
Для выбора материала есть NewMaterial() вроде. Зачем комбо? Но если комбо необходим сделайте их 2 вместо 1, или 3 если еще и з/с есть.
|
|
|
Пользователь сказал cпасибо:
|
|
19.04.2023, 16:50
|
#682
|
Новичок
Регистрация: 22.02.2023
Сообщений: 7
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Всем привет. Подскажите вот по такому вопросу. Имеем выбор ручек, в названии есть размер, как получить его?
|
|
|
19.04.2023, 20:32
|
#683
|
Пользователь
Регистрация: 03.12.2019
Сообщений: 88
Сказал(а) спасибо: 28
Поблагодарили 115 раз(а) в 34 сообщениях
Вес репутации: 85
|
Цитата:
Сообщение от Ivashka_pnz
Всем привет. Подскажите вот по такому вопросу. Имеем выбор ручек, в названии есть размер, как получить его?
|
Пример кода в студию
|
|
|
19.04.2023, 20:42
|
#684
|
Новичок
Регистрация: 22.02.2023
Сообщений: 7
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
В том то и дело, не знаю как написать. Через NewFurniture выбираем ручку из базы, она может быть разного размера, и надо узнать ее размер. Это для расположения ее, или вертикально или горизонтально. Или может как то по другому это сделать можно.
|
|
|
19.04.2023, 21:27
|
#685
|
Местный
Регистрация: 22.12.2008
Сообщений: 256
Сказал(а) спасибо: 55
Поблагодарили 231 раз(а) в 164 сообщениях
Вес репутации: 258
|
Цитата:
Сообщение от Ivashka_pnz
В том то и дело, не знаю как написать. Через NewFurniture выбираем ручку из базы, она может быть разного размера, и надо узнать ее размер. Это для расположения ее, или вертикально или горизонтально. Или может как то по другому это сделать можно.
|
Не уверен в работоспособности. Когда-то откуда-то копирнул. Но руки так и не дошли до тестов.
Скрытый текст
PHP код:
/**
* Имя файла настроек
*/
// @note Имя файла, переменные
const filename = 'settings.xml';
// const filename = process.env.USERPROFILE + "\\Documents\\Bazis\\Scripts\\SettingsRuchki.xml";
var px;
var py;
var pz;
var x1 = 0;
var y1 = 0;
var MinX;
var MaxX;
var MinY;
var MaxY;
var MinZ;
var MaxZ;
// @note свойства
var props = Action.Properties;
// var settings = props.NewGroup('Настройки');
var Ruchka = props.NewFurniture('Ручка').Value;
var Ruchkalength = props.NewNumber('Длина ручки', 96);
var OtstupX = props.NewNumber('Отступ по горизонтали');
var OtstupY = props.NewNumber('Отступ по вертикали');
var Ugol = props.NewNumber('Угол поворота');
Ugol.Visible = false;
var Ugol_ = props.NewBool('Ручка гориз/верт', true);
Ugol_.OnChange = function() {
if(Ugol_.Value == true) {
Ugol.Value = 0;
x1 = Ruchkalength.Value / 2;
y1 = 0;
} else {
Ugol.Value = 90;
x1 = 0;
y1 = Ruchkalength.Value / 2;
}
}
Ruchkalength.OnChange = function() {
if(Ugol_.Value == true) {
Ugol.Value = 0;
x1 = Ruchkalength.Value / 2;
y1 = 0;
} else {
Ugol.Value = 90;
x1 = 0;
y1 = Ruchkalength.Value / 2;
}
}
var UstanovkaOtPola = props.NewBool('Устанавливать от пола');
var OtPola = props.NewNumber('Расстояние от пола');
var InBlock = props.NewBool('Объединять в блок');
props.Load(filename);
var finishBtn = props.NewButton('Закончить');
finishBtn.OnClick = function() {
Action.Finish();
}
//@note OnCkick
Action.OnClick = function() {
//смотрим есть ли в модели слои и какой из них активный
//если такой имеется то он является активной областью в которой после Action.Commit() и "появится" новый объект
//который потом нужно перенести в то место иерархии где была указаная панель
for(var i = 0; i < Model.Count; ++i) {
if((Model.Objects[i].toString() == '[object TLayer3D]') && (Model.Objects[i].Active)) {
var active_layer = Model.Objects[i];
}
}
//если слоев нет, то активная область это сама модель
if(!active_layer) {
var active_layer = Model;
}
Action.Commit();
//создаем ссылку на новый объект модели - это установленая ручка
var new_fast = active_layer.Objects[active_layer.Count - 1];
//если выбрано "создание нового блока"
if(InBlock.Value) {
//создаем новый блок
var new_block = AddBlock('фасад с ручкой');
new_block.Build();
Action.Commit();
new_block = active_layer.Objects[active_layer.Count - 1];
//устанавливаем и поворачиваем новый блок в пространстве так же как расположена панель
new_block.Translate(panel.ToGlobal(NewVector(0, 0, 0)));
new_block.Orient(panel.NToGlobal(AxisZ), panel.NToGlobal(AxisY));
//переносим новый блок в тот уровень иерархии где находится панель
//с сохранением расположения в глобальном пространстве
new_block.ReTransform(new_block.Owner, panel.Owner);
new_block.Owner = panel.Owner;
//переносим панель в новый блок
//с сохранением расположения в глобальном пространстве
panel.ReTransform(panel.Owner, new_block);
panel.Owner = new_block;
}
//переносим ручку в тот уровень иерархии где находится панель
//с сохранением расположения в глобальном пространстве
new_fast.ReTransform(new_fast.Owner, panel.Owner);
new_fast.Owner = panel.Owner;
}
//
if(Ugol_.Value == true) {
Ugol.Value = 0;
x1 = Ruchkalength.Value / 2;
y1 = 0;
} else {
Ugol.Value = 90;
x1 = 0;
y1 = Ruchkalength.Value / 2;
}
// @note Фронт панель
function GetKoordFrontPanel() {
CenterX = (MaxX - MinX) / 2 + MinX;
CenterY = (MaxY - MinY) / 2 + MinY;
if(Action.Pos3.x < CenterX - 30) {
px = MinX + OtstupX.Value + x1;
if(Action.Pos3.y < CenterY - 30) {
py = MinY + OtstupY.Value + y1;
} else if(Action.Pos3.y > CenterY + 30) {
py = MaxY - OtstupY.Value - y1;
} else {
py = CenterY;
}
} else if(Action.Pos3.x > CenterX + 30) {
px = MaxX - OtstupX.Value - x1;
if(Action.Pos3.y < CenterY - 30) {
py = MinY + OtstupY.Value + y1;
} else if(Action.Pos3.y > CenterY + 30) {
py = MaxY - OtstupY.Value - y1;
} else {
py = CenterY;
}
} else {
px = CenterX;
if(Action.Pos3.y < CenterY - 30) {
py = MinY + OtstupY.Value + y1;
} else if(Action.Pos3.y > CenterY + 30) {
py = MaxY - OtstupY.Value - y1;
} else {
py = CenterY;
}
}
if(UstanovkaOtPola.Value) {
py = OtPola.Value + y1;
}
pz = MinZ + Math.round(panel.Thickness);
}
//@note Верт панель
function GetKoordVertPanel() {
CenterX = (MaxZ - MinZ) / 2 + MinZ;
CenterY = (MaxY - MinY) / 2 + MinY;
if(Action.Pos3.z < CenterX - 30) {
pz = MinZ + OtstupX.Value + x1;
if(Action.Pos3.y < CenterY - 30) {
py = MinY + OtstupY.Value + y1;
} else if(Action.Pos3.y > CenterY + 30) {
py = MaxY - OtstupY.Value - y1;
} else {
py = CenterY;
}
} else if(Action.Pos3.z > CenterX + 30) {
pz = MaxZ - OtstupX.Value - x1;
if(Action.Pos3.y < CenterY - 30) {
py = MinY + OtstupY.Value + y1;
} else if(Action.Pos3.y > CenterY + 30) {
py = MaxY - OtstupY.Value - y1;
} else {
py = CenterY;
}
} else {
pz = CenterX;
if(Action.Pos3.y < CenterY - 30) {
py = MinY + OtstupY.Value + y1;
} else if(Action.Pos3.y > CenterY + 30) {
py = MaxY - OtstupY.Value - y1;
} else {
py = CenterY;
}
}
if(UstanovkaOtPola.Value) {
py = OtPola.Value + y1;
}
if(Action.ViewDir.x == 1) {
px = MinX - panel.Thickness;
}
if(Action.ViewDir.x == -1) {
px = MinX + panel.Thickness;
}
if(Action.ViewDir.x !== -1 && Action.ViewDir.x !== 1) {
px = Action.Pos3.x;
}
}
//@note OnMove
Action.OnMove = function() {
DeleteNewObjects();
Obj = Action.Get3DObject();
if(typeof Obj == "undefined") {} else {
if(Obj.AsPanel) {
panel = Obj.AsPanel;
if(panel.ToGlobal(panel.GMin).x < panel.ToGlobal(panel.GMax).x) {
MinX = panel.ToGlobal(panel.GMin).x;
MaxX = panel.ToGlobal(panel.GMax).x;
} else {
MinX = panel.ToGlobal(panel.GMax).x;
MaxX = panel.ToGlobal(panel.GMin).x;
}
if(panel.ToGlobal(panel.GMin).y < panel.ToGlobal(panel.GMax).y) {
MinY = panel.ToGlobal(panel.GMin).y;
MaxY = panel.ToGlobal(panel.GMax).y;
} else {
MinY = panel.ToGlobal(panel.GMax).y;
MaxY = panel.ToGlobal(panel.GMin).y;
}
if(panel.ToGlobal(panel.GMin).z < panel.ToGlobal(panel.GMax).z) {
MinZ = panel.ToGlobal(panel.GMin).z;
MaxZ = panel.ToGlobal(panel.GMax).z;
} else {
MinZ = panel.ToGlobal(panel.GMax).z;
MaxZ = panel.ToGlobal(panel.GMin).z;
}
if((MaxX - MinX) > (MaxZ - MinZ)) {
GetKoordFrontPanel();
} else {
GetKoordVertPanel();
};
Ruchka.Mount1(Obj, px, py, pz, Ugol.Value);
}
}
}
Action.OnFinish = function() {
props.Save(filename)
}
Action.Continue();
[свернуть]
|
|
|
20.04.2023, 10:16
|
#686
|
Пользователь
Регистрация: 03.12.2019
Сообщений: 88
Сказал(а) спасибо: 28
Поблагодарили 115 раз(а) в 34 сообщениях
Вес репутации: 85
|
Цитата:
Сообщение от Ivashka_pnz
В том то и дело, не знаю как написать. Через NewFurniture выбираем ручку из базы, она может быть разного размера, и надо узнать ее размер. Это для расположения ее, или вертикально или горизонтально. Или может как то по другому это сделать можно.
|
у панелей, фрагментов, почти у всего в базисе есть свойства:
GabMax, GabMin, GSize, GCenter, GMin, GMax
прочитайте про них, в документации в скриптах коротенько но есть инфа
|
|
|
21.04.2023, 12:43
|
#687
|
Новичок
Регистрация: 22.02.2023
Сообщений: 7
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Может не так, но работает
PHP код:
RuchName = Handle.Value.Name; RuchRazmer = RuchName.replace(/\D/g,'');
|
|
|
21.04.2023, 13:46
|
#688
|
Местный
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 734
Сказал(а) спасибо: 1,529
Поблагодарили 884 раз(а) в 376 сообщениях
Вес репутации: 403
|
Цитата:
Сообщение от Ivashka_pnz
RuchName.replace(/\D/g,'')
|
Если в наименовании ручки будет несколько групп с цифрами, то такой подход чреват проблемами. Я бы советовал усложнить регулярное выражение.
|
|
|
21.04.2023, 14:08
|
#689
|
Новичок
Регистрация: 22.02.2023
Сообщений: 7
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Ovsyanicov
Если в наименовании ручки будет несколько групп с цифрами, то такой подход чреват проблемами. Я бы советовал усложнить регулярное выражение.
|
Думал об этом, буду смотреть за именем.
|
|
|
02.05.2023, 22:54
|
#690
|
Новичок
Регистрация: 27.11.2022
Сообщений: 16
Сказал(а) спасибо: 11
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Подскажите пожалуйста.
При запуске скрипта из VisualStudioCode сообщения alert отображаются нормально. При запуске скрипта путем выбора из выпадающего меню эти сообщения alert отображаются набором символов. Неправильно отображаются только сообщения с кирилицей, латиница отображается правильно. Я понимаю, что наверное где-то кодировка неправильная. Но где ее настроить, чтобы сообщения правильно отображались?
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 02:55. Часовой пояс GMT +3.
|