Author |
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).
Получаем отображение в страничных коородинатах. Это то, что нужно? |
|
|
zhuravsky
Russia
115 Posts |
Posted - 07/31/2008 : 10:47:47
|
Нет. Хотелось бы отображать именно "3-х мерные" координаты, т.е. персчитывать двумерные координаты контрола в трехмерное пространство. |
|
|
Geosher
Russia
10 Posts |
Posted - 08/01/2008 : 06:06:34
|
Задача понятна. Я еще не совсем разобрался в логике вашей рейшины, поэтому просто несколько мыслей по этому поводу. 1. Может стоит перенести точку начала трехмерных координат ближе к центру листа и визиализировать ее каким либо образом? 2. Чтобы поставить точку с использованием трехмерных координат или же, скажем иначе, построить вектор от начальной точки к конечной необходимо построить три вектора в плоскостях осей, а затем сложить их. Т.е. Процесс получения этого вектора сводится к построению(мысленном или визуальном) параллелограмма с нужными длинами граней и проведении главной диагонали, которая и будет линией соединения начальной и конечной точек. Таких вычмслений в шейпе рейсшины я не увидел (или не туда смотрю). В связи с этим мне думается, что основой рейсшины должен быть вами же созданный куб, только модифицированный.
|
|
|
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. Я снова уезжаю в командировку, поэтому прошу прощения за возможные перерывы в связи. |
|
|
GDK
Russia
90 Posts |
Posted - 08/18/2008 : 11:57:51
|
По моему "простейшие" тригонометрические вычисления помогут расчитать координаты "жёлтой точки" рейсшины. Советую взять справочник (или учебник) по геометрии и математике если собираешься довести дело до конца. Для построения "трёхмерных" фигур, по шорошему, нужно ещё менять точку обзора, а значит формулы усложняются. Не будем добавлять возможность изменения точки обзора? Т.е. угол между осями рейсшины не нужно менять? Не понятно каким образом будет расчитываться скачёк при вводе цыфр в св-ва. Получается круговая формула?
|
|
|
zhuravsky
Russia
115 Posts |
Posted - 08/18/2008 : 13:02:27
|
Скачек вроде уже и так работает. С углом обзора будет очень сложно, я расчитывал на простую изометрию, а с углом обзора - проще взять Автокад. |
|
|
GDK
Russia
90 Posts |
Posted - 08/20/2008 : 10:06:41
|
У меня скачёк не получается. Ввожу в дополнительном свойстве, например 12, всё остаётся как есть, а в том поле, куда вводил число, появляется 0. |
|
|
zhuravsky
Russia
115 Posts |
Posted - 08/20/2008 : 19:41:56
|
Я посмотрю, но сейчас совсем нет времени. |
|
|
|
Topic |
|
|
|