M
mrvadimjuravlev
Ну САПР это громко сказано, вообщем рисовалку типа автокада, пригодную к практическому применению для несложный чертежей. Т.е. для небольших организаций, институтских курсовиков.
На сегодняшний день самая массовая чертилка это автокад. Несмотря на то, что в голом виде это совершенно убогая программа из прошлого века, стоит он до 100 тыс. р. или тыс. 50 в версии LT. Другие популярные программы это компас, ти-флекс и т.д. Цены аналогичные, возможности гораздо
больше. Однако большинству конструкторов таких программ и не надо, очень многие используют САПР как чертилку. Впрочем в 3д работать конечно приятнее. Популярность автокада доказывается еще и тем, что в качестве альтернативы к нему существует несколько програм на движке
IntelliCAD, типа bricscad, zwcad и др. Они стоят 10-15 тыс. р. Я же предлагаю сделать полностью бесплатную программу с возможностями достаточными для замены во многих случаях этих автокадов и интелликадов.
Зачем это надо?
Во-первых, просто программирование в удовольствие.
Вo-вторых, может из этого вырастит настоящих фрикад, коих было попыток сделать уже немерено.
Вообще хотелось бы сделать кросс-платформенный кад, для линукса и винды.
Один я все это не потяну. Точнее сказать, мне станет лениво, делать долго, я на это забью, потом снова вернусь, снова забью, пройдет черти-сколько времени и результата не будет. Вообщем хочется еще желающих попрогроммировать. Возьмем нечто среднее между автокадом и компасом, только для 2Д. Поддержки 3Д не планируется, формат файлов пока свой (может импорт сделаем если ну очень сильно захочется). Итак. Обычное MDI приложение. Кнопки на панели инструментов пока не делаем, с интерфейсом без необходимости не извращаемся. Все пункты пока просто из меню.
Поле документа не ограничено, двигается средней кнопкой мышки, масштабируется колесиком. Примитивы описываем универсальной структурой и храним в списке. В структуре поля тип примитива, необходимые точки или радиусы, тип линии, слои пока без надобности, может еще что надо. Типы только линий стандартные гостовские - толстая, будем синим цветом рисовать, тонка, центральная, размерная и т.п. Размерная выделена в отдельный тип чтобы ее потом не учитывать при заливках.
Сначала реализовываем рисование линий, как обычно лищь указать две точки. Следующая точка создает линию с предыдущей. Чем чертилка от рисовалки отличается? Нужно мочь задавать точные
координаты. Поэтому во время отрисовки линии мы должны перехватывать сообщения с цифровых клавиш и интерпретировать их как координаты. Точка с запятой например будет разделять x и y (или запятая, как в настройках сделаем). Пробел или ентер завершение редактирования. Ввод дублируется где-нибудь на статус-баре. Командной строки как в автокаде можно наверно не делать. Компас легко без нее обходится. Автокад вообще понимает ввод x,y как абсолютные координаты, а @x,y как относительные. Вообще относительными чаще пользуются, значит будем по-умолчанию понимать x,y как относительные. Далее реализуем ортогональные перемещения. Далее привязки. Привязки к концевым точкам делают легко, к центральной точке тоже. К ближайшим точкам сложнее, к точкам пересечения тоже сложнее, но тоже легко ) Далее по аналогии реализуем отрисовку окружностей и дуг, там конечно все сложнее чем для линий. В том числе всякие привязки типа касательных и т. п. Дальше простые функции редактирования. Сначала для отдельных объектов. Левой кнопкой мыши происходит выделение примитива, на нем отмечаются узлы, за которые его можно таскать. Для линий 3 узла, для окружности наверно 2(?), для дуг наверно 3. Привязка мыши осуществляется точно к узлу, а не как в компасе где-то рядом куда попал. Другие функции редактирования уже могут работать с несколькими объектами. Их можно выделить удерживая шифт или контрол или обведя прямоугольником. Их можно будет удалить, отразить, масштабировать, повернуть, размножить массивом. Это все несложно. Далее делаем ввод и редактирование текста. Прямо на поле чертежа в любом месте, простейший тектовый редактор, ввод отображается прямо на
экране, т.е. без диалог-боксов. Далее заливка. Самый пока непонятный этап, т.к. я сходу не знаю
алгоритмов поиска замкнутой области определенной примитивами. Но, очевидно, это решаемо. Далее размеры, и куча всяких гостовских обозначений. Там все более разнообразно, но и более интересно. Здесь расписывать не буду уже. Вывод на принтер само-собой.
Короче. Есть желающие поучаствовать?
На сегодняшний день самая массовая чертилка это автокад. Несмотря на то, что в голом виде это совершенно убогая программа из прошлого века, стоит он до 100 тыс. р. или тыс. 50 в версии LT. Другие популярные программы это компас, ти-флекс и т.д. Цены аналогичные, возможности гораздо
больше. Однако большинству конструкторов таких программ и не надо, очень многие используют САПР как чертилку. Впрочем в 3д работать конечно приятнее. Популярность автокада доказывается еще и тем, что в качестве альтернативы к нему существует несколько програм на движке
IntelliCAD, типа bricscad, zwcad и др. Они стоят 10-15 тыс. р. Я же предлагаю сделать полностью бесплатную программу с возможностями достаточными для замены во многих случаях этих автокадов и интелликадов.
Зачем это надо?
Во-первых, просто программирование в удовольствие.
Вo-вторых, может из этого вырастит настоящих фрикад, коих было попыток сделать уже немерено.
Вообще хотелось бы сделать кросс-платформенный кад, для линукса и винды.
Один я все это не потяну. Точнее сказать, мне станет лениво, делать долго, я на это забью, потом снова вернусь, снова забью, пройдет черти-сколько времени и результата не будет. Вообщем хочется еще желающих попрогроммировать. Возьмем нечто среднее между автокадом и компасом, только для 2Д. Поддержки 3Д не планируется, формат файлов пока свой (может импорт сделаем если ну очень сильно захочется). Итак. Обычное MDI приложение. Кнопки на панели инструментов пока не делаем, с интерфейсом без необходимости не извращаемся. Все пункты пока просто из меню.
Поле документа не ограничено, двигается средней кнопкой мышки, масштабируется колесиком. Примитивы описываем универсальной структурой и храним в списке. В структуре поля тип примитива, необходимые точки или радиусы, тип линии, слои пока без надобности, может еще что надо. Типы только линий стандартные гостовские - толстая, будем синим цветом рисовать, тонка, центральная, размерная и т.п. Размерная выделена в отдельный тип чтобы ее потом не учитывать при заливках.
Сначала реализовываем рисование линий, как обычно лищь указать две точки. Следующая точка создает линию с предыдущей. Чем чертилка от рисовалки отличается? Нужно мочь задавать точные
координаты. Поэтому во время отрисовки линии мы должны перехватывать сообщения с цифровых клавиш и интерпретировать их как координаты. Точка с запятой например будет разделять x и y (или запятая, как в настройках сделаем). Пробел или ентер завершение редактирования. Ввод дублируется где-нибудь на статус-баре. Командной строки как в автокаде можно наверно не делать. Компас легко без нее обходится. Автокад вообще понимает ввод x,y как абсолютные координаты, а @x,y как относительные. Вообще относительными чаще пользуются, значит будем по-умолчанию понимать x,y как относительные. Далее реализуем ортогональные перемещения. Далее привязки. Привязки к концевым точкам делают легко, к центральной точке тоже. К ближайшим точкам сложнее, к точкам пересечения тоже сложнее, но тоже легко ) Далее по аналогии реализуем отрисовку окружностей и дуг, там конечно все сложнее чем для линий. В том числе всякие привязки типа касательных и т. п. Дальше простые функции редактирования. Сначала для отдельных объектов. Левой кнопкой мыши происходит выделение примитива, на нем отмечаются узлы, за которые его можно таскать. Для линий 3 узла, для окружности наверно 2(?), для дуг наверно 3. Привязка мыши осуществляется точно к узлу, а не как в компасе где-то рядом куда попал. Другие функции редактирования уже могут работать с несколькими объектами. Их можно выделить удерживая шифт или контрол или обведя прямоугольником. Их можно будет удалить, отразить, масштабировать, повернуть, размножить массивом. Это все несложно. Далее делаем ввод и редактирование текста. Прямо на поле чертежа в любом месте, простейший тектовый редактор, ввод отображается прямо на
экране, т.е. без диалог-боксов. Далее заливка. Самый пока непонятный этап, т.к. я сходу не знаю
алгоритмов поиска замкнутой области определенной примитивами. Но, очевидно, это решаемо. Далее размеры, и куча всяких гостовских обозначений. Там все более разнообразно, но и более интересно. Здесь расписывать не буду уже. Вывод на принтер само-собой.
Короче. Есть желающие поучаствовать?