Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по chart / 22 сообщений из 22, страница 1 из 1
07.10.2013, 12:21
    #38418735
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Всем привет!
Вопрос следующий - хочу построить обычный график (линия соединяет точки).Пользуюсь стандартным chart из VS2010. Как в нём скормить плоттеру не точки, а сразу массив?
Погуглив нашёл только варианты с циклом преобразования массива в точки.Как-то не совсем красиво это...
...
Рейтинг: 0 / 0
07.10.2013, 15:35
    #38419041
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
double test_array_x [] = {0, 1, 2, 3...};
double test_array_y [] = {22, 33, 44, 55...};
int i; 
int arraylength = sizeof (test_array_x) / sizeof (double);

...

for (i = 0; i < arraylength; i++)
{
series1-> Points-> AddXY (test_array_x[i], test_array_y[i]);


Вот так работает. Неужели нельзя проще?
...
Рейтинг: 0 / 0
11.10.2013, 12:13
    #38424231
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Ладно, раз никто не знает, тогда вопрос номер 2 ;)
Как мне, имея chart в заголовочном файле, его модифицировать из main.cpp?
Глядя вот сюда:
http://stackoverflow.com/questions/11604677/changing-form-label-text-outside-of-form-h?rq=1

Делаю так:
#include Form1.h
System::Void Form1::chart1-> series1-> points-> addxy (test_array_x [i], test_array_y [i]);

Получаю member function redeclaration not allowed
...
Рейтинг: 0 / 0
14.10.2013, 18:38
    #38427115
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Вдоволь нагуглившись, понял, что задача сводится к изменению свойства класса извне. К сожалению, сам не могу справиться (видимо что-то упускаю).
Если не трудно, приведите пример кода в контексте chart.
Заранее большое спасибо!
...
Рейтинг: 0 / 0
18.10.2013, 09:57
    #38432345
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
500 RUB на мобильный тому, кто покажет как это делать для моего случая.
...и ещё 500 тому, кто скажет как поверх этого правильно сделать обновлениие графика раз в n миллисекунд (встроенный в forms таймер или лучше свой?).
PS данные обновляются нерегулярно, в обоих случаях нужен работающий код.
...
Рейтинг: 0 / 0
18.10.2013, 11:31
    #38432501
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
rotvA, ты не врубаешься, что твои вопросы просто тупо никто не понимает?
Такую ахинею понаписал...
...
Рейтинг: 0 / 0
18.10.2013, 11:52
    #38432548
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
MasterZivrotvA, ты не врубаешься, что твои вопросы просто тупо никто не понимает?
Такую ахинею понаписал...
Ок, пробую ещё раз.
Есть: array1 со значениями абсцисс, array2 со значениями ординат. Они изменяются, нерегулярно.
Задача: построить по ним график с обновлением раз в n миллисекунд. На графике должны быть только текущие значения, история не нужна.
Что я делаю: добавив в проект график из windows forms (Form1.h), я пытаюсь его обновить из main.cpp и у меня это не получается. Из Form1.h всё ок.
...
Рейтинг: 0 / 0
18.10.2013, 12:59
    #38432715
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
rotvA,

Чё за виндовс формс такой ?
Ссылку на сайт библиотеки дай что ли, или описание.
...
Рейтинг: 0 / 0
18.10.2013, 13:03
    #38432729
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
wikipediaWindows Forms — название интерфейса программирования приложений (API), отвечающего за графический интерфейс пользователя и являющегося частью Microsoft .NET Framework. Данный интерфейс упрощает доступ к элементам интерфейса Microsoft Windows за счет создания обертки для существующего Win32 API в управляемом коде. Причем управляемый код — классы, реализующие API для Windows Forms, не зависят от языка разработки. То есть программист одинаково может использовать Windows Forms как при написании ПО на C#, С++, так и на VB.Net, J# и др.


Это managed code, .net, C#.
К С++ это имеет очень мало отношения.
Т.е. ты просто ошибся форумом,
вопрошай в форуме по C# .net

