All Forums
 Категория Visio
 Форум Вопросы и ответы
 3d рейсшина
Author Previous Topic Topic Next Topic  

zhuravsky

Russia
115 Posts

Posted - 07/29/2008 :  12:49:42
Предлагается шейп, реализующий 3d-рейсшину (если кто-то еще помнит что это такое). Может быть полезна при рисовании в Визио трехмерных объектов (файл будет выложен модератором).
Шейп имеет 3 оси (изометрия) и контрол для перемещения их по листу. Кроме того, имеются 3 свойства для реализации точного сдвига осей относительно предыдущей точки.
Мне еще хотелось реализовать отображение текущих "3-х мерных" координат рядом с контролом, но никак не могу сообразить, как правильно их рассчитать, т.е. сейчас координаты отображаются, но они неверные. Собственно, по этому вопросу прошу помощи.
Некоторые пояснения по внутренней структуре шейпа. В секции USER есть следующие переменные для решения задачи:
LoсkedAxis - показывает какая из осей "заблокирована", т.е. какая из координат (X, Y или Z) не должна меняться при движении осей;
CX, CY, CZ - текущие 3-х мерные координаты (именно они и отображаются в желтом прямоугольнике)
FuncYZ, FuncXZ, FuncXY - функции, изменяющие 3-х мерные координаты при движении контрола
Остальные переменные к задаче вроде бы не относятся.
Заранее спасибо за помощь.
http://visio.artberg.ru/store/T-Square_3d.zip

Geosher

Russia
10 Posts

Posted - 07/31/2008 :  08:01:41
Если проблема только в том, что должны отображатся страничные координаты, то решение следующее (для двух осей):
1. создаем новую строку User.XY и вписываем в нее формулу =PAR(PNT(Controls.Row_1,Controls.Row_1.Y));
2. Вписываем в ячейки CX, CY формулы =PNTX(User.XY) и =PNTY(User.XY).

Получаем отображение в страничных коородинатах.
Это то, что нужно?
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 07/31/2008 :  10:47:47
Нет. Хотелось бы отображать именно "3-х мерные" координаты, т.е. персчитывать двумерные координаты контрола в трехмерное пространство.
Go to Top of Page

Geosher

Russia
10 Posts

Posted - 08/01/2008 :  06:06:34
Задача понятна. Я еще не совсем разобрался в логике вашей рейшины, поэтому просто несколько мыслей по этому поводу.
1. Может стоит перенести точку начала трехмерных координат ближе к центру листа и визиализировать ее каким либо образом?
2. Чтобы поставить точку с использованием трехмерных координат или же, скажем иначе, построить вектор от начальной точки к конечной необходимо построить три вектора в плоскостях осей, а затем сложить их. Т.е. Процесс получения этого вектора сводится к построению(мысленном или визуальном) параллелограмма с нужными длинами граней и проведении главной диагонали, которая и будет линией соединения начальной и конечной точек. Таких вычмслений в шейпе рейсшины я не увидел (или не туда смотрю). В связи с этим мне думается, что основой рейсшины должен быть вами же созданный куб, только модифицированный.
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 08/01/2008 :  10:55:42
по п.1 Точка начала координат для меня не важна, просто вначале показалось, что если она будет (0,0), то формулы несколько упростяться

п.2 Я не возражаю против тотальной переделки внутреннойстей шейпа.
Изначально идея была следующая:
В ячейке User.AxisLocked сохраняется номер оси, координата которой условно не меняется при движении контрола. Далее, есть набор из трех ячеек User.FuncYZ, User.FuncXZ, User.FuncXY, в задачу которых входит отслеживание движения контрола и вычисление новых 3-х мерных координат с учетом залоченной оси. Вычисленные координаты сохраняются в другом наборе из трех ячеек: User.CX, User.CY, User.CZ.
Это то, что относится к поставленной задаче.
Дополнительно рализована возможность задать в свойствах (Prop) смещение, относительно текущего положения контрола и тогда рейсшина "прыгнет в новую точку". За эту функцию овечают ячейки User.DX, User.DZ, User.DZ.
Вот собственно и всё.
P.S.
Я снова уезжаю в командировку, поэтому прошу прощения за возможные перерывы в связи.
Go to Top of Page

GDK

Russia
90 Posts

Posted - 08/18/2008 :  11:57:51
По моему "простейшие" тригонометрические вычисления помогут расчитать координаты "жёлтой точки" рейсшины. Советую взять справочник (или учебник) по геометрии и математике если собираешься довести дело до конца.
Для построения "трёхмерных" фигур, по шорошему, нужно ещё менять точку обзора, а значит формулы усложняются. Не будем добавлять возможность изменения точки обзора? Т.е. угол между осями рейсшины не нужно менять?
Не понятно каким образом будет расчитываться скачёк при вводе цыфр в св-ва. Получается круговая формула?
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 08/18/2008 :  13:02:27
Скачек вроде уже и так работает.
С углом обзора будет очень сложно, я расчитывал на простую изометрию, а с углом обзора - проще взять Автокад.
Go to Top of Page

GDK

Russia
90 Posts

Posted - 08/20/2008 :  10:06:41
У меня скачёк не получается. Ввожу в дополнительном свойстве, например 12, всё остаётся как есть, а в том поле, куда вводил число, появляется 0.
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 08/20/2008 :  19:41:56
Я посмотрю, но сейчас совсем нет времени.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)