powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по chart
22 сообщений из 22, страница 1 из 1
Вопрос по chart
    #38418735
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Вопрос следующий - хочу построить обычный график (линия соединяет точки).Пользуюсь стандартным chart из VS2010. Как в нём скормить плоттеру не точки, а сразу массив?
Погуглив нашёл только варианты с циклом преобразования массива в точки.Как-то не совсем красиво это...
...
Рейтинг: 0 / 0
Вопрос по chart
    #38419041
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Вопрос по chart
    #38424231
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, раз никто не знает, тогда вопрос номер 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
Вопрос по chart
    #38427115
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вдоволь нагуглившись, понял, что задача сводится к изменению свойства класса извне. К сожалению, сам не могу справиться (видимо что-то упускаю).
Если не трудно, приведите пример кода в контексте chart.
Заранее большое спасибо!
...
Рейтинг: 0 / 0
Вопрос по chart
    #38432345
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
500 RUB на мобильный тому, кто покажет как это делать для моего случая.
...и ещё 500 тому, кто скажет как поверх этого правильно сделать обновлениие графика раз в n миллисекунд (встроенный в forms таймер или лучше свой?).
PS данные обновляются нерегулярно, в обоих случаях нужен работающий код.
...
Рейтинг: 0 / 0
Вопрос по chart
    #38432501
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rotvA, ты не врубаешься, что твои вопросы просто тупо никто не понимает?
Такую ахинею понаписал...
...
Рейтинг: 0 / 0
Вопрос по chart
    #38432548
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivrotvA, ты не врубаешься, что твои вопросы просто тупо никто не понимает?
Такую ахинею понаписал...
Ок, пробую ещё раз.
Есть: array1 со значениями абсцисс, array2 со значениями ординат. Они изменяются, нерегулярно.
Задача: построить по ним график с обновлением раз в n миллисекунд. На графике должны быть только текущие значения, история не нужна.
Что я делаю: добавив в проект график из windows forms (Form1.h), я пытаюсь его обновить из main.cpp и у меня это не получается. Из Form1.h всё ок.
...
Рейтинг: 0 / 0
Вопрос по chart
    #38432715
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rotvA,

Чё за виндовс формс такой ?
Ссылку на сайт библиотеки дай что ли, или описание.
...
Рейтинг: 0 / 0
Вопрос по chart
    #38432729
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по chart
    #38432949
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,перенесите, если не сложно.

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Вопрос по chart
    #38433460
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите плз. Сегодня читал доки, но это меня ещё больше запутало.
...
Рейтинг: 0 / 0
Вопрос по chart
    #38433486
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rotvA,
вы плаваете между cpp и cs, вы определитесь или там остаться или или полностью на шарп перейти
...
Рейтинг: 0 / 0
Вопрос по chart
    #38433672
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,
а что мне мешает писать на С++ и пользоваться .NET формами?
...
Рейтинг: 0 / 0
Вопрос по chart
    #38433731
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rotvA,
да никто не мешает, выбор за вами, но с 2006 вы наверно первый кто озвучил проблему в этом ключе,
по теме, лучше создать свой системный таймер, и в его потоке ожидания делегатом делать ( очищение графика, а потом прорисовку точек) если это массив точек - то проходом по массиву.. ну и не забывать про конфликт контрола в не креатном потоке
...
Рейтинг: 0 / 0
Вопрос по chart
    #38433743
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем вам модифицировать main.cpp это точка входа, ее среда сама генерит, или надо писать в ручную? не имею этот тип роектов
в заголовочных файлах Form1 объявляйте перемененные и функции, а в Form1.срр делайте реализацию
не знаю что это (System::Void Form1::chart1-> series1-> points-> addxy (test_array_x [i], test_array_y [i]);), но это скорее всего надо писать в обработчике таймера в cpp, ну и namespace не вижу, выложите проект куданить - посмотреть что это за зверь
...
Рейтинг: 0 / 0
Вопрос по chart
    #38435188
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,
проект больше 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
Вопрос по chart
    #38435438
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по chart
    #38435804
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, спасибо!
идея в целом понятна, как раз то что нужно. Вот только не пойму где System::Void ActionD() должен быть и нужно ли его прототип объявлять.
...
Рейтинг: 0 / 0
Вопрос по chart
    #38435845
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rotvA,
до объявите его с реализацией в заголовочном файле Form1, можете статиком, можете с параметрами - массивами х и Y( только инициализация MethodInvoker немного изменится, вот вопрос а по месту лямбдами инициализировать MethodInvoker можно
компилятор это дело подхватывает? то уж как то громоздко
...
Рейтинг: 0 / 0
Вопрос по chart
    #38436570
rotvA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиrotvA,
до объявите его с реализацией в заголовочном файле Form1, можете статиком, можете с параметрами - массивами х и Y( только инициализация MethodInvoker немного изменится, вот вопрос а по месту лямбдами инициализировать MethodInvoker можно
компилятор это дело подхватывает? то уж как то громоздко
Не понимаю как правильно объявить!
chart1,series1,Points - как определять?
Если не сложно, покажите код. У меня куча ошибок вылезает, не знаю за что браться :(
...
Рейтинг: 0 / 0
Вопрос по chart
    #38436659
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rotvA,Дружище, я не могу показать тебе код, у меня этот тип студия не поддерживает, то что я написал это сценарий исполнения
кое что гугл подсказал+( редактор нового сообщения форума), что у тебя вылазит это уже мелочи - издержки орфографии и специфики языка ты их должен лучше знать чем я ибо он для тебя родной, может поискать специализированный форум не?
...
Рейтинг: 0 / 0
Вопрос по chart
    #38437903
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему бы не взять шарповые примеры построения графиков, посомтреть их и сделать аналогично?
и не заморачиваться с с++, который тоже не родной
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по chart
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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