Автор Тема: как программировать графические примитивы В СИ++(точка, линия, окружность) в ОС?  (Прочитано 1313 раз)

Оффлайн genand1947

  • Давно тут
  • **
  • Сообщений: 225
В прошлом году мы во 2 четверти графику на си++ мы изучали в devcpp.
Вот простая программа:
#include <graphics.h>
int main()
{
initwindow(400,300); // открыть окно для графики размером 400 на 300 пикселей
moveto(0,0);         // курсор в точку (0,0)
lineto(50,50);       // отрезок в точку (50,50)
getch();             // ждать нажатия на любую клавишу
closegraph();        // закрыть окно с графикой
return 0;
}
Но мне не удалось запустить devcpp на AltLinux через wine.
Было бы вообще хорошо, если эта программа заработала на Linux в
codeblocks или в geany.
 Можете посоветовать, как программировать графические примитивы в СИ++(точка, линия, окружность) в ОС Linux.
Спасибо.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 908
    • Домашняя страница
    • Email
QPaint в Qt 4 или 5. В сети полно примеров примитивов. Да и qt4-doc-examples-bin уже готовая демонстрация.
Андрей Черепанов (cas@)

Оффлайн rotkart

  • Завсегдатай
  • *
  • Сообщений: 661
    • Email
Можете посоветовать, как программировать графические примитивы в СИ++(точка, линия, окружность) в ОС Linux.

http://canvasdraw.sourceforge.net/
Научить нельзя, научиться можно.

Онлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 222
Можете посоветовать, как программировать графические примитивы в СИ++(точка, линия, окружность) в ОС Linux.
https://github.com/jofalk/Xcbwin
почти тоже самое что и у вас написано.

Оффлайн genand1947

  • Давно тут
  • **
  • Сообщений: 225
Большое спасибо. Помогло. Я долго искал и теперь настроил geany  в AltLinux на программирование простой графики (школьники 8 класс). - разноцветные точки, лини, окружности.
  Вот только ещё не разобрался, как сделать задержку в миллисекундах (нужно для анимации). Какую библиотеку надо подключить и какой оператор использовать.
Приведена ниже программа делает задержку минимум в 1 сек, что не достаточно.
#include <iostream>
#include <xcbwin.h>
#include <unistd.h>
using namespace std;
int main() {
Xcbwin Window;
Window.Open(400,400); //Opens a Window of size 400x400
Window.Black(); //Sets the drawing-color to black
cout<<8888;
Window.SetColor(200,'gray',200);
Window.DrawRectangle(120,20,50,30); //Draws a Rectangle
Window.Wait();
Sleep(1);  //Задержка в 1 сек.
Window.DrawLine(200,50,5,300); //Draws a Rectangle
Window.DrawPoint(12,5); //Draws a Rectangle
Window.DrawCircle(12,12,76,76);
Window.Clear();
Window.Flush();
Window.DrawFilledCircle(32,32,176,176);
Window.DrawText(52,42,"4");
cout<<123;
Window.Waitev(); // Waits for a keypress-event
Window.Screenshot(); //Saves a screenshot of the drawing
Window.Close(); //Closes the Window
}
« Последнее редактирование: 06.12.2016 12:28:45 от genand1947 »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Это какой язык программирования используется?
Если C - см.
man 3 usleep

Оффлайн genand1947

  • Давно тут
  • **
  • Сообщений: 225
Удалось получать паузу так:
usleep(5000000);
данная строка дает задержку в 5 секунд.
   Но возникла другая проблема, связанная с переходом на 8
платформу Altlinux (пробовал alt-education-8.1,  alt-kworkstation-8.2, alt-simply-8.2).
В них надо установить
1) geany
2) codebloocks
3) скопировать файл xcbwin.h   в  /usr/include/xcbwin.h
4) В geany добавить -lxcb в команду сборки здесь: сборка/команда сборки:  g++ -Wall -o "%e" "%f" -lxcb
Что не хватает в Altlinux 8 для работы программы с графическими примитивами? (в Altlinux 7.0.3 - следуящая прогшрамма работает нормально, а Altlinux 8 - не работает)

#include <iostream>
#include <xcbwin.h>
#include <unistd.h>
using namespace std;
int main()
{
  Xcbwin Window;
  Window.Open(400,400);
  Window.SetColor(65535,0,0);
  usleep(5000000);
  Window.DrawRectangle(120,20,50,30);
  Window.Waitev();
}

Онлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 222
а что пишет? Ошибка компилятора или при запуске?

Оффлайн genand1947

  • Давно тут
  • **
  • Сообщений: 225
Пишет:
g++ -Wall -o "z1" "z1.cpp" -lxcb (в каталоге: /home/user)
In file included from z1.cpp:2:0:
/usr/include/xcbwin.h:46:21: fatal error: xcb/xcb.h: Нет такого файла или каталога
compilation terminated.
Сборка завершилась с ошибкой.

Если беру из работающего p7 файл xcb.h  и кладу его на p8, то пишет:
g++ -Wall -o "z1" "z1.cpp" -lxcb (в каталоге: /home/user)
collect2: fatal error: cannot find 'ld'
compilation terminated.
Сборка завершилась с ошибкой.

Онлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 222
ну так посмотрите какому пакету принадлежит rpm -qf /usr/include/xcb/xcb.h

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 099
В этом году, наконец, появилось сразу две утилиты для поиска файлов в неустановленных пакетах: https://bugzilla.altlinux.org/30883, два последних сообщения.
« Последнее редактирование: 17.11.2017 14:39:58 от asy »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
rpm -qf /usr/include/xcb/xcb.h
Моя "угадалка" показывает, что это что-то типа libxcb-devel
;-)