Помогите пожалуйста выполнить задание
Требуется программка в которой на плане(карте завода) по путям можно было было бы передвигать объекты(как бы вагоны) при чем нужно чтобы эти объекты можно было поставить или передвигать только по линиям путей, а также добавлять и удалять их.
каждый объект должен отображаться в таблице и меть несколько информационных полей (дата начала - завершения работ, цех, этап работ)
Программа будет использоваться на совещаниях для планирования передвижений вагонов по заводу, поэтому требуется минимум лишнего интерфейса, и иметь возможность сохранения.
Начал делать ее в VB 2010, перенес таблицу с access'a добавил на форму план и квадратики которые можно перетаскивать, но как сделать чтобы они были прицеплены к путям(и можно ли вобще такое) , как сохранять их на форме, и связать таблицу с объектам пока не разобрался..
вот код(понимаю что код кривой но я ток начинаю разбираться в BV):
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: данная строка кода позволяет загрузить данные в таблицу "_ДЛЯ_ПРОГРАММЫDataSet.Основная". При необходимости она может быть перемещена или удалена.
Me.ОсновнаяTableAdapter.Fill(Me._ДЛЯ_ПРОГРАММЫDataSet.Основная)
'TODO: данная строка кода позволяет загрузить данные в таблицу "_ДЛЯ_ПРОГРАММЫDataSet.Вспомогательная". При необходимости она может быть перемещена или удалена.
Me.ВспомогательнаяTableAdapter.Fill(Me._ДЛЯ_ПРОГРАММЫDataSet.Вспомогательная)
End Sub
Private Sub ОсновнаяBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОсновнаяBindingNavigatorSaveItem.Click
Me.Validate()
Me.ОсновнаяBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me._ДЛЯ_ПРОГРАММЫDataSet)
End Sub
Private Sub ОсновнаяDataGridView_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles ОсновнаяDataGridView.CellContentClick
End Sub
Private Sub Panel_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If Control.MouseButtons = Windows.Forms.MouseButtons.Left Then
CType(sender, Panel).Left = Control.MousePosition.X - Me.Left - CType(sender, Panel).Width
CType(sender, Panel).Top = Control.MousePosition.Y - Me.Top - CType(sender, Panel).Height
End If
End Sub
Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub RectangleShape1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub ВспомогательнаяDataGridView_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)
End Sub
Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
AddHandler (Panel1.MouseMove), AddressOf Panel_MouseMove
Me.Controls.Add(Panel1)
End Sub
Private Sub Panel2_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
AddHandler (Panel2.MouseMove), AddressOf Panel_MouseMove
Me.Controls.Add(Panel2)
End Sub
Private Sub Panel3_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
AddHandler (Panel3.MouseMove), AddressOf Panel_MouseMove
Me.Controls.Add(Panel3)
End Sub
Private Sub MonthCalendar1_DateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs)
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub PictureBox1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub RectangleShape1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub ОсновнаяBindingNavigator_RefreshItems(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОсновнаяBindingNavigator.RefreshItems
End Sub
End Class
На PHP надо было писать. Или на делфи в билдере. Говорят, там всё очень просто для начинающих.
Так работает система сообщений виндовс - ее возможности не безграничны, если дельта перемещения будет большой, то она будет отработана.
Самый правильный способ - создать математическую модель путей, функции прямых линий , и проверять координаты после перемещения, и не давать им выйти дальше разрешенных.
K и С можно хранить в базе данных, это позволит потом создавать-изменять-исползовать разные карты.
Сама проверка может быть во время движения, это (посчитать чего-нибудь) комп делает очень быстро.
ситуация 1: вагончик движется по линии - берем от мышки только вертикальную координату и рисуем вагончик на выше/ниже мышки
ситуация 2: вагончик на развилке - считаем векторы всех линий из развилки и выбираем линию с наиболее близким вектором к вектору мышки. Если все векторы смотрят в другую сторону - вагончик в тупике.
Следующий этап что? чтобы вагончики не могли поворачивать под острым углом - где есть перекресток, а не стрелка (тут уж пикселями вообще никак не обойдетесь)?
Предотвращение столкновений вагончиков?
И под занавес - а зачем вообще совещание - пусть компьютер сам рассчитает оптимальный план перемещений!
:-)
ситуация 1: вагончик движется по линии - берем от мышки только вертикальную координату и рисуем вагончик на выше/ниже мышки
ситуация 2: вагончик на развилке - считаем векторы всех линий из развилки и выбираем линию с наиболее близким вектором к вектору мышки. Если все векторы смотрят в другую сторону - вагончик в тупике.
Во во. В довесок графический редактор карт, импорт из автокада, экспорт в гугл ..... Потом связь с контроллерами стрелок и датчиков движения.....
:-)
Во во. В довесок графический редактор карт, импорт из автокада, экспорт в гугл ..... Потом связь с контроллерами стрелок и датчиков движения.....
:-)
А че - норм бабла можно некисло распилить.
И под занавес - а зачем вообще совещание - пусть компьютер сам рассчитает оптимальный план перемещений!
:-)
они там хотят сидеть и решать куда какой вагон отправить,паровозики короче поиграть хотят...
еще хотят чтобы каждый вид вагона имел свою форму и цвет в зависимости от готовности)
Угу, я всем говорю что я принтеры заправляю ;)
они там хотят сидеть и решать куда какой вагон отправить,паровозики короче поиграть хотят...
еще хотят чтобы каждый вид вагона имел свою форму и цвет в зависимости от готовности)
Кстати, готовые такие системы есть. Но они очень не бесплатные. Я в одной фирме работал -
там полная модель 3Д, склада, с транспортерами, автопогрузчиками, если задать недостаточную прочность стеллажей, и перегрузить их - то ящики падают строго по математической модели - итп
На создании этой модели сидел отдельный программист.
ситуация 1: вагончик движется по линии - берем от мышки только вертикальную координату и рисуем вагончик на выше/ниже мышки
ситуация 2: вагончик на развилке - считаем векторы всех линий из развилки и выбираем линию с наиболее близким вектором к вектору мышки. Если все векторы смотрят в другую сторону - вагончик в тупике.
Даж не так: ищем ближайшую к координатам мышки точку на линии или конец линии , на расстоянии например не больше 10px и отрисовываем вагончик там.