Лучший отвечающий
Черчение на C# & Windows Forms

Вопрос
-
Попросили меня тут помочь с программой которая будет заниматься черчением. Примерно представляю как сделать но хотел бы узнать совета как что лучше сделать. Что интересует:
1) Приложение планирую создавать как MDI. То есть в рабочей области родительской формы можно будет создавать разные "проекты".
2) Как лучше организовать отрисовку в проектах (дочерних формах)? Чертежей на одной "странице" должно быть несколько. Думаю сделать на форме 1 панель и устанавливать её высоту достаточной, чтобы поместить все чертежи. На форме соответственно должна будет появиться полоса прокрутки (наверное автоматически - здесь у меня возникли проблемы с размером самой панели, Dock.Fill н еподходит а если делать через Anchor то у панели появляется отступ от полосы прокрутки справа). Особенно интересует именно способ создания больших чертежей - не отрисовывать всё в видимой части а дать возможно прокрутить.
3) Как лучше организовать само рисование? По идее если всё делать в OnPaint то надо будет каждый раз всё перерисовывать причём с учётом положения полосы прокрутки. Удобен-ли будет вариант с созданием картинки? То есть делаем картинку нужных размеров, размеры панели делаем аналогичными размерам картинки, рисуем все чертежи в картинку, а потом устанавливаем картинку как BackgroundImage панели. В этом случае достаточно будет нарисовать чертёж 1 раз, а потом просто прокручивать панель с картинкой.
4) Необходимо будет реализовать печать чертежей. Тоже подумываю сделать картинку на панель, а потом просто печатать саму панель. Правда здесь возможно придётся делить части чертежа и печатать их отдельно.
5) Саму печать как лучше организовать? Планирую из родительской формы просто вызывать метод печати текущей дочерней форму. Что-то типа ActiveMDIChild.PrintPlot().
9 октября 2011 г. 10:25
Ответы
-
3) Рисуйте все в OnPaint, про картинки забудте.
4) Если вы хотите получить набор квадратиков на бумаге - можете делать как задумали. Если хотите нормальную печать - делайте отрисовку на принтере, аналогичную OnPaint, только предварительно промасштабировав Graphics до нужных размеров.
И еще вот здесь можете посмотреть.
- Помечено в качестве ответа IRQ-A 13 октября 2011 г. 8:32
- Снята пометка об ответе IRQ-A 13 октября 2011 г. 8:32
- Помечено в качестве ответа Abolmasov Dmitry 19 октября 2011 г. 10:01
10 октября 2011 г. 5:26Отвечающий -
2)
- Размещаете на форме одну панель Panel.
- Устанавливаете свойства для панели - Margin = 0;0;0;0 и Location = 0;0.
- Растягиваете панель до нужных размеров, больших размера формы.
- В свойствах формы устанавливаете свойство - AutoScroll = True.
Тем самым у вас получится размер полотна больше размера формы и автоматически будут появляться полосы прокрутки, когда они нужны.
Для связи [mail]- Помечено в качестве ответа Abolmasov Dmitry 19 октября 2011 г. 10:01
10 октября 2011 г. 6:45 -
Буду иметь ввиду :) Отпишусь если вдруг что надумаю. Ещё здесь нашёл неплохой проект по графикам:
http://www.codeproject.com/KB/miscctrl/GraphPlotting.aspx
Но пока особо не разбирался. Кода много :) И в лицензиях не разбираюсь. Хотя штука полезная. Автомасштаб есть, прокрутка.
- Изменено IRQ-A 16 октября 2011 г. 21:56
- Помечено в качестве ответа Abolmasov Dmitry 19 октября 2011 г. 10:01
16 октября 2011 г. 21:55
Все ответы
-
9 октября 2011 г. 11:52
-
3) Рисуйте все в OnPaint, про картинки забудте.
4) Если вы хотите получить набор квадратиков на бумаге - можете делать как задумали. Если хотите нормальную печать - делайте отрисовку на принтере, аналогичную OnPaint, только предварительно промасштабировав Graphics до нужных размеров.
И еще вот здесь можете посмотреть.
- Помечено в качестве ответа IRQ-A 13 октября 2011 г. 8:32
- Снята пометка об ответе IRQ-A 13 октября 2011 г. 8:32
- Помечено в качестве ответа Abolmasov Dmitry 19 октября 2011 г. 10:01
10 октября 2011 г. 5:26Отвечающий -
2)
- Размещаете на форме одну панель Panel.
- Устанавливаете свойства для панели - Margin = 0;0;0;0 и Location = 0;0.
- Растягиваете панель до нужных размеров, больших размера формы.
- В свойствах формы устанавливаете свойство - AutoScroll = True.
Тем самым у вас получится размер полотна больше размера формы и автоматически будут появляться полосы прокрутки, когда они нужны.
Для связи [mail]- Помечено в качестве ответа Abolmasov Dmitry 19 октября 2011 г. 10:01
10 октября 2011 г. 6:45 -
Сделал прорисовку через событие Paint. Так конечно удобнее. Точнее даже создал 1 метод, который просто рисует что надо в объекте Graphics, который передаётся через параметр. Что не делал - скролл. Сделал, чтобы чертёж рисовался просто в ClientRectangle панельки.
Появилась правда проблема с печатью - прорисовка выполняется не так, как на экране. С этим надо разбираться.
И вопросик по поводу создания картинок появился. В программе реализован экспорт в картинку. Фактически я просто рисую в Graphics созданного мною Bitmap-а, который потом сохраняю. Вопрос собственно в фоне картинки. Если просто рисовать в Graphics картинки только то, что нужно, то при сохранении всё, что не было прорисовано, становится прозрачным. Сейчас решение - тупо заливка всей области прорисовки (и для панели, которая используется для отрисовки на экране, и при печати, и для картинки) белым цветом. Есть-ли другие варианты? Я так понимаю вариантов других нет. А чтобы лишний раз не заливать панель и область печати надо просто добавить условие и заливать белым цветом только в случае отрисовки картинки.
13 октября 2011 г. 8:27 -
Если программа очень важная стоит поискать книги для таких програм. Например
Ivor Horton beginning visual C++ там он не много обеснает как делать программу для рисование, но1-не много
2-не C#
3-не WinForm
4-это для новичков
Стоит искать хорошую книгу, если хотите написать хорошую програму.- Изменено SANOyan 13 октября 2011 г. 16:17
13 октября 2011 г. 16:16 -
Делаю похожую по профилю программу (ландшафт-геодезия-измерение-черчение) для себя.
1) В MDI форме все общие инструменты (рисования, открыть-сохранить-печать-сканировать и пр...), в дочерних формах (каждая - отдельный "лист" проекта)-только то, что нужно для конкретного листа (масштаб чертежа, масштаб вида, линейки, формат листа и т.п.).
2), 3) Использую комбинированный метод (и векторная отрисовка через OnPaint, и растровая...
4), 5) Пока еще не реализовал
Кода довольно-таки много, если есть интерес - напиши, поделюсь.
Alexandr_Smirnoff14 октября 2011 г. 21:41 -
Буду иметь ввиду :) Отпишусь если вдруг что надумаю. Ещё здесь нашёл неплохой проект по графикам:
http://www.codeproject.com/KB/miscctrl/GraphPlotting.aspx
Но пока особо не разбирался. Кода много :) И в лицензиях не разбираюсь. Хотя штука полезная. Автомасштаб есть, прокрутка.
- Изменено IRQ-A 16 октября 2011 г. 21:56
- Помечено в качестве ответа Abolmasov Dmitry 19 октября 2011 г. 10:01
16 октября 2011 г. 21:55