Author |
Topic |
|
mers
Russia
159 Posts |
Posted - 09/14/2005 : 16:35:45
|
Здравствуйте. Подскажите пожалуйста. Могу ли я с помощью RectangleTool нарисовать невидимы прямоугольник. Т.е не сделать его нивидимым уже после того как он уже нарисован, а именно сразу нарисовать нивидимым с помощью этого инструмента.
С уважением, Владимир. |
|
Digitall
Russia
389 Posts |
Posted - 09/14/2005 : 16:42:56
|
quote: Originally posted by mers
Здравствуйте. Подскажите пожалуйста. Могу ли я с помощью RectangleTool нарисовать невидимы прямоугольник. Т.е не сделать его нивидимым уже после того как он уже нарисован, а именно сразу нарисовать нивидимым с помощью этого инструмента.
С уважением, Владимир.
Да. Причем совершенно просто. Выбираете этот инструмент, ставите линии на None, заливку на None тоже и рисуете себе на здоровье.
Т.е. берете невидимые линии с невидимой заливкой и получаете невидимый прямоугольник. |
|
|
mers
Russia
159 Posts |
Posted - 09/14/2005 : 17:17:35
|
может дурацкий вопрос, но как сделать линии и заливку none программно? в шейп шите page такого нет, сам прямоугольник еще не нарисован... |
|
|
Tumanov
Russia
1198 Posts |
Posted - 09/14/2005 : 19:58:10
|
Вообще-то, по умолчанию должен использоваться стиль normal. Если его переопределить, то будет рисоваться невидимым. Можно не переопределять Normal, а выбрать какой-нибудь другой стиль, например Text Only. Но я не понимаю, как Вы собираетесь программно рисовать с помощью RectangleTool. |
|
|
mers
Russia
159 Posts |
Posted - 09/15/2005 : 14:26:51
|
задача на самом деле более общая..
Нужно сделать элемент управления - изменение масштаба. Стандартный Pan&Zoom не подходит. Поэтому есть идея создать инструмент увеличения, который работает следующим образом (по крайней мере так хотелось бы): Переходим в режим рисования прямоугольников. Делее Рисуется нивидимый прямоугольник - область которую нужно увеличить. Получаем координаты точек в его углах. Прямоугольник удаляется. Функцией SetViewRect устанавливаем видимую область схемы равную этому прямоугольнику.
так вот.. собственно что не получается.. сделать так что бы сразу рисовался невидимый прямоугольник... т.е есть небольшой промежуток времени когда созданный прямоугольник видим.. мелочь, а неприятно.
quote: Вообще-то, по умолчанию должен использоваться стиль normal. Если его переопределить, то будет рисоваться невидимым.
Так вот собственно вопрос в том, как программно переопределить стиль несозданного шейпа?.. в визио это делается через Format -> LineStyle; Format -> FillStyle; после этого любой шейп нарисованный с помощью инструменов панели Drawing рисуется нивидимым...
Если можно кусок кода на чем угодно..
С уважением, Владимир.
|
|
|
immortal
Russia
391 Posts |
Posted - 09/15/2005 : 14:48:41
|
а может копать в другом направлении? сделать обработчик нажатия мыши, при моузедовн вычислять первую координату, по моузеап вторую, и никаких прямоугольников не надо, ... хм. к чему всё это... не совсем понятна задача, необходимо менять масштаб страницы (листа) или размеры отдельных элементов чертежа? насколько мне известно нельзя использовать несколько массштабов на одном листе стандартными средствами (например как в компасе), была идея это реализовать, но необходимости большой нет.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
mers
Russia
159 Posts |
Posted - 09/15/2005 : 14:49:44
|
Вот мой кусок кода..
Это обработка события нажатия на клавишу "Войти в режим увеличения масштаба"
// Включаем режим рисования примоугольников.
...
...
...
// Собственно это и есть те строки которые вызывают вопросы...
Visio.Shape zoomRectangle = null;
zoomRectangle.LineStyle = "None";
zoomRectangle.FillStyle = "None";
это обработка события - добавление шейпа на drawingControl естественно есть некоторые проверки чтобы убедиться что это именно режим изменения масштаба.
Visio.Shape zoomRectangle = null;
zoomRectangle = axDrawingControl.Window.Selection[1];
// Получение информации о размерах и положнении прямоугольника
double left,right,top,bottom;
zoomRectangle.BoundingBox((short)Visio.VisBoundingBoxArgs.visBBoxUprightWH, out left, out bottom, out right, out top);
// Удаляем прямоугольник
zoomRectangle.Delete();
// Устанавливаем новые границы экрана
axDrawingControl.Window.SetViewRect(left, top, right-left,top-bottom); |
|
|
mers
Russia
159 Posts |
Posted - 09/15/2005 : 14:55:51
|
quote: а может копать в другом направлении? сделать обработчик нажатия мыши, при моузедовн вычислять первую координату, по моузеап вторую, и никаких прямоугольников не надо, ... хм. к чему всё это... не совсем понятна задача, необходимо менять масштаб страницы (листа) или размеры отдельных элементов чертежа? насколько мне известно нельзя использовать несколько массштабов на одном листе стандартными средствами (например как в компасе), была идея это реализовать, но необходимости большой нет.
1. необходимо менять масштаб части чертежа. т.е захотели увеличить изображение в какой то части чертежа... взяли выделили ее в прямоугольник - увеличили. теперь это часть во весь экран. 2. можно конечно и так.. только тогда встает вопрос в каком режиме у нас находиться курсор. PointerTool,ConnectorTool,TextTool или в режимах с панели Drawing. Представте что например по нажатию кнопки "Войти в режим увеличения масштаба" включается стандартный PointerTool и я делаю захват мыши... а что если пользователь просто захочет перетащить какой либо объект схемы на другое место?... он будет двигать объект, я осуществляю захват... и что получиться? он хотел только передвинуть, а получилось что еще и увеличил... при моем способе такой момент учтен. |
Edited by - mers on 09/15/2005 15:47:29 |
|
|
mers
Russia
159 Posts |
Posted - 09/15/2005 : 15:43:02
|
нашел как это сделать...
Visio.Document currentDocument = axDrawingControl.Document;
currentDocument.DefaultFillStyle = "None";
CurrentDocument.DefaultLinestyle = "None"; после этого любая нарисованная фигура будет прозрачной...
собственно, что я хотел узнать, то я узнал...
но дискуссию по поводу того как лучше и грамотнее сделать поставленную задачу можно продолжить. С удовольствием выслушаю ваши мысли по этому поводу. |
Edited by - mers on 09/15/2005 15:46:06 |
|
|
immortal
Russia
391 Posts |
Posted - 09/15/2005 : 15:54:24
|
понял, как в автокаде увеличение по выделенному. делаем кнопочку и по нажатию на эту кнопочку включаем режим увеличениям вне зависимости от режима курсора, жмакаем ещё раз выходим из этого режима, вобще идея интересная, надо будет сделать её
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
|
Topic |
|
|
|