Author |
Topic |
Almark
7 Posts |
Posted - 07/28/2004 : 12:01:19
|
Здравствуйте всем! У меня довольно простая задача (как мне кажется), но чтобы её решить, надо потратить не меньше недели на поиск и изучение всей доступной документации по Visio (на днях купил диск с полурусским Visio-2003, хелп английский, а в английском я не очень...) Так вот, суть задачи - сделать иерархию шейпов типа пирамиды: наверху пирамиды шейп 1-го уровня, в нём создаётся числовое поле, в которое вводится "удельный вес" этого шейпа = 100%. Ниже идут шейпы 2-го уровня, в которых есть аналогичные поля со своим "удельным весом". В шейп 2.x (скажем, 2.1) разрешается ввести значение от 0 до 100% (не больше, чем "удельный вес" верхнего шейпа, например вес 2.1 = 50%). В следующий за ним шейп 2.y (скажем, 2.2 или 2.3) можно ввести "удельный вес" не больше, чем 100%-50% (то есть в сумме вес этих шейпов "входит" в вес верхнего шейпа). "Удельный вес" следующего шейпа того же уровня (2.3 или 2.4, etc.) можно ввести не больше, чем (100% - %всех остальных шейпов того же уровня). То есть вес каждого нового шейпа 2-го уровня как бы "откусывается" от этого "свободного остатка". Далее можно создавать шейпы 3-го уровня иерархии, каждый из которых связан ("подчиняется") какому-либо одному шейпу верхнего уровня. Для них действуют аналогичные правила. Например, шейп 3.1 подчиняется шейпу 2.1, у которого удельный вес = 50%. Поэтому максимальный "удельный вес" для шейпа 3.1 будет 50%. Предположим, мы задали ему вес 20%. Тогда, если мы "прицепим" к шейпу 2.1 ещё один шейп 3-го уровня (напр., 3.2) - то для него можно задать вес не более 50%-20%=30% ("свободный остаток", т.е. разница веса "главенствующего шейпа" и всех остальных подчиненных ему шейпов). Теперь, если мы "задним числом" увеличили вес шейпа 2.1 например с 50% до 60%, то вес подчиненных ему шейпов 3-го уровня также автоматически увеличивается на этот коэффициент. Например, вес шейпа 3.1 станет 20%*6/5 = 24%. В словах описание вышло изрядное, но сама схема по-моему довольно простая, если не сказать примитивная. Не подскажет ли кто, какими формулами это можно прописать в Visio? (Хотя бы какой-нибудь простейший пример для иерархии из 3-х шейпов) |
|
Tumanov
Russia
1198 Posts |
Posted - 07/28/2004 : 15:52:14
|
Все вышеизложенное пока не имеет отношения к Visio, поэтому практически невозможно сказать, "какими формулами это можно прописать". Не хватает графической интерпретации указанных зависимостей и описания "поведения" шейпов.
Например: 1. Представляем все шейпы прямоугольниками равной высоты и переменной ширины (наши проценты). 2. По высоте будут всегда три уровня шейпов (три полосы). 3. Верхняя полоса не делится, всегда равна 10 см, что аналогично 100 % (или она должна изменяться вручную оператором?). 4. Вторая полоса складывается из нескольких прямоугольников. В сумме их ширина всегда составляет 10 см (или нет? или только не превышать 10 см?). 5. Как задумано добавление нового прямоугольника на втором уровне - как деление одного из существующих на две части с указанием размера одной из них или как добавление нового со сжатием имеющихся или предупреждением типа "не умещается". 6. Как смещать остающиеся прямоугольники при удалении одного из них где-нибудь в середине? 7. Третья полоса (нижняя) тоже в сумме равна 10 см (или нет?). Кроме того каждый прямоугольник второй полосы разбивается на один или несколько целых прямоугольников третьей полосы. 8. При изменении оператором (мышью или цифровым вводом клавишами?) ширины прямоугольника второй полосы, все соответствующие ему прямоугольники третьей полосы изменяются пропорционально. ?Как изменяются остальные прямоугольники второй полосы - пропорционально или за счет ближайшего правого или левого.
Ну и так далее. Вот для такого описания уже легче будет сказать, куда и какие формулы записывать и как это реализовать - формулами или макросами.
|
|
|
Almark
7 Posts |
Posted - 07/28/2004 : 19:25:45
|
Всё дело в том, что графически шейпы вообще никак не должны изменяться. Должны изменяться только значения их текстовых полей с формулами (1%, 2%, ... 10%, ... 50%, ... 99%, 100%) - по изложенному выше алгоритму. Visio нужен просто для наглядной связи элементов этой иерархии. Поэтому я и написал, что задача, по-моему, тривиальная (опровергните меня, пожалуйста, если я не прав). |
|
|
Almark
7 Posts |
Posted - 07/28/2004 : 19:31:43
|
P.S. Все эти пространные описания были бы гораздо нагляднее, если бы я приложил к ним рисунок (в стиле того же Visio :) Но в форуме я этого сделать не могу. Если можно - я пришлю Вам на E-mail соответствующую иллюстрацию? (На какой E-mail?) |
|
|
Tumanov
Russia
1198 Posts |
Posted - 07/28/2004 : 20:07:10
|
Присылайте на ttt@post.rzn.ru quote: Всё дело в том, что графически шейпы вообще никак не должны изменяться. Должны изменяться только значения их текстовых полей с формулами
Но, как я понимаю, должны меняться не только значения текстовых полей! Шейпы будут добавляться, удаляться. Добавление и удаление тоже каким-то образом сказывается на значениях. Или я не прав?
|
|
|
immortal
Russia
391 Posts |
Posted - 07/29/2004 : 06:50:18
|
1. Надо взять шейп у которого в "Show ShapeSheet" есть секция "Text Fields" незнаю какой, я брал шейп размера и изменят его, там то в поле "value" и надо писать формулы, в секции Geometry - пишем геометрию нашего объекта - прямоугольник, не забудь линию связи с шейпом высшего уровня, на конце линии дожна быть controls (x линии должна быть формула "=controls.Row_1", т.е ячейка Х в controls, также для Y: "=controls.Row_1.Y"), так же сделать линию связи с своим уровнем (можно невидимую или один controls), в "custom properties" установите поле с параметрами: "label:" - "проценты", "type:" - Number, value - 0%, это будут проценты задаваемые пользователем - имя этого поля будет -"Prop.proc" , далее добавляем в "Show ShapeSheet" секцию "User-defined Cells" там нам надо три строки: проценты у элемента высшего уровня - User.ur1 (значение value = 100%), остаток процентов элемента своего уровня - User.ur2 (значение value = User.ur1), и остаток процентов этого элемента - User.ur3(значение value = user.ur2-Prop.proc), в поле value секции "Text fields" пишем: =Prop.proc, в поле Format: FIELDPICTURE(1) - число и проценты, FIELDPICTURE(2) - только число, первый этап пройден, далее есть два варианта, как их осуществить на деле я пока не знаю,но может кто еще подскажет, вар1. с помощью add-on (в 2003 как запускается незнаю, в ранних версиях запуск описан в форуме или факе) надо сделать чтобы запускался add-on при событиях: Connection, disConnection. и написать программу, чтобы она брала имя шейпа из полей Controls, и если там есть "LOC(PNT(" то в поле user.ur1 ставила ссылку на user.ur3 верхнего шейпа, и соотв. в User.ur2 ставила ссылку на User.ur2 бокового шейпа, в противном случае чтобы расставила формулы написанные выше для этих полей, могу лищь предложить исходник на VB кнопки "проставить спуски" для проводов из Add-in приложения с шейпами проводов, можно взять на immortal.st.vstu.edu.ru в разделе download, исходник по почте, можно пообщаться по аське. вариант 2. без Add-on и Add-in сделать с помощью формул описанное в вар1, проблема в следующем: незнаю как получить не значение формулы (как "=Controls.Row_1"), а текст самой формулы (аналогично в VB/VBA Application.ActiveWindow.Page.Shapes(1).CellsSRC(visSectionControls, 0, visCtlX).FormulaU ) если узнать, то естественно второй способ лучший, я сам бъюсь над этой проблемой.
в поле "value" секция "Text Fields" можно написать "=IF(Prop.proc>user.ur2,user.ur2,Prop.proc)" работает помоему только в 2003, в ранних версиях синтаксис другой, если не ошибаюсь. смысл в следующем если пользователь задал проценты больше чем осталось, то напишет что осталось. |
Edited by - immortal on 07/29/2004 07:53:18 |
|
|
immortal
Russia
391 Posts |
Posted - 07/29/2004 : 07:59:33
|
в принципе можно написать и Add-in или отдельную прогу, и запускать чтобы она ставила связи, аналогично сделано у меня для электрики, проставить спуски проводов. но при каждом изменении связей надо будет её запускать. |
Edited by - immortal on 07/29/2004 08:00:26 |
|
|
immortal
Russia
391 Posts |
Posted - 08/02/2004 : 05:22:56
|
на досуге сделал описанное мной выше, не знаю так или нет, можно взять на моей страничке, раздел download, ссылка "проценты", там vss и exe, можно exe запускать в ручную, а можно по событию dblclick, там уже написано =HYPERLINK("c:\immortal\procent.exe"), если положить в другое место, то надо соотв. изменить, при двойном щелчке, спросит запускать ли, потом выдаст ошибку и ещё одно окно с сообщением, надо жать всё да, и прога запуститься. удачи. ограничения на 7 шейпов. пиши. |
Edited by - immortal on 08/02/2004 05:24:37 |
|
|
Almark
7 Posts |
Posted - 08/03/2004 : 13:21:49
|
У меня файл procent.vss не запускается, пишет, что создан в более ранней версии Visio. На CD у меня написано Visio-2003, а в меню самой программе - версия Microsoft Visio for Enterprise Architects (10.0.2705). Не знаю, на самом деле это 2003 или нет? Можете ли переделать файл к более ранней версии? (Также по регистрации DLL: её перед этим надо класть в Windows\System, или необязательно?) |
|
|
immortal
Russia
391 Posts |
Posted - 08/04/2004 : 08:13:14
|
quote: Также по регистрации DLL: её перед этим надо класть в Windows\System, или необязательно
нет не обязательно, просто зарегистрируйте с помощью bat прочти http://immortal.st.vstu.edu.ru/readme.txt, там написано про регистрацию.
установите 2003 версия, если я не ошибаюсь то версия начинается с 11. а на 10 все равно не будет работать из за новых команд в 2003, vss положите в папку My Shapes (англ.версия), оно не регистрируется
PS: на дворе 2004 год, ставьте визио 2003. Визио 2003 форэвер |
|
|
Almark
7 Posts |
Posted - 08/04/2004 : 11:47:52
|
//установите 2003 версия// А где его взять-то? Я могу купить ещё какой-нибудь диск, где написано Visio-2003, установлю - и опять будет надувалово... |
|
|
immortal
Russia
391 Posts |
Posted - 08/05/2004 : 08:57:35
|
возьми диск визио 2004, если у тебя почта держит 190 могу выслать, а так больше ничего не могу посоветовать, на 2002 не будут работать формулы. |
|
|
immortal
Russia
391 Posts |
Posted - 08/05/2004 : 09:09:11
|
могу выслать почтой (не электронной) |
Edited by - immortal on 08/05/2004 09:09:35 |
|
|
Almark
7 Posts |
Posted - 08/06/2004 : 09:05:48
|
Ладно, не надо почтой. Я посмотрю диск с 2004. (А можно ли скачать апдейт с сайта Майкрософта?) |
|
|
immortal
Russia
391 Posts |
Posted - 08/06/2004 : 09:19:39
|
quote: А можно ли скачать апдейт с сайта Майкрософта
апдейт это сервис пак? да можно, я как раз сейчас его качаю. |
|
|
stsv
Russia
24 Posts |
Posted - 08/06/2004 : 11:15:03
|
Ачто даёт SP1 для Visio 2003, кто-нибудь пробовал
|
|
|
Topic |
|
|
|