Форум профессиональных мебельщиков PROMEBELclub

Форум профессиональных мебельщиков PROMEBELclub (https://промебельклуб.рф/forum/index.php)
-   Базис-мебельщик. Скрипты (https://промебельклуб.рф/forum/forumdisplay.php?f=273)
-   -   БАЗИС 10 - Скрипты (https://промебельклуб.рф/forum/showthread.php?t=12463)

De_mon 11.11.2017 15:10

Поделитесь пожалуйста скриптом установки ручек для 10й версии, руки не дойдут 9й переписать

Sergenald 20.11.2017 14:05

День добрый. И так, новая задачка пришла от куда не ждал.
Нужно:
1)создать блок
2)в него добавить панели
3)по окончании скрипта созданный блок делать не видимым (панели из него не отображаются в окне модели, в окне свойств выделен светло-серым)
С первыми двумя пунктами ни каких проблем не возникло (для наглядности в двух разных исполнениях):

Скрытый текст


b = BeginBlock('Block_1');
AddVertPanel(0,0,1000,1000,0);
EndBlock();
c = AddBlock('Block_2');
Panel = AddVertPanel(0,0,1000,1000,100);
Panel.Owner = c;
[свернуть]

а вот с третьим всё не так гладко. При использовании .Visible = false; на блоке, каким бы способом он не создавался, код не прерывается, всё отрабатывает, а по окончании просто не добавляет блок в модель.

Скрытый текст


b = BeginBlock('Block_1');
AddVertPanel(0,0,1000,1000,0);
EndBlock();
c = AddBlock('Block_2');
Panel = AddVertPanel(0,0,1000,1000,100);
Panel.Owner = c;
b.Visible = false;
c.Visible = false;
[свернуть]

Мысль 1) Visible срабатывает слишком хорошо и блока не видно даже в настройках модели, но для программы он есть. *Но материала из него нет и в смете, и восстановление видимости его не находит. Из чего делаю вывод что он просто удаляется программой.
Мысль 2) Visible не является применимой к блокам. *Но Block дочерний от List3D, а List3D дочерний от Object3, в котором и определён Visible. По этому к примеру команда alert(Block.Visible); безошибочно отрабатывает.
И так вопрос: как скрыть блок? Может кто ещё какие команды знает для работы с видимостью?

Letos 20.11.2017 14:34

Цитата:

Сообщение от Sergenald (Сообщение 439193)
И так вопрос: как скрыть блок?

Вот первый попавшийся способ:

Скрытый текст

Код:

/**Имя блока. Желательно уникальное */
const blockName = 'My_script_block_#_1';
var b = BeginBlock(blockName);
AddVertPanel(0,0,1000,1000,0);
EndBlock();
//Сохраняем блок в модель
Action.Commit();
//Идем по всем объектам модели и ищем наш блок
Model.forEach((obj)=>{
    // Если имена совпадают, то это наш объект.
    // При наличии нескольких объектов с этим именем
    // в переменную b запишется последний найденный
    if (obj.Name === blockName){
        b = obj;
    }
})
// Делаем объект невидимым
b.Visible = false;
//Если заданное уникальное имя не нравится, меняем на то,
// которое должно быть.
b.Name = 'Block_1'

[свернуть]


UPD: При сохранении объектов, созданных в скрипте, сохраняются только видимые, а все невидимые удаляются (причем так только у корневых объектов. Панель в блоке можно делать невидимой и до сохранения). Поэтому созданный блок прекрасно делался невидимым а по завершении скрипта он не переносился в модель и удалялся.

tekken2007 30.11.2017 18:55

Всем привет! Кто то сможет исправить скрип ..использую несколько скриптов после перехода на 10 ... половина накрылась, я от этого далекий..

Скрытый текст


FileOptions = 'Труба_Настройки.xml';










MakeProperties();

Action.Properties.Load(FileOptions);



Action.OnFinish = function() {
Action.Properties.Save(FileOptions);
}






Action.Continue();

