|
|
|
|
|
21.03.2018, 14:48
|
|
Обсуждение скриптов в Системе Базис
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,035 раз(а) в 367 сообщениях
21.03.2018, 14:48
Рейтинг:
()
Если вы не знаете, или не уверены, куда задавать вопрос по скриптам в Системе Базис, то эта тема для вас.
Обратите внимание на полезные ответы в этой теме!
|
Просмотров: 263241
|
2 пользователя(ей) сказали cпасибо:
|
|
13.05.2024, 08:57
|
#511
|
Новичок
Регистрация: 11.10.2023
Сообщений: 9
Сказал(а) спасибо: 9
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
А возможно ли скриптом решить такую задачу:
На чертежах панелей тыкать мышью на нужную грань панели и автоматом ставить какой-то спец знак (допустим треугольник). Для условного обозначения края (кромка, шлифовка или еще что-то), без текста и чтобы окно это не выпадало (где надо вводить текст)
|
|
|
13.05.2024, 12:24
|
#512
|
Местный
Регистрация: 22.12.2008
Сообщений: 278
Сказал(а) спасибо: 55
Поблагодарили 246 раз(а) в 179 сообщениях
Вес репутации: 265
|
Цитата:
Сообщение от f2dvasek
А возможно ли скриптом решить такую задачу:
На чертежах панелей тыкать мышью на нужную грань панели и автоматом ставить какой-то спец знак (допустим треугольник). Для условного обозначения края (кромка, шлифовка или еще что-то), без текста и чтобы окно это не выпадало (где надо вводить текст)
|
В чертежах скрипты не работают
|
|
|
Пользователь сказал cпасибо:
|
|
13.05.2024, 16:52
|
#513
|
Местный
Регистрация: 11.07.2010
Сообщений: 137
Сказал(а) спасибо: 323
Поблагодарили 118 раз(а) в 46 сообщениях
Вес репутации: 206
|
Цитата:
Сообщение от f2dvasek
А возможно ли скриптом решить такую задачу:
На чертежах панелей тыкать мышью на нужную грань панели и автоматом ставить какой-то спец знак (допустим треугольник). Для условного обозначения края (кромка, шлифовка или еще что-то), без текста и чтобы окно это не выпадало (где надо вводить текст)
|
Как вариант, попробуйте сохранить спецзнак, как 2д фрагмент, а на чертеже ставьте, как 2д фрагмент.
|
|
|
Пользователь сказал cпасибо:
|
|
15.05.2024, 17:43
|
#514
|
Новичок
Регистрация: 02.12.2014
Сообщений: 19
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
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();
//создаем ссылку на новый объект модели - это установленая ручка
var new_fast = Model.Objects[Model.Count - 1];
//если выбрано "создание нового блока"
if (InBlock.Value) {
//создаем новый блок
var new_block = AddBlock('фасад с ручкой');
new_block.Build();
Action.Commit();
new_block = Model.Objects[Model.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();
Но он периодически, то работает нормально, а то просто удаляет всю модель. Приходится закрывать Базис без сохранения и запускать заново.
Последний раз редактировалось AlexBolton; 26.05.2024 в 00:16.
Причина: оформление
|
|
|
25.05.2024, 23:54
|
#515
|
Новичок
Регистрация: 17.11.2018
Сообщений: 1
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от Артем Валерьевич
Попробуйте этот вариант:
Код:
/*
Скрипт вертикальной фрезеровки панелей
26.05.2023 (с) Артем, email - asked77@gmail.com
*/
UnSelectAll();
Panel = GetPanel("Выберите панель");
// Action.DS.DrawMode = 2;
Undo.RecursiveChanging(Panel);
Prop = Action.Properties;
// ------------------------------------------------------------------------------------------------------------------------------
sLeft = Prop.NewNumber('Отступ слева:', 50);
sRight = Prop.NewNumber('Оступ справа:', 0);
sButton = Prop.NewButton('Выровнять отступы?');
sUp = Prop.NewNumber('--- сверху:', 50);
sDown = Prop.NewNumber('--- снизу:', 50);
// ------------------------------------------------------------------------------------------------------------------------------
sWidth = Prop.NewNumber('Ширина паза:', 0);
sHeight = Prop.NewNumber('Глубина паза:', 0);
sStep = Prop.NewNumber('Сдвиг паза по глубине:');
sStep.MinValue = 0; sStep.MaxValue = 3;
sInterval = Prop.NewNumber('Интервал между пазами:', 10);
sText = Prop.NewString('Имя паза:', 'stripes');
// ------------------------------------------------------------------------------------------------------------------------------
sCount = Prop.NewNumber('Убрать паз справа', 0);
sForm = Prop.NewSelector('Выбрать форму паза', '');
sTere = Prop.NewBool('Перемычки', true);
sLeft.BackColor = sUp.BackColor = sDown.BackColor = sInterval.BackColor = sCount.BackColor = sForm.BackColor = sStep.BackColor = 15728607;
sRight.Enabled = sWidth.Enabled = sHeight.Enabled = sText.Enabled = false;
// ------------------------------------------------------------------------------------------------------------------------------
sButton.OnClick = () => {
while (Math.abs(sLeft.Value - sRight.Value) > 1) {
sLeft.Value = ((sLeft.Value + sRight.Value) / 2).toFixed(0);;
}
CreateStripes(sForm.Value);
};
Prop.NewButton('Ok').OnClick = () => {
CreateStripes(sForm.Value);
Action.Finish();
};
sForm.OnClick = () => {
sForm.Value = system.askFileName('frw');
CreateStripes(sForm.Value);
};
sLeft.OnChange = sUp.OnChange = sDown.OnChange = sInterval.OnChange = sDown.OnChange = sStep.OnChange = sStep.OnChange = sTere.OnChange = sCount.OnChange = () => {
CreateStripes(sForm.Value);
}
FileOptions = 'stripes.xml';
Action.Properties.Load(FileOptions);
Action.OnFinish = () => {
Action.Properties.Save(FileOptions);
}
CreateStripes(sForm.Value);
Action.Continue();
function CreateStripes(sF) {
for (i = Panel.Cuts.Count - 1; i >= 0; i--) {
if (Panel.Cuts.Cuts[i].Name == sText.Value) {
Panel.Cuts.Delete(i);
}
}
yMin = Panel.GMin.y + sDown.Value;
yMax = Panel.GMax.y - sUp.Value;
if (sF) {
Cut = Panel.AddCut(sText.Value);
Cut.Contour.Load(sF);
Cut.Contour.Move(0, Panel.Thickness + sStep.Value);
sWidth.Value = Cut.Contour.Width.toFixed(2);
sHeight.Value = Cut.Contour.Height.toFixed(2);
sStep.MaxValue = sHeight.Value;
x = Math.round((Panel.Contour.Width - sLeft.Value) / (sWidth.Value + sInterval.Value));
sRight.Value = ((Panel.Contour.Width - sLeft.Value) - (x - 1 - sCount.Value) * (sWidth.Value + sInterval.Value) - sWidth.Value).toFixed(0);
for (k = 0; k < x - sCount.Value; k++) {
[yMin, yMax] = [yMax, yMin];
Cut.Trajectory.AddLine(Panel.GMin.x + sLeft.Value + sWidth.Value / 2 + k * (sWidth.Value + sInterval.Value), yMin, Panel.GMin.x + sLeft.Value + sWidth.Value / 2 + k * (sWidth.Value + sInterval.Value), yMax);
if (sTere.Value) {
Cut.Trajectory.AddLine(Panel.GMin.x + sLeft.Value + sWidth.Value / 2 + k * (sWidth.Value + sInterval.Value), yMin, Panel.GMin.x + sLeft.Value + sWidth.Value / 2 + (k + 1) * (sWidth.Value + sInterval.Value), yMin);
}
}
if (sTere.Value) Cut.Trajectory.Delete(Cut.Trajectory.Count - 1);
};
Panel.Build();
}
|
Очень полезный скрипт, но запускается только в случае-если это первая операция в модели. Если уже что-то делал, то совсем никак не реагирует. Обидно, что не понимаю. Пофиксил бы сам. Но, если можете починить-почините пожалуйста
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 10:16. Часовой пояс GMT +3.
|