Нужен скрипт

0 голосов
спросил 07 Апр, 09 от S.E. (12,840 баллов) в категории Программные продукты Esri

Есть ли у кого-нибудь простенький скрипт для построения графика по двум параметрам. То есть есть dbf, надо отрисовать график в AV.

Кинуть можно на olha4@mail.ru

17 Ответы

0 голосов
ответил 07 Апр, 09 от geologic (39,860 баллов)
А где, в лэйауте? Если в виде, так это же точки по XY, и конвертнуть в полилинию. Можно и вдоль непрямой трассы, M=X, offset=Y.
    
0 голосов
ответил 07 Апр, 09 от S.E. (12,840 баллов)
Ага, в Виде надо построить. Хотелось бы чтобы сразу линию выдавал без лишних телодвиганий...  Так обычно в ЕТ и делаю, но вот чтоб сразу без заморочек...
0 голосов
ответил 09 Апр, 09 от Albert1 (10,780 баллов)
'Получить активную тему ...

theView = av.GetActiveDoc
thegraphics=theview.getgraphics

theCount = theView.GetActiveThemes.Count
If (theCount = 0) then
msgbox.info("Нет активных тем для обработки.","Нет активных тем...")
exit
End
theTheme = theView.GetActiveThemes.Get(0)
theFtab = theTheme.GetFtab

theClassName = theFtab.GetShapeClass.GetClassName.AsString

'Выполнить действия с активной темой, только если это тема объектов ...

If (theClassName = "Point") then
theShapeField = theFtab.FindField("shape")

theList={}
For each rec in theFtab.GetSelection
    theshape=theftab.returnvalue(theshapefield,rec)
      thelist = thelist.Add((theshape.getx)@theshape.gety)
'    создание линии из точечного шейпфайла по точкам для плана
end

   theShapeM=GraphicShape.Make(Polyline.Make({theList}))
   thegraphics.add(theShapeM)
   theView.Invalidate

end
Евгений, привяжешь это на кнопку в виде, отрисует линию по выбранным точкам точечной темы. Авторство мое 8)
0 голосов
ответил 09 Апр, 09 от S.E. (12,840 баллов)
Спасибо, Альберт. Полезный скрипт вы сделали. Буду использовать в дальнейшем. Применительно к данному моменту - вся проблема в том, что у меня нет тем, а есть ДБФ с полями Х иУ (условно). Как вот в данном случае избежать промежуточного звена - построение темы события, потом построение линии по точкам..., а сразу построить линию из ДБФ?
0 голосов
ответил 09 Апр, 09 от geologic (39,860 баллов)
Ну уж вам-то такое спрашивать... Вы ведь в программировании вроде специалист.

У меня есть куски из которых вполне можно собрать, есть Например, в одном скрипте последовательное чтение XYZ из таблицы, в другом - рисование линий по getXY(+Z) (по точкам). Сшить эти две процедуры вроде плевое дело, но прошло лет 6 и я авеню уже смутно помню.. Если интересно, могу закинуть.
0 голосов
ответил 09 Апр, 09 от geologic (39,860 баллов)
Посмотрел - ведь цикл построения полилинии уже обозначен у Альберта, а вам надо просто перед этим прочесть XY из таблицы. примерно так:

До цикла:

fX=TheFTab.FindField("X")
fY=TheFTab.FindField("Y")

Внутри цикла, перед getX GetY:
Xtab = TheFTab.ReturnValue(fX,rec)
Ytab = TheFTab.ReturnValue(fY,rec)

И вместо GetX GetY вставить Xtab, Ytab
theShape= соответственно, вообще не нужно, поскольку это чтение геом.данных из точки.

будете делать - можете еще Z добавить ;)
0 голосов
ответил 09 Апр, 09 от S.E. (12,840 баллов)

Так вот не программист я. Максимум что могу - подправить под себя какой-нибудь скрипт, если понимаю где что надо исправить. Тот код, который вы написали постом выше - его куда надо втиснуть? Как это будет выглядеть в сборе?

0 голосов
ответил 09 Апр, 09 от geologic (39,860 баллов)
Может, вот этот скрипт поможет? Грузить пачкой нужные dbf-ы, сразу в точки. А оттуда уже скрипт Альберта. не могу ни проверить, ни склеить их оба, ArcView не стоит :(
    
    
0 голосов
ответил 10 Апр, 09 от Albert1 (10,780 баллов)
Тогда так: вперед поместить
theTableList={}
for each thedoc in av.GetProject.GetDocs
If (theDoc.Is(Table)) then
    theTableList.Add(theDoc)
end
end
TheTable=MsgBox.ListAsString(theTableList,"","")
TheFtab = TheTable.GetVtab
Вроде так, может небольшие грамматические ошибки 8) пишу на ходу. Дальнейшие исправления были выше, т.е. все в сборе будет так:

theView = av.GetActiveDoc
thegraphics=theview.getgraphics

theTableList={}
for each thedoc in av.GetProject.GetDocs
If (theDoc.Is(Table)) then
    theTableList.Add(theDoc)
end
end
TheTable=MsgBox.ListAsString(theTableList,"","")
TheFtab = TheTable.GetVtab

theList={}
fX=TheFTab.FindField("X")
fY=TheFTab.FindField("Y")

For each rec in theFtab.GetSelection
Xtab = TheFTab.ReturnValue(fX,rec)
Ytab = TheFTab.ReturnValue(fY,rec)
      thelist = thelist.Add(Xtab@Ytab)
'    создание линии из точечного шейпфайла по точкам для плана
end

   theShapeM=GraphicShape.Make(Polyline.Make({theList}))
   thegraphics.add(theShapeM)
   theView.Invalidate

end

Вроде все. Должно даже работать 8).
GetSelection в начале цикла можно убрать...    
    
0 голосов
ответил 10 Апр, 09 от S.E. (12,840 баллов)

to geologic: этот модуль существенно облегчает работу. Спасибо за ссылку.

to Альберт: в приведенном вами скрипте - при запуске появляется окошко со списком таблиц проекта. Но после выбора таблицы линия не строится. Чего-то не хватает для запуска построения...
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...