none
Черчение на C# & Windows Forms RRS feed

  • Вопрос

  • Попросили меня тут помочь с программой которая будет заниматься черчением. Примерно представляю как сделать но хотел бы узнать совета как что лучше сделать. Что интересует:

    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

Все ответы

  • см. Paint.net - графический редактор на .NET; (для просмотра assembly см. ILSpy)

    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_Smirnoff
    14 октября 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