function MakeProperties() {

Prop = Action.Properties;







Krepej = Prop.NewFurniture('Трубодержатель');
Truba = Prop.NewMaterial('Материал Трубы')
Diametr = Prop.NewNumber('Диаметр трубы', 25)
Shirina = Prop.NewNumber('Ширина трубы', 25)
Vertik = Prop.NewBool('Вертикальная')
Vertik.OnChange = function()
{
Action.Commit()
}
}

if (Vertik.Value)
{
Bok1 = GetPanel("Укажите Нижнюю панель");
Bok2 = GetPanel("Укажите Верхнюю панель");

y1k = Bok1.GabMax.y
y2k = Bok2.GabMin.y


SetCamera(p3dTop )

z1 = Bok1.GabMin.z + 1;
z2 = Bok1.GabMax.z - 20;

}
else
{
Bok1 = GetPanel("Укажите 1-ую панель");
Bok2 = GetPanel("Укажите 2-ую панель");

x1k = Bok1.GabMax.x
x2k = Bok2.GabMin.x

x1 = x1k + 1;
x2 = x2k - 1;

SetCamera(p3dLeft)

z1 = Bok1.GabMin.z + 1;
z2 = Bok1.GabMax.z - 20;


}

//TPro = Bok2.Contour.TProjection;
//alert(Bok1);

//SetCamera(Bok1.PanelSideEnum(true));

//SetCamera(Bok1.PanelSideEnum=true);









function MoveOdj()
{
DeleteNewObjects()
Truba.SetActive()
Ext = AddExtrusion('Труба D25');
Ext.Name = 'Труба'
// выталкиваемый профиль
//truba = 'Труба25.frw'
//Ext.Contour.AddCircle(0, 0, Diametr.Value*0.5)
if (Shirina.Value < Diametr.Value) {
Ext.Contour.AddCircle(0, 0, Diametr.Value * 0.5);
}
else {
d = Shirina.Value - Diametr.Value
p1 = NewPoint(-Diametr.Value * 0.5, 0);
p2 = NewPoint(Diametr.Value * 0.5, 0);
p3 = NewPoint(-Diametr.Value * 0.5, d);
p4 = NewPoint(Diametr.Value * 0.5, d);
centre1 = NewPoint(0, -Diametr.Value * 0.5);
centre2 = NewPoint(0, Diametr.Value * 0.5 + d);
Ext.Contour.AddArc3(p1, centre1, p2);
Ext.Contour.AddArc3(p3, centre2, p4);
Ext.Contour.AddLine(p1.x, p1.y, p3.x, p3.y);
Ext.Contour.AddLine(p2.x, p2.y, p4.x, p4.y);

};

if (Vertik.Value)
{
Ext.Orient(AxisY, AxisZ);
// установим длину профиля
Ext.Thickness =y2k-y1k;
Ext.PositionX = Action.Pos3.x
Ext.PositionY = Action.Pos3.y
Ext.PositionZ = Action.Pos3.z
Ext.Translate(NewVector(0, y1k, 0))

Krepej.Value.Mount1(Bok1, Action.Pos3.x, y1k, Action.Pos3.z, 0)
Krepej.Value.Mount1(Bok2, Action.Pos3.x,y2k, Action.Pos3.z, 0)
}
else
{
// вытянем профиль вдоль оси X
Ext.Orient(AxisX, AxisZ);
Ext.RotateX(90);
// установим длину профиля
Ext.Thickness =x2-x1;
Ext.PositionX = Action.Pos3.x
Ext.PositionY = Action.Pos3.y
Ext.PositionZ = Action.Pos3.z
Ext.Translate(NewVector(x1, 0, 0))

Krepej.Value.Mount1(Bok1, x1k, Action.Pos3.y, Action.Pos3.z, 0)
Krepej.Value.Mount1(Bok2, x2k, Action.Pos3.y, Action.Pos3.z, 0)
}

}

Action.ShowPoints = true;
Action.OnMove = function() {MoveOdj()};
Action.OnClick = function() {Action.Finish()};
Action.Continue();
[свернуть]

