|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
Ребят, у меня возникла задача реализации WEB карты железнодорожных путей на Silverlight. Столкнулся с необходимостью брать нарисованные предварительно в Expression Blend изображения (например вот такая вилка - |_|) как path - вот таким образом <Path Name="ReelWayStandardLockup" Data="M80,40 L80,56 L96,56 L96,40" HorizontalAlignment="Left" Height="17" Margin="79.5,39.5,0,0" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Top" Width="17"/> , и вот их мне нужно программно размножать. Делаю так - private Path ReelWayStandardLockup1 = null; в качестве теста (пока так) в конструкторе создаём обычный объект типа Path MainPage { /// /// /// this.ReelWayStandardLockup1 = new Path(); this.ReelWayStandardLockup1.Name = "WayStop1"; this.ReelWayStandardLockup1.StrokeThickness = 2; this.LayoutRoot.Children.Add(this.ReelWayStandardLockup1); } а потом например на SizeChanged, (не суть важно), но делаем так try { this.ReelWayStandardLockup1.Data = this.ReelWayStandardLockup.Data; } catch { } this.ReelWayStandardLockup1.Stretch = this.ReelWayStandardLockup.Stretch; this.ReelWayStandardLockup1.Fill = this.ReelWayStandardLockup.Fill; this.ReelWayStandardLockup1.Stroke = this.ReelWayStandardLockup.Stroke; this.ReelWayStandardLockup1.Margin = new Thickness(300, 300, 0, 0); то есть создаю экземпляр ReelWayStandardLockup1 типа Path, и его поля прописываю тем что содержит образец ReelWayStandardLockup, а после того позиционирую его куда мне надо. (сам образец потом просто скрываю с карты например) вот такая задача Выпадает исключение при попытке присвоения собственно графического содержимого по образцу - this.ReelWayStandardLockup1.Data = this.ReelWayStandardLockup.Data; ArgumentException - Значение не попадает в ожидаемый диапазон.... Что же делать? У меня задача разработки карты с типизацией объектов (станции, пути, симафоры, тупики и т.п. ), я немогу их просто нарисовать и всё. У меня программмно генерируються экземпляры станций, которые содержат в том числе (в качестве одного из своих полей) - объект графического представления (эллипс). Но для объектов "подъездной фронт" я немогу использовать эллипс. Мне нужно произвольное изображение. Их приходиться рисовать предварительно. Как их программно размножать по нарисованному образцу? Кто сталкивался? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2013, 07:20 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
неужели никто не сталкивался... по сути выход из этой ситуации - создавать Path прямо программно с нуля (без всяких образцов). но это правда только временное решение. когда достаточно нарисовать 3 линии |_|, то всё просто. а вот в случае сложных фигур, рисовать их программно без шаблонного Path-а, это не приведи Господь... и вызывает сомнение по сути зачем он нужен этот бленд, рас толку с него никакого. опять куча возможностей всяких, наворотов и т.п. для дизайнеров, а вот для программиста это ни только не панацея опять, но и даже не вариант... ну что ж, пока обойдёмся временным решением ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2013, 11:51 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
multiuser, Blend и есть - для дизайнеров ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2013, 23:35 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
Ну ООП люди не зря придумали. Создаете для каждого объекта свой контрол, там контрол для станции, для развилки и т.д... Затем натягиваете эти контролы на карту, хоть программно, хоть в бленде... Хотя возможно я что-то не так понял... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2013, 10:58 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
EDUARD SAPOTSKIСоздаете для каждого объекта свой контрол Если надо всего лишь отрисовать готовый объект, то отдельный контрол на каждую пиктограмму - это как-то слишком. Топикстартера, думаю, спасет обычный VisualBrush . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2013, 20:25 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
EDUARD SAPOTSKI, вы правильно поняли! Это тоже я рассматриваю уже как вариант. И да, было бы неплохим выходом делать их как контролы (мало того и выбирать их потом на карте проще будет, и всё что угодно делать). Стараюсь просто не навешивать много всего на элементы, поэтому сделав их контролами, заставить их тянуть за собой событийную модель я пока думаю стоит ли... Просто их много на карте будет (возможно тысячи), и каждый из них делать контролом... Всё таки пока пытаюсь оставить их голыми графическими интерпретирующими картинками, а для выборки, масштабирования карты, связки семантической информации и т.п. стараюсь использовать свою физику выбора и т.п. Ног возможно придётся пойти и по пути контролов. Спасибо за ваш отзыв. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2013, 07:20 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
Автор, вы про VisualBrush выше внимательно прочитали? Код: xml 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2013, 09:42 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
Делайте контролами и не дурите себе голову. В дальнейшем это избавит Вас от кучи гемора, потом клинет захочет что бы значки меняли цвет в зависимости от ситуации, были кликабельными и еще тысячи всевозможных хотелок. Используя контролы Вы будете реализовывать хотелки без всяких проблем. На производительности не загоняйтесь, тысячи контролов это не миллионы, метром больше оперативы сожрет - метром меньше - сегодня всем пофиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2013, 12:51 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
Контролы никоим образом не избавляют от вопроса отрисовки созданного дизайнером изображения как единого ресурса. Изначальный вопрос был вроде как именно об этом. Воспроизводить отрисовку каждого ресурса на уровне примитивов с нуля в каждом контроле - более чем спорное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2013, 12:55 |
|
Размножение нарисованных совокупностей линий (Path) программно - как?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Спасибо я посмотрел это тоже! Позднее я вернусь к этому. Код который делал я, я искал ранее в примерах и выглядел он в оригинале так - Path createPath(ObservableCollection<Point> rawData) { Path FinalPath = new Path(); PathGeometry FinalPathGeometry = new PathGeometry(); PathFigure PrimaryFigure = new PathFigure(); // Если вам нужно, чтобы Path был фигуро, тогда закройте PathFigure // и Path замкнется автоматически. Но если вам нужна незамкнутая линия, // поставьте PrimaryFigure.IsClosed = false; PrimaryFigure.IsClosed = true; PrimaryFigure.StartPoint = rawData[0]; PathSegmentCollection LineSegmentCollection = new PathSegmentCollection(); for (int i = 1; i < rawData.Count; i++) { LineSegment newSegment = new LineSegment(); newSegment.Point = rawData[i]; LineSegmentCollection.Add(newSegment); } PrimaryFigure.Segments = LineSegmentCollection; FinalPathGeometry.Figures.Add(PrimaryFigure); FinalPath.Data = FinalPathGeometry; return FinalPath; } сам тот пример рабочий - вот он http://silverlight.su/viewtopic.php?id=138 - проверял естественно в моём случае, такая логика не работала и выдавала исключение... особенности этого скорее всего в том, что они используют ObservableCollection (в отличии от меня). Её основная разница в предоставлении автоматически свойств set, get. Сёдня я столкнулся с тем, что в сильвере многое не работает с теми типами которые не предоставляют свойств. Хотя компилируется всё прекрасно. Причём эту ошибку времени выполнения, так просто не раскусить. Она не указывает что им видишь ли свойства нужны... Говорит - ожидался мол не такой набор данных, значение не попадает в диапазон и т.п. чушь... (потому что перехват исключения идёт на базе где-то... совсем не информативно). И попробуй пойми почему... Если свойства нужны - значит требует реализации особого интерфейса. Вот применил ObservableCollection всё попёрло сразу. Спасибо всем! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2013, 13:26 |
|
|
start [/forum/topic.php?fid=21&fpage=32&tid=1441467]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 307ms |
total: | 455ms |
0 / 0 |