|
|
|
|
|
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..
|
Просмотров: 436246
|
23.04.2019, 13:16
|
#391
|
VIP
Регистрация: 04.07.2012
Сообщений: 1,956
Сказал(а) спасибо: 3,991
Поблагодарили 3,545 раз(а) в 1,167 сообщениях
Вес репутации: 1048
|
Не подскажите, какую информацию можно вытащить скриптом из объекта импортированного в Базис из Автокада? Задача максимум: получить площадь поверхности.
__________________
Автоматизация автоматизаций на АСУ, ТП и тд и тп..
Комплексное решение
|
|
|
24.04.2019, 17:17
|
#392
|
Пользователь
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
|
Цитата:
Сообщение от bbb i ko
вытащить скриптом из объекта импортированного в Базис из Автокада?
|
пример приложите исходника. "из Автокада" может быть и 3D и 2D геометрия.
|
|
|
Пользователь сказал cпасибо:
|
|
24.04.2019, 18:42
|
#393
|
VIP
Регистрация: 04.07.2012
Сообщений: 1,956
Сказал(а) спасибо: 3,991
Поблагодарили 3,545 раз(а) в 1,167 сообщениях
Вес репутации: 1048
|
Цитата:
Сообщение от IStiv
пример приложите исходника.
|
ловите - https://yadi.sk/d/T3gmiQpjvsKhiA
__________________
Автоматизация автоматизаций на АСУ, ТП и тд и тп..
Комплексное решение
|
|
|
25.04.2019, 11:33
|
#394
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,032 раз(а) в 366 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от bbb i ko
Не подскажите, какую информацию можно вытащить скриптом из объекта импортированного в Базис из Автокада? Задача максимум: получить площадь поверхности.
|
Цитата:
Сообщение от bbb i ko
|
По этим объектам можно получить базовую для тела информацию - набор треугольников. С площадью поверхности для приложенного файла тяжело -можно было бы просуммировать площади всех треугольников, но тогда включатся и площади тех треугольников, которые находятся на соединении двух объектов. Если бы объект был монолитным, было бы проще....Я могу попробовать покурить этот вопрос (определение стыкующихся треугольников для вычета их площадей из площади поверхности), но не знаю, когда это удастся сделать.
|
|
|
Пользователь сказал cпасибо:
|
|
25.04.2019, 14:11
|
#395
|
VIP
Регистрация: 04.07.2012
Сообщений: 1,956
Сказал(а) спасибо: 3,991
Поблагодарили 3,545 раз(а) в 1,167 сообщениях
Вес репутации: 1048
|
Цитата:
Сообщение от Letos
По этим объектам можно получить базовую для тела информацию - набор треугольников. С площадью поверхности для приложенного файла тяжело -можно было бы просуммировать площади всех треугольников, но тогда включатся и площади тех треугольников, которые находятся на соединении двух объектов.
|
это уже очень обнадеживает
Цитата:
Сообщение от Letos
Я могу попробовать покурить этот вопрос (определение стыкующихся треугольников для вычета их площадей из площади поверхности), но не знаю, когда это удастся сделать.
|
как-то совестно напрягать вас, я бы покурил, но нужна общая информация по тому как получить сами треугольники и их параметры (координаты вершин)
__________________
Автоматизация автоматизаций на АСУ, ТП и тд и тп..
Комплексное решение
|
|
|
25.04.2019, 17:26
|
#396
|
Пользователь
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
|
Цитата:
Сообщение от bbb i ko
из объекта импортированного в Базис из Автокада? Задача максимум: получить площадь поверхности.
|
хм. а в чем идея использовать именно Базис для этой задачи?
если есть исходник из автокада, можно подобрать какую нибудь CAD в т.ч. возможно бесплатную, чтобы решать эту задачу. Если нет какой то особенности, что нужно именно Базис использовать.
Писать кучу кода, когда это в любом серъезном CAD с коробки есть, как не очень смотриться на первый взгляд.
|
|
|
25.04.2019, 17:51
|
#397
|
VIP
Регистрация: 04.07.2012
Сообщений: 1,956
Сказал(а) спасибо: 3,991
Поблагодарили 3,545 раз(а) в 1,167 сообщениях
Вес репутации: 1048
|
Цитата:
Сообщение от IStiv
хм. а в чем идея использовать именно Базис для этой задачи?
|
работать в одной среде, как это не странно звучит. Весь проект делается в Базисе, после его готовности, информация о нем выгружается из одного единственного места - из модели.
__________________
Автоматизация автоматизаций на АСУ, ТП и тд и тп..
Комплексное решение
|
|
|
26.04.2019, 16:40
|
#398
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,032 раз(а) в 366 сообщениях
Вес репутации: 345
|
Цитата:
Сообщение от bbb i ko
но нужна общая информация по тому как получить сами треугольники и их параметры (координаты вершин)
|
Попытался сделать пример подсчёта площади поверхности для выделенного объекта, но сразу оговорюсь - кроме того, что считаются все треугольники (будут проблемы со стыками объектов, если считать суммарную площадь нескольких объектов), ещё, из-за операций с вещественными числами (в основном, деление и корень), будет возникать погрешность (скорее всего неприемлемая). Например: есть шар с радиусом 100. Его площадь поверхности: 4*Pi*R^2 = 125663.706. Скрипт же у меня выдаёт 110134.391.
Код для получения площади
PHP код:
// длина вектора
function VectorLength(v) {
return Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z)
}
/**
* Вычитание векторов
* @param {Vector} v1
* @param {Vector} v2
* @returns {Vector}
*/
function VectorSub(v1, v2) {
return {
x: v1.x - v2.x,
y: v1.y - v2.y,
z: v1.z - v2.z
}
}
/**
* Сложение векторов
* @param {Vector} v1
* @param {Vector} v2
* @returns {Vector}
*/
function VectorAdd(v1, v2) {
return {
x: v1.x + v2.x,
y: v1.y + v2.y,
z: v1.z + v2.z
}
}
// скалярное произведение векторов
function VectorDot(v1, v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
}
/**
* Проекция точки на линию
* @param {Vector} p Исходная точка
* @param {Vector} ls точка на линии
* @param {Vector} ld направление линии
* @returns {Vector}
*/
function PointLineProj(p, ls, ld) {
var v = VectorSub(p, ls)
var c1 = VectorDot(v, ld);
var c2 = VectorDot(ld, ld);
var c = c1 / c2;
return {
x: ls.x + ld.x * c,
y: ls.y + ld.y * c,
z: ls.z + ld.z * c
}
}
/**
* Расстояние от точки до линии
* @param {Vector} p Исходная точка
* @param {Vector} ls точка на линии
* @param {Vector} ld направление линии
*/
function PointLineDistance(p, ls, ld) {
var proj = PointLineProj(p, ls, ld);
var dv = VectorSub(proj, p);
return VectorLength(dv)
}
// Площадь треугольника - Основание * Высота / 2 (a*h/2)
// Точки p1, p2, p3 - вершины треугольника
// Если p1p2 - основание, тогда высота - расстояние от точки p3 до линии, на
// которой лежит основание.
//
// p3
// /|\
// / | \
// / | \
// / |h \
// /____|____\
// p1 a p2
//
function Square(tri) {
var p1 = tri.Vertex1, p2 = tri.Vertex2, p3 = tri.Vertex3;
var ld = VectorSub(p1, p2)
var a = VectorLength(ld);
var h = PointLineDistance(p3, p1, ld);
return a * h / 2;
}
var obj = Model.Selected;
var s = 0;
if (obj.TriListsCount > 0) {
for (var t = 0; t < obj.TriListsCount; t++) {
var list = obj.TriLists[t];
for (var i = 0; i < list.Count; i++) {
var tri = list[i];
if (tri) {
s += Square(tri);
}
}
}
}
alert('s = ' + s + 'mm');
[свернуть]
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
28.04.2019, 20:09
|
#399
|
Пользователь
Регистрация: 02.12.2016
Сообщений: 84
Сказал(а) спасибо: 21
Поблагодарили 55 раз(а) в 27 сообщениях
Вес репутации: 109
|
Цитата:
Сообщение от Letos
из-за операций с вещественными числами (в основном, деление и корень), будет возникать погрешность
|
интресно , попробовал подумать об этой задаче не "в лоб" , прикольно бы было делать какой нибудь HTTP запрос из Базиса, а он бы возвращал площадь или библиотеку из NODE репозитория.
по первому варианту , нашел API правда оно платное, но площади пишут что считать умеют, правда из STL.
https://github.com/pushkarparanjpe/m...3D-API-clients
а вот еще, Базис ведь использует C3D ядро, наверное у него есть уже готовые методы для расчета площадей, просто он в JS API не "торчат".
@Letos как думаете варианты выше юзабельны?
|
|
|
29.04.2019, 11:07
|
#400
|
Новичок
Регистрация: 29.04.2019
Сообщений: 26
Сказал(а) спасибо: 11
Поблагодарили 16 раз(а) в 2 сообщениях
Вес репутации: 0
|
Обработчик события нажатия клавиши.
Всем привет. В описании встретил обработчики на перемещение мыши и на клик. Есть ли обработчик на нажатие клавиш на клавиатуре?
Хочу скриптом задать "контейнер" и менять его положение в пространстве путем перемещения курсора (как это сделать - уже нашел), но хочу добавить переключение "точки привязки" путем нажатия клавиш Tab и Space. Хочу имитировать установку такой рамки, как и простой панели в Базисе ручками. Спасибо.
|
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 09:51. Часовой пояс GMT +3.
|