|
|
|
|
|
13.01.2014, 13:22
|
|
БАЗИС 9 - Скрипты
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
13.01.2014, 13:22
Рейтинг:
()
ВНИМАНИЕ! Правила выкладывания скриптов.
1. Если в скрипте нет ссылок на фурнитуру, фрагменты и.т.д то достаточно его упаковать в архив и выложить.
2. Если в скрипте есть ссылки на фурнитуру, фрагменты и т.д. то архив должен содержать папку с самим скриптом и всеми файлами на которые есть ссылки в тексте скрипта.
Т.к. при запуске скрипта на другом компе возникает ошибка о не возможности открыть то или иной файл и скрипт до конца не отрабатывает свой текст. Не соблюдается "чистота проверки" работы скрипта.
__________________________________________________ _______________
Интересует информация по редактору скриптов в БМ8. Существует ли справочная документация и примеры использования скриптов в БМ8. Какие возможности дает данная функция? Владеющим информацией по данному вопросу просьба поделиться ею.
Для работы скриптов от Igor_482 необходим установленный ODBC драйвер FireBird, установленные и зарегистрированные в ОС модули FBDBDialog.dll, MSDATGRD.OCX, MSCOMCTL.OCX и MSSTDFMT.DLL ( сообщение с описанием установки этих модулей в ОС, ссылка на модули и исходник "FBDBDialog.dll") а так же файл "ADODB.ini" с настройками соединения к БД в папке со скриптом.
ADODB.ini
[General]
FDBServ = t001
FBSPort = 14357
FDBFile = D:\DBBM\Библиотека\БД\BMDB09.FDB
FBCFile = C:\Windows\System32\fbclient.dll
----------------------------------------------
Переменные .ini:
FDBServ - имя ПК на котором находится сервер FireBird с используемой БД (если локально, то параметр: localhost или 127.0.0.1);
FBSPort - в настройке не нуждается (по умолчанию: 14357);
FDBFile - локальный путь к БД на сервере FireBird;
FBCFile - путь к файлу "fbclient.dll" (находится в корневой папке программы Базис).
[свернуть]
Последний раз редактировалось systland; 23.09.2016 в 11:52..
|
Просмотров: 993206
|
Пользователь сказал cпасибо:
|
|
18.07.2016, 10:47
|
#1191
|
VIP
Регистрация: 15.11.2008
Адрес: г.Москва
Сообщений: 498
Сказал(а) спасибо: 3,218
Поблагодарили 1,353 раз(а) в 312 сообщениях
Вес репутации: 507
|
Цитата:
Сообщение от Saha SG-552
Если в модели только один блок, то сборка с ним создается нормально.
Если же больше, то вылетает ошибка и один из блоков пропадает.
Намекните, что делаю не так?
|
Сначала все блоки нужно записать в массив, а потом с ними работать.
PHP код:
StartEditing(Model); BlockArray = [];
Model.forEach(function(obj) { if (obj instanceof TFurnBlock) { BlockArray.push(obj); }; });
for (i = 0; i < BlockArray.length; i++) { Sborka = AddAssembly(BlockArray[i].Name); Sborka.Owner = BlockArray[i].Owner; //закоментарить, если не нужна вложенность BlockArray[i].Owner = Sborka; }; Model.FullBuild;
Да и еще, блоком является составная фурнитура. Проверял на модели с блоками, без составной фурнитуры.
__________________
Обходя разложенные грабли - ты теряешь драгоценный ОПЫТ!
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
19.07.2016, 12:31
|
#1192
|
Пользователь
Регистрация: 16.03.2016
Сообщений: 31
Сказал(а) спасибо: 52
Поблагодарили 26 раз(а) в 6 сообщениях
Вес репутации: 107
|
Работает очень странно...
Создает сборки выборочно, не на все блоки. Заметил, что на блоки, созданные с помощью скриптов ранее, не создает сборки. Есть еще одна проблема: сборки, созданные этим скриптом, невозможно разрушить стандартными средствами. Команда "разрушить сборки по имени" не видит эти сборки, как сборки. Беда, в общем.
|
|
|
19.07.2016, 14:15
|
#1193
|
Местный
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 803 раз(а) в 179 сообщениях
Вес репутации: 358
|
Попробуйте закомментировать строчку Sborka.Owner = BlockArray[i].Owner;
|
|
|
19.07.2016, 18:28
|
#1194
|
Пользователь
Регистрация: 16.03.2016
Сообщений: 31
Сказал(а) спасибо: 52
Поблагодарили 26 раз(а) в 6 сообщениях
Вес репутации: 107
|
Цитата:
Сообщение от Briz
Попробуйте закомментировать строчку Sborka.Owner = BlockArray[i].Owner;
|
К сожалению, все то же самое =(
|
|
|
20.07.2016, 09:31
|
#1195
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Экспорт в three.js
добавлено:
-подрезки профилей
-зеркало(для материалов с зеркальностью>50% ). но тут уже начинаются компромисы с fps, особенно на медленных браузерах и слабых машинах.
-вычитание(пока только для одного уровня)
фасады - пока нет.
|
|
|
22.07.2016, 04:06
|
#1196
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Экспорт в three.js Гнутой панели.
Подскажите рабочие варианты.
Вот мои предварительные:
1) ExtrudeGeometry : контур – сечение, линия — высота. Нет возможности редактировать контур, то есть всегда прямоугольный (если только не изголяться с вычитаниями).
2) Разделить вертикально контур панели, и этими кусками выставлять вдоль траектории. Отображение должно быть не плохим, но в перспективе не будет возможности редактировать в three.js как единую гнутую панель. Размер файла будет чуть больше чем хотелось бы.
3) Найти приемлемый модификатор.
Пробовал этот 1. Не гнёт как надо.
Пробовал этот 2. Тож не совсем то.
4) Написать приемлемый модификатор.
5) Писать треугольники. Минусы: большой файл на выходе, не будет возможности редактировать в three.js.
6) Пытать разработчиков three.js до появления решения.
|
|
|
Пользователь сказал cпасибо:
|
|
22.07.2016, 09:41
|
#1197
|
Местный
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 803 раз(а) в 179 сообщениях
Вес репутации: 358
|
1)Я бы выбрал писать треугольники если нет необходимости редактировать в three.js. С величиной файла можно побороться путем группировки одинаковых точек и округлением координат до 1-2 знаков после запятой.
2)В Базисе до без ядра C3D используется следующий алгоритм модификатора:
Скрытый текст
PHP код:
procedure TFurnPanel.BentVNTransform(var P, N: TVector);
const
cEps = 1e-8;
cEps2 = 1e-4;
var
k, Index: Integer;
PrevX, NextX, dx: Double;
Arc: T2DArc;
Angle, DAngle: Double;
SinA, CosA, Nx, PosZ: Double;
Pos2: T2DPoint;
Line: T2DLine;
begin
PrevX := 0;
Index := -1;
IsContourRectangle;
P.x := P.x - FRectPos.x;
for k := 0 to FBentContour.Count - 1 do
begin
NextX := PrevX + FBentContour[k].ObjLength;
if (p.x > PrevX - cEps) and (p.x < NextX + cEps2) then
begin
Index := k;
break;
end;
PrevX := NextX;
end;
if Index < 0 then
begin
if P.x < 0 then
begin
Index := 0;
PrevX := 0;
end
else
begin
Index := FBentContour.Count - 1;
PrevX := PrevX - FBentContour[Index].ObjLength;
end;
end;
if Index > -1 then
begin
dx := p.x - PrevX;
case FBentContour[Index].ElType of
etArc:
begin
Arc := FBentContour[Index].AsArc;
DAngle := dx / Arc.ArcRadius;
if Arc.ArcDir then
begin
Angle := Arc.Pos1Angle + DAngle;
PosZ := Arc.ArcRadius - p.z;
end
else
begin
Angle := Arc.Pos1Angle - DAngle;
PosZ := Arc.ArcRadius + p.z;;
end;
// position
Pos2 := P2DOffset(Arc.Center, PosZ, Angle);
p.x := Pos2.x;
p.z := Pos2.y;
//rotating normal
SinCos(Angle + Pi/2, SinA, CosA);
if not Arc.ArcDir then
begin
SinA := -SinA;
CosA := -CosA;
end;
Nx := N.x;
N.x:= CosA * Nx - SinA * N.z;
N.z:= CosA * N.z + SinA * Nx;
end;
etLine:
begin
Line := FBentContour[Index].AsLine;
Angle := Line.LineAngle + Pi/2;
// position
Pos2 := Line.Pos1 + Line.LineDir * (dx / Line.ObjLength);
Pos2 := P2DOffset(Pos2, P.z, Angle);
p.x := Pos2.x;
p.z := Pos2.y;
//rotating normal
SinCos(Angle - Pi/2, SinA, CosA);
Nx := N.x;
N.x:= CosA * Nx - SinA * N.z;
N.z:= CosA * N.z + SinA * Nx;
end;
end;
end;
end;
[свернуть]
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
02.08.2016, 09:07
|
#1198
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
|
Экспорт в three.js: Объект в треугольники
Скрытый текст
var t = [];
p= GetObject("Укажите объект")
// p = Model.Selections[0]
t.push('var geometry=new THREE.Geometry();')
t.push('gv=geometry.vertices;')
t.push('gf=geometry.faces;')
verticies = []
tv = []
tf = []
t.push('gv.push(')
for(ils =0; ils<p.TriListsCount;ils++)
{
ts = p.TriLists[ils]
//system.log(ils+ ' из '+ p.TriListsCount)
for(it = 0; it<ts.Count;it++){
tr = ts.Triangles[it]
// system.log(it+ ' из '+ ts.Count)
/*
Vertex1:[object Object]
Vertex2:[object Object]
Vertex3:[object Object]
Normal:[object Object]
Normal1:[object Object]
Normal2:[object Object]
Normal3:[object Object]
TexCoord1:[object Object]
TexCoord2:[object Object]
TexCoord3:[object Object]
Edge12:false
Edge23:false
Edge31:true
*/
v1 = tr.Vertex1
v2 = tr.Vertex2
v3 = tr.Vertex3
v1 = OkruglitTochku(v1)
v2 = OkruglitTochku(v2)
v3 = OkruglitTochku(v3)
///////////////////////////////////////////////////-------------------------
v1i=tochkuVface(v1)
v2i=tochkuVface(v2)
v3i=tochkuVface(v3)
//v=n
//t.push('n=new THREE.Vector3(' + v.x + ',' + v.y + ',' + v.z + ');')
//t.push('f=new THREE.Face3('+v1i+','+v2i+','+v3i+',n);')
tf.push('new THREE.Face3('+v1i+','+v2i+','+v3i+')')
// system.log(JSON.stringify(v1))
}
}
//system.log(JSON.stringify(tv))
separator = ',\n'
tv0 = tv.join(separator)
t.push(tv0)
t.push(');')
t.push('gf.push(')
separator = ',\n'
t.push(tf.join(separator))
t.push(');')
t.push('geometry.mergeVertices();')
t.push('geometry.computeVertexNormals();')
separator = '\n'
system.askWriteTextFile('js', t.join(separator))
function tochkuVface(v)
{
///////////////////////////////////////////////////-------------------------
//найти точку
inv = -1;
for(iv=0;iv<verticies.length;iv++)
{
if((verticies[iv].x== v.x)&&(verticies[iv].y== v.y)&&(verticies[iv].z== v.z))
{
inv=iv
break
}
}
//--найти точку
if(inv==-1)
{
verticies.push(v)
tv.push('new THREE.Vector3(' + v.x + ',' + v.y + ',' + v.z + ')')
inv = verticies.length-1
}
return inv
///////////////////////////////////////////////////===============================
}
function OkruglitTochku(v)
{
if(v.x!= Math.round(v.x)){v.x = v.x.toFixed(1)}
if(v.y!= Math.round(v.y)){v.y = v.y.toFixed(1)}
if(v.z!= Math.round(v.z)){v.z = v.z.toFixed(1)}
return v
}
[свернуть]
|
|
|
02.08.2016, 16:38
|
#1199
|
Местный
Регистрация: 11.12.2015
Адрес: СССР
Сообщений: 400
Сказал(а) спасибо: 445
Поблагодарили 388 раз(а) в 156 сообщениях
Вес репутации: 219
|
Оффтоп.
Коллеги, откуда у Вас время есть на изучение скриптов?
Обычно технолог как загнанная лошадь - заказы в работу выпускает, на остальное времени нет.
|
|
|
6 пользователя(ей) сказали cпасибо:
|
|
06.08.2016, 19:11
|
#1200
|
VIP
Регистрация: 05.05.2008
Адрес: Коломна
Сообщений: 10,452
Сказал(а) спасибо: 14,824
Поблагодарили 20,865 раз(а) в 5,387 сообщениях
Вес репутации: 5413
|
Цитата:
Сообщение от zulu
Оффтоп.
...
|
Чтобы не оффтопить - перенес ближе по теме: http://promebelclub.ru/forum/showthread.php?t=1749
|
|
|
|
|
|
Нижняя навигация
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 04:50. Часовой пояс GMT +3.
|