Letos 01.12.2017 09:54

Вложений: 1
Цитата:

Сообщение от tekken2007 (Сообщение 440300)
Всем привет! Кто то сможет исправить скрип

Запустил у себя, все заработало, и вроде даже как надо. Вы бы хотя бы описали что не работает и после каких действий. Если у вас просто не запускается скрипт, то попробуйте запустить его из редактора скриптов и прислать скриншот выпавшей ошибки в логе. Во вложении пример такого скриншота.

Ovsyanicov 01.12.2017 13:45

Вложений: 3
Цитата:

Сообщение от Letos (Сообщение 440374)
Запустил у себя, все заработало, и вроде даже как надо

Я тоже ради интереса запустил и, вроде, заработало. Но потом выбрал в свойствах трубодержатель и понял - надо исправлять ))
Вложение 123675Вложение 123676Вложение 123678
При любом перемещении курсора происходит установка трубодержателей. Сама труба вместе с нужными трубодержателями устанавливается по ЛКМ.

Letos 01.12.2017 15:43

Вложений: 1
Цитата:

Сообщение от Ovsyanicov (Сообщение 440421)
Я тоже ради интереса запустил и, вроде, заработало. Но потом выбрал в свойствах трубодержатель и понял - надо исправлять ))

Приложил новый, исправленный скрипт (сменил формат на тхт, чтоб загрузился как вложение)

Цитата:

Сообщение от Ovsyanicov (Сообщение 440421)
При любом перемещении курсора происходит установка трубодержателей. Сама труба вместе с нужными трубодержателями устанавливается по ЛКМ.

У меня версия чуть поновее, где эта ошибка исправлена, поэтому у меня все нормально было)). Суть ошибки - функция Mount1 ставила крепеж сразу в модель, а не во временный объект. Это приводило ко многим жутким вещам - например все установленные во время перемещения курсора трубодержатели не отображались в истории. Поэтому в скрипт добавлено новое условие:
Код:

  //Если существует крепеж, и он не во временной области модели
  if (kr1 && kr1.Owner !== Model.Temp){
    //Удаляем крепеж
    DeleteObject(kr1);
    //удаляем ссылку на объект
    kr1 = undefined;
  }

Кстати, я видел, что есть "Библиотека фрагментов". Беглым поиском попытался найти "Библиотеку скриптов", но не нашел. Есть ли таковая, и, если ее нет, то имеет ли смысл ее создавать?

Uncle 01.12.2017 16:17

Цитата:

Сообщение от Letos (Сообщение 440437)
Беглым поиском попытался найти "Библиотеку скриптов", но не нашел. Есть ли таковая, и, если ее нет, то имеет ли смысл ее создавать?

Как таковой библиотеки нет. Есть парочка тем о скриптах от версии к версии Базиса. Обсуждается работа скрипта, какие - то скрипты выкладываются.. Массово выкладывать скрипты, на сколько я понял, компетентные в написании скриптов пользователи, особо не проявляют инициативы. Оно наверно и понятно - создание скрипта дело трудоемкое (не спец в этом, но так предполагаю)... Если у Вас есть желание открыть подобную тему, делиться в ней наработками - уверен, многие будут Вам очень признательны...

Megabyte 04.12.2017 09:06

Всем добрый день.

Возможно ли сделать следующее:
Есть список с названиями элементов (в файле Эксель, но можно записать в текстовый формат, csv или другой).
С помощью скрипта создать в Модели сборки с названиями из списка. Количество элементов в списке заранее неизвестно.

В написании скриптов мои знания сильно ниже среднего :) Поэтому буду долго и мучительно искать нужное решение.

Если кто-то знает несложное решение, буду признателен за подсказку.

По предыдущему сообщению вопрос снят. Решил другим способом.

Letos 07.12.2017 10:13

Товарищи скриптописатели, скриптопользователи, и все, неравнодушные к скриптам в Базисе. Предлагаю принять участие в обсуждении модернизации раздела системы Базис (а именно скриптов). Основная идея изложена в этом сообщении.


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

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