Могу перенести топик туда.
...
Рейтинг: 0 / 0
18.10.2013, 14:58
    #38432949
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
MasterZiv,перенесите, если не сложно.

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
18.10.2013, 20:19
    #38433460
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Подскажите плз. Сегодня читал доки, но это меня ещё больше запутало.
...
Рейтинг: 0 / 0
18.10.2013, 20:53
    #38433486
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
rotvA,
вы плаваете между cpp и cs, вы определитесь или там остаться или или полностью на шарп перейти
...
Рейтинг: 0 / 0
19.10.2013, 00:43
    #38433672
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Где-то в степи,
а что мне мешает писать на С++ и пользоваться .NET формами?
...
Рейтинг: 0 / 0
19.10.2013, 01:58
    #38433731
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
rotvA,
да никто не мешает, выбор за вами, но с 2006 вы наверно первый кто озвучил проблему в этом ключе,
по теме, лучше создать свой системный таймер, и в его потоке ожидания делегатом делать ( очищение графика, а потом прорисовку точек) если это массив точек - то проходом по массиву.. ну и не забывать про конфликт контрола в не креатном потоке
...
Рейтинг: 0 / 0
19.10.2013, 02:43
    #38433743
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
зачем вам модифицировать main.cpp это точка входа, ее среда сама генерит, или надо писать в ручную? не имею этот тип роектов
в заголовочных файлах Form1 объявляйте перемененные и функции, а в Form1.срр делайте реализацию
не знаю что это (System::Void Form1::chart1-> series1-> points-> addxy (test_array_x [i], test_array_y [i]);), но это скорее всего надо писать в обработчике таймера в cpp, ну и namespace не вижу, выложите проект куданить - посмотреть что это за зверь
...
Рейтинг: 0 / 0
21.10.2013, 11:18
    #38435188
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Где-то в степи,
проект больше 1000 строк, учитывая что я совсем новичок, там чёрт ногу сломит. Выкладываю прототип отрисовки (Form1.h почти полностью сгенерирован дизайнером). Данные у меня обновляются в main.cpp (подкачка, обработка). В идеале хочется, чтобы через таймер обновлялось (таймер рабочий), но сойдёт и просто из main.cpp.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
// main.cpp : main project file.

#include "stdafx.h"
#include "Form1.h"

using namespace main;

	double test_array_x [] =  {0,1,2,3,4,5,6,7,8};
	double test_array_y [] =  {22.1,33.4,21.2,45.5,63.7,18.2,36.5,15.9,31.3};
	int pts;
	int arrlength = sizeof(test_array_x) / sizeof(double);

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
	// Enabling Windows XP visual effects before any controls are created
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false); 

	// Create the main window and run it
	Application::Run(gcnew Form1());
	
	//Вот здесь пытаюсь отрисовать точки:
	//for (pts = 0; pts < arrlength; pts++)
	//{
	//Form1::Chart1->series1->Points->AddXY(test_array_x[pts], test_array_y[pts]);
	//}
}



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
//Form1.h
#pragma once
#include <windows.h> //for beep

namespace main {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Summary for Form1
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::DataVisualization::Charting::Chart^  chart1;
	protected: 
	private: System::Windows::Forms::Timer^  timer1;

	private: 







	private: System::ComponentModel::IContainer^  components;


	protected: 

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>


#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->components = (gcnew System::ComponentModel::Container());
			System::Windows::Forms::DataVisualization::Charting::LineAnnotation^  lineAnnotation1 = (gcnew System::Windows::Forms::DataVisualization::Charting::LineAnnotation());
			System::Windows::Forms::DataVisualization::Charting::ChartArea^  chartArea1 = (gcnew System::Windows::Forms::DataVisualization::Charting::ChartArea());
			System::Windows::Forms::DataVisualization::Charting::Legend^  legend1 = (gcnew System::Windows::Forms::DataVisualization::Charting::Legend());
			
			this->chart1 = (gcnew System::Windows::Forms::DataVisualization::Charting::Chart());

