|
|
|
|
|
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..
Причина: Поправил шапку
|
Просмотров: 333753
|
07.07.2021, 02:29
|
#171
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
Цитата:
Сообщение от PravCom
Благодарю! Только модель ставится в начало координат, указать место курсором возможно?
|
поковырял... короче фрагмент специально оборачивается в блок, чтоб обнулить его кривые координаты.
есть три варианта.
1.оставляем создание блока и тогда скрипт такой:
Скрытый текст
Action.Continue();
var frag = AddBlock('шахмата');
frag.Load('КорольБ.fr3d');
frag.Owner = Model.Temp;
Action.OnClick = function() {
Action.Finish();
}
Action.OnMove = function() {
frag.PositionX = Action.Pos3.x;
frag.PositionY = Action.Pos3.y;
frag.PositionZ = Action.Pos3.z;
} [свернуть]
2.убираем создание блока, но тогда необходимо исправить сам фрагмент. открыв его для редактирования и выделив блок в котором тела вращения, мы увидим что позиция блока уже не ноль, нужно обнулить (разрушить блок и сгруппировать в блок заново) и пересохранить фрагмент. тогда скрипт такой:
Скрытый текст
Action.Continue();
Model.Load('КорольБ.fr3d');
var frag = Model.Objects[Model.Count - 1];
frag.Owner = Model.Temp;
Action.OnClick = function() {
Action.Finish();
}
Action.OnMove = function() {
frag.PositionX = Action.Pos3.x;
frag.PositionY = Action.Pos3.y;
frag.PositionZ = Action.Pos3.z;
} [свернуть]
3.на мой взгляд, самый правильный вариант, это если внутри фрагмента вообще нет блока, сразу тела вращения. сам фрагмент по сути уже блок.
тогда загрузка фрагмента идет другим образом и скрипт выглядит так:
Скрытый текст
Action.Continue();
var frag = OpenFurniture('КорольБ.fr3d');
if (frag) {
var obj = frag.Make(0, 0);
obj.Owner = Model.Temp;
obj.Build();
}
Action.OnClick = function() {
Action.Finish();
}
Action.OnMove = function() {
obj.PositionX = Action.Pos3.x;
obj.PositionY = Action.Pos3.y;
obj.PositionZ = Action.Pos3.z;
} [свернуть]
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
07.07.2021, 08:10
|
#172
|
Местный
Регистрация: 15.10.2019
Адрес: Кишинёв
Сообщений: 198
Сказал(а) спасибо: 492
Поблагодарили 72 раз(а) в 31 сообщениях
Вес репутации: 89
|
Цитата:
Сообщение от kos100pudov
ну наконец победил.
скрипт заменяет фрагменты блоками, с сохранением названий, артикулов, позиций, обозначений, пользовательских свойств, типа для салона и отметки "сборочная единица".
удаляет ненужные габаритные рамки/линии стыка, пустые блоки, контуры, кроме вспомогательных линий - с ними не пойму пока...
|
Очень круто, просто нереально! я предполагал, что скрипты, это реальная помощь в работе, но не ожидал, что они настолько облегчают жизнь!
kos100pudov - Вам РЕСПЕКТ И УВАЖЕНИЕ!!!
skromvit - Вам спасибо за просьбу на счёт разрушения схем крепежа! это стало отправной точкой.
Цитата:
Сообщение от kos100pudov
есть три варианта.
|
Балгодарю! Три способа даже интереснее, в разных ситуациях будет выбор. Сохраню все три способа.
|
|
|
Пользователь сказал cпасибо:
|
|
07.07.2021, 11:18
|
#173
|
Новичок
Регистрация: 28.01.2021
Сообщений: 17
Сказал(а) спасибо: 49
Поблагодарили 2 раз(а) в 2 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от kos100pudov
да с ArrangePositions в 8-ке косяк.. посмотрел, действительно нет пока такой функции.
тогда порядок действий такой.
изначально расставляете позиции всей модели штатным методом Базиса, это как раз нужно для того, чтоб для одинаковых панелей базис сам поставил одинаковую позицию и тогда мы потом заменим эти позиции тоже на одинаковые.
расставит позиции внутри выделенного блока, а подблоки не тронет
function NumPos(Group) {
var artpos = {};
var numpos = 0;
for (var i = 0; i < Group.Count; ++i) {
if (Group.Objects[i].ArtPos > 0) {
if (!artpos[Group.Objects[i].ArtPos]) {
++numpos;
artpos[Group.Objects[i].ArtPos] = numpos;
}
}
}
for (var i = 0; i < Group.Count; ++i) {
if (Group.Objects[i].ArtPos > 0) {
Group.Objects[i].ArtPos = artpos[Group.Objects[i].ArtPos];
}
}
}
NumPos(Model.Selected);
|
Можно подправить данный скрипт для БМ8, чтобы в подблоках ВЫДЕЛЕННОГО блока так же расставлялись позиции последовательно. Допустим есть блок шкаф, внутри подблоки ящики. В шкафу позиции 1..2..3, в ящиках 4..5..6..?
И можно сделать отдельный скрипт для БМ8, чтобы на ВЫДЕЛЕННЫХ деталях расставлялись позиции 1..2..3.
|
|
|
07.07.2021, 11:41
|
#174
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
Цитата:
Сообщение от Mullerr
Можно подправить данный скрипт для БМ8, чтобы в подблоках ВЫДЕЛЕННОГО блока так же расставлялись позиции последовательно. Допустим есть блок шкаф, внутри подблоки ящики. В шкафу позиции 1..2..3, в ящиках 4..5..6..?
И можно сделать отдельный скрипт для БМ8, чтобы на ВЫДЕЛЕННЫХ деталях расставлялись позиции 1..2..3.
|
Уточните.
1. Расставить позиции внутри выделенного блока начиная с 1-цы, не обращая внимания на то что панели могут быть в подблоке?
2.позиции выделенных позиций с 1-цы. А если у вас в модели уже есть панель с позицией 1? Для корректной расстановки позиций, пользователь сначала должен расставить позиции штатным способом базиса, чтоб базис сравнил панели и одинаковым назначил одинаковую позицию, а мы используем это для скриптовой расстановки, иначе у нас не получится присвоить одинаковым панелями одинаковую позицию..
|
|
|
08.07.2021, 09:32
|
#175
|
Местный
Регистрация: 15.10.2019
Адрес: Кишинёв
Сообщений: 198
Сказал(а) спасибо: 492
Поблагодарили 72 раз(а) в 31 сообщениях
Вес репутации: 89
|
Есть такой волшебный скрипт
Скрытый текст
Цитата:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
|
|
[свернуть]
Очень интересный. Из выпадающего списка заинтересовало следующее: при объединении двух листовых материалов в единый, образуется цельный лист с теми же характеристиками, что и изначальный. Т.е. если объединяем два ДСП в единый, образуется единый ДСП, а не "вычитание" или "объединение тел". Смысл в том, чтобы на выходе спецификации тела с "объединениями" или "вычитаниями" тоже отображались теми же материалами. В скрипте, который я представил (спасибо тому человеку, который его создал) при объединении тел на выходе мы получаем полноценную деталь со всеми начальными характеристиками, должным образом отображаемую в спецификации.
Мой вопрос следующий - можно ли в скрипт к списку добавить функцию вычитания или сделать новый отдельный скрипт подобного рода? Чтобы он обладал теми же характеристиками, что и объединение в скрипте. Чтобы при вычитании получилась полноценно отображаемая деталь в спецификации.
Последний раз редактировалось SsensusS; 08.07.2021 в 14:52.
|
|
|
08.07.2021, 13:42
|
#176
|
Местный
Регистрация: 15.10.2019
Адрес: Кишинёв
Сообщений: 198
Сказал(а) спасибо: 492
Поблагодарили 72 раз(а) в 31 сообщениях
Вес репутации: 89
|
Цитата:
Сообщение от PravCom
можно ли в скрипт к списку добавить функцию вычитания
|
Хотя бы просто код функции вычитания скриптом кто-нибудь знает?
|
|
|
09.07.2021, 10:37
|
#177
|
Новичок
Регистрация: 28.01.2021
Сообщений: 17
Сказал(а) спасибо: 49
Поблагодарили 2 раз(а) в 2 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от kos100pudov
Уточните.
1. Расставить позиции внутри выделенного блока начиная с 1-цы, не обращая внимания на то что панели могут быть в подблоке?
2.позиции выделенных позиций с 1-цы. А если у вас в модели уже есть панель с позицией 1? Для корректной расстановки позиций, пользователь сначала должен расставить позиции штатным способом базиса, чтоб базис сравнил панели и одинаковым назначил одинаковую позицию, а мы используем это для скриптовой расстановки, иначе у нас не получится присвоить одинаковым панелями одинаковую позицию..
|
1. Совершенно верно.
2. Сначала расставляем позиции штатным способом в модели, затем выделяем нужные детали, нажимаем скрипт, позиции Выделенных панелей расставляются начиная с 1 (1..2..3.. соответственно одинаковые детали в Выделенных панелях под одним номером). Если в НЕвыделенных панелях модели уже есть детали с такими же номерами, то ничего страшного.
|
|
|
11.07.2021, 12:51
|
#178
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
Цитата:
Сообщение от Mullerr
1. Совершенно верно.
2. Сначала расставляем позиции штатным способом в модели, затем выделяем нужные детали, нажимаем скрипт, позиции Выделенных панелей расставляются начиная с 1 (1..2..3.. соответственно одинаковые детали в Выделенных панелях под одним номером). Если в НЕвыделенных панелях модели уже есть детали с такими же номерами, то ничего страшного.
|
набросал 5 вариантов)))
позиции в выделенных блоках глобально - расставляем позиции во всех выделенных блоках, подблоки не трогаем. одинаковые объекты в разных выделенных блоках получат одинаковую позицию.
Скрытый текст
function NumPos(group) {
//var artpos = {};
//var numpos = 0;
for (var i = 0; i < group.Count; ++i) {
if (group.Objects[i].ArtPos > 0) {
if (!artpos[group.Objects[i].ArtPos]) {
++numpos;
artpos[group.Objects[i].ArtPos] = numpos;
}
group.Objects[i].ArtPos = artpos[group.Objects[i].ArtPos];
}
}
}
var artpos = {};
var numpos = 0;
for (var i = 0; i < Model.SelectionCount; ++i){
if (Model.Selections[i].List){
NumPos(Model.Selections[i]);
}
} [свернуть]
позиции в выделенных блоках локально - расставляем позиции во всех выделенных блоках, подблоки не трогаем. в каждом из выделенных блоков нумерация позиций объектов начинается сначала.
Скрытый текст
function NumPos(group) {
var artpos = {};
var numpos = 0;
for (var i = 0; i < group.Count; ++i) {
if (group.Objects[i].ArtPos > 0) {
if (!artpos[group.Objects[i].ArtPos]) {
++numpos;
artpos[group.Objects[i].ArtPos] = numpos;
}
group.Objects[i].ArtPos = artpos[group.Objects[i].ArtPos];
}
}
}
//var artpos = {};
//var numpos = 0;
for (var i = 0; i < Model.SelectionCount; ++i){
if (Model.Selections[i].List){
NumPos(Model.Selections[i]);
}
} [свернуть]
позиции в выделенных блоках_подблоках глобально - расставляем позиции во всех выделенных блоках и их подблоках. одинаковые объекты в разных выделенных блоках_подблоках получат одинаковую позицию.
Скрытый текст
function NumPos(group) {
//var artpos = {};
//var numpos = 0;
for (var i = 0; i < group.Count; ++i) {
if (group.Objects[i].ArtPos > 0) {
if (!artpos[group.Objects[i].ArtPos]) {
++numpos;
artpos[group.Objects[i].ArtPos] = numpos;
}
group.Objects[i].ArtPos = artpos[group.Objects[i].ArtPos];
}
if (group.Objects[i].List) {
NumPos(group.Objects[i]);
}
}
}
var massObj = [];
for (var i = 0; i < Model.SelectionCount; ++i){
if (Model.Selections[i].List){
massObj.push(Model.Selections[i]);
}
}
//снимаем выделение блока если он находится внутри уже выделенного блока
for (var i = 0; i < massObj.length; ++i){
if ((massObj[i].List)&&(massObj[i].Owner instanceof TFurnBlock)&&(massObj[i].Owner.Selected)){
massObj[i].Selected = false;
}
}
var artpos = {};
var numpos = 0;
for (var i = 0; i < Model.SelectionCount; ++i){
if (Model.Selections[i].List){
NumPos(Model.Selections[i]);
}
} [свернуть]
позиции в выделенных блоках_подблоках локально - расставляем позиции во всех выделенных блоках и их подблоках. в каждом блоке_подблоке нумерация позиций объектов начинается сначала.
Скрытый текст
function NumPos(group) {
var artpos = {};
var numpos = 0;
for (var i = 0; i < group.Count; ++i) {
if (group.Objects[i].ArtPos > 0) {
if (!artpos[group.Objects[i].ArtPos]) {
++numpos;
artpos[group.Objects[i].ArtPos] = numpos;
}
group.Objects[i].ArtPos = artpos[group.Objects[i].ArtPos];
}
if (group.Objects[i].List) {
NumPos(group.Objects[i]);
}
}
}
var massObj = [];
for (var i = 0; i < Model.SelectionCount; ++i){
if (Model.Selections[i].List){
massObj.push(Model.Selections[i]);
}
}
//снимаем выделение блока если он находится внутри уже выделенного блока
for (var i = 0; i < massObj.length; ++i){
if ((massObj[i].List)&&(massObj[i].Owner instanceof TFurnBlock)&&(massObj[i].Owner.Selected)){
massObj[i].Selected = false;
}
}
//var artpos = {};
//var numpos = 0;
for (var i = 0; i < Model.SelectionCount; ++i){
if (Model.Selections[i].List){
NumPos(Model.Selections[i]);
}
} [свернуть]
позиции выделенных объектов глобально - расстановка позиций выделенных объектов сначала, невзирая на их нахождение в блоках_подблоках
Скрытый текст
function NumPos(obj) {
if (obj.ArtPos > 0) {
if (!artpos[obj.ArtPos]) {
++numpos;
artpos[obj.ArtPos] = numpos;
}
obj.ArtPos = artpos[obj.ArtPos];
}
}
var artpos = {};
var numpos = 0;
for (var i = 0; i < Model.SelectionCount; ++i){
if (!Model.Selections[i].List){
NumPos(Model.Selections[i]);
}
} [свернуть]
обратите внимание на закоментированные или незакоментированные строки "var artpos = {};" и "var numpos = 0;" - именно от их расположения зависит как будет происходить расстановка позиций локально или глобально
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
12.07.2021, 18:27
|
#179
|
Новичок
Регистрация: 18.12.2019
Сообщений: 3
Сказал(а) спасибо: 5
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
|
Здравствуйте, хотел спросить может есть скрипт смотри выделенный объек, высматривает фурнитуру и проверяет по имени или артиклу, обращается к списку формата json и перемножает колличество фурнитуры и вес указанный в файле и в конце выдаёт весь вес?
|
|
|
12.07.2021, 19:54
|
#180
|
Местный
Регистрация: 02.11.2015
Сообщений: 490
Сказал(а) спасибо: 105
Поблагодарили 701 раз(а) в 265 сообщениях
Вес репутации: 293
|
Цитата:
Сообщение от DocAndre
Здравствуйте, хотел спросить может есть скрипт смотри выделенный объек, высматривает фурнитуру и проверяет по имени или артиклу, обращается к списку формата json и перемножает колличество фурнитуры и вес указанный в файле и в конце выдаёт весь вес?
|
список в формате json в студию!)
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 19:22. Часовой пояс GMT +3.
|