			this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->chart1))->BeginInit();

			this->SuspendLayout();
			// 
			// chart1
			// 
			this->chart1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((System::Windows::Forms::AnchorStyles::Bottom | System::Windows::Forms::AnchorStyles::Left));
			lineAnnotation1->Name = L"LineAnnotation1";
			this->chart1->Annotations->Add(lineAnnotation1);
			this->chart1->BackColor = System::Drawing::Color::Silver;
			this->chart1->BackSecondaryColor = System::Drawing::Color::Gainsboro;
			this->chart1->BorderlineColor = System::Drawing::Color::Transparent;
			chartArea1->BackColor = System::Drawing::Color::Silver;
			chartArea1->BackSecondaryColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)), 
				static_cast<System::Int32>(static_cast<System::Byte>(64)));
			chartArea1->Name = L"ChartArea1";
			this->chart1->ChartAreas->Add(chartArea1);
			this->chart1->Cursor = System::Windows::Forms::Cursors::Cross;
			legend1->Enabled = false;
			legend1->Name = L"Legend1";
			this->chart1->Legends->Add(legend1);
			this->chart1->Location = System::Drawing::Point(-2, 25);
			this->chart1->Name = L"chart1";
			this->chart1->Palette = System::Windows::Forms::DataVisualization::Charting::ChartColorPalette::SemiTransparent;
			series1->ChartArea = L"ChartArea1";
			series1->Legend = L"Legend1";
			series1->Name = L"Series1";
			this->chart1->Series->Add(series1);
			this->chart1->Size = System::Drawing::Size(404, 272);
			this->chart1->TabIndex = 2;
			this->chart1->Text = L"chart1";
			this->chart1->Click += gcnew System::EventHandler(this, &Form1::chart1_Click);

			// 
			// timer1
			// 
			this->timer1->Enabled = true;
			this->timer1->Interval = 500;
			this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
			// 
			// Form1
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(1016, 573);

			this->Controls->Add(this->chart1);
			this->Name = L"Form1";
			this->Text = L"Form1";
			this->TopMost = true;
			this->WindowState = System::Windows::Forms::FormWindowState::Maximized;
			this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->chart1))->EndInit();

			this->ResumeLayout(false);

		}
#pragma endregion
	private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
			 }
	private: System::Void chart1_Click(System::Object^  sender, System::EventArgs^  e) {
			 }
			 
	private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {

			//Проверяем, работает ли таймер
			Beep(300,500);

		 }
};
}
...
Рейтинг: 0 / 0
21.10.2013, 13:33
    #38435438
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
rotvA,
ноги ломать не надо. имхо как и лазить в main
всю отрисовку делать надо в потоке ожидания таймера
то есть где у вас бип, там и надо: бип --- отрисовался.( вы же этого хотели?)
так как к графику обращаемся не из того потока в каком он создан, будет конфликт
по этому обращаемся через делегат и invoke
это примерно выглядит так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 System::Void ActionD() {
		         // очистка графика, уж не знаю как она там дышит ~ chart1->Clear();
				for (pts = 0; pts < arrlength; pts++)
				{
					 chart1->series1->Points->AddXY(test_array_x[pts], test_array_y[pts]);
				}

			}
	private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
				 MethodInvoker^ mi = gcnew MethodInvoker(this,&ActionD);
				 chart1->Invoke(mi);
				 //Проверяем, работает ли таймер
			           Beep(300,500);
			 }
...
Рейтинг: 0 / 0
21.10.2013, 16:37
    #38435804
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Где-то в степи, спасибо!
идея в целом понятна, как раз то что нужно. Вот только не пойму где System::Void ActionD() должен быть и нужно ли его прототип объявлять.
...
Рейтинг: 0 / 0
21.10.2013, 16:54
    #38435845
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
rotvA,
до объявите его с реализацией в заголовочном файле Form1, можете статиком, можете с параметрами - массивами х и Y( только инициализация MethodInvoker немного изменится, вот вопрос а по месту лямбдами инициализировать MethodInvoker можно
компилятор это дело подхватывает? то уж как то громоздко
...
Рейтинг: 0 / 0
22.10.2013, 11:29
    #38436570
rotvA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
Где-то в степиrotvA,
до объявите его с реализацией в заголовочном файле Form1, можете статиком, можете с параметрами - массивами х и Y( только инициализация MethodInvoker немного изменится, вот вопрос а по месту лямбдами инициализировать MethodInvoker можно
компилятор это дело подхватывает? то уж как то громоздко
Не понимаю как правильно объявить!
chart1,series1,Points - как определять?
Если не сложно, покажите код. У меня куча ошибок вылезает, не знаю за что браться :(
...
Рейтинг: 0 / 0
22.10.2013, 12:11
    #38436659
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
rotvA,Дружище, я не могу показать тебе код, у меня этот тип студия не поддерживает, то что я написал это сценарий исполнения
кое что гугл подсказал+( редактор нового сообщения форума), что у тебя вылазит это уже мелочи - издержки орфографии и специфики языка ты их должен лучше знать чем я ибо он для тебя родной, может поискать специализированный форум не?
...
Рейтинг: 0 / 0
23.10.2013, 09:58
    #38437903
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по chart
почему бы не взять шарповые примеры построения графиков, посомтреть их и сделать аналогично?
и не заморачиваться с с++, который тоже не родной
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по chart / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]