Страница 1 из 1

Определение скриптом выбранного полигона

Добавлено: 18 авг 2011, 22:18
Elliv
Не нашлось подобной темы. Как определить программно в Avenue, какой полигон выбран? Есть ли какое-то взаимодействие на уровне кода с выделением полигона (когда он подсвечивается желтым), или необходимо сочинять отдельный код? Пытаюсь
Вернуть координаты щелчка мышью, вернее, вернуть точку, где был щелчок. и проверить. не содержит ли эту точку какой-либо из полигонов темы. Но пока не пашет даже так, для пробы:

Код: Выделить всё

theView = av.GetProject.FindDoc ("View1")
theGList = theView.GetGraphics
myTheme = theView.FindTheme ("Theme2.shp")
myFTab = myTheme.GetFTab
myField = myFTab.FindField ("Shape")
N = myFTab.GetNumRecords
index=0
aDisplay = av.GetActiveDoc.GetDisplay

twoFTab = FTab.MakeNew("C:\Lin1.shp".AsFileName, Line)
twoTheme = FTheme.Make(twoFTab)
twoField = twoFTab.FindField ("Shape")
fields = List.Make
fields.Add(Field.Make("IDS", #FIELD_SHORT, 4, 0))
twoFTab.AddFields(fields)

R = twoFTab.GetNumRecords
j=0
  M = N-1  
  aPoint = aDisplay.ReturnUserPoint
  aPrj = theView.GetProjection
  if (aPrj.IsNull.Not) then aPoint = aPoint.ReturnUnprojected(aPrj) end
  
      while (index < M)
        Shape1 = myFTab.ReturnValue(myField,index)
        if (Shape1.Contains(aPoint))
        then 
        msgbox.info("Входит","")
        end
 
        index = index+1 
        end

Re: Определение скриптом выбранного полигона

Добавлено: 19 авг 2011, 01:18
Максим Дубинин
есть, надо сделать getselection и посмотреть какие биты установлены в возвращаемом BitMap-e, это и будут rec-и выбранных записей

PS: пожалуйста, используйте кнопку Code для кода

Re: Определение скриптом выбранного полигона

Добавлено: 19 авг 2011, 12:27
Elliv
Загуглил exmplы getselection, нашел такую штуку
for each rec in ft.GetSelection
Я правильно понимаю - что это перебор всех выбранных записей?

Проверил - ага.

Re: Определение скриптом выбранного полигона

Добавлено: 19 авг 2011, 22:12
Elliv
А еще такой трабл:

Код: Выделить всё

        razmer = MsgBox.Input("Vvedite velichinu uchastka","","")
      
        for each rec in myFTab.GetSelection
        Shape1 = myFTab.ReturnValue(myField,rec)
        myPoint1 = Shape1.ReturnCenter
        myPoint2 = Point.Make((myPoint1.GetX-0.1),(myPoint1.GetY-0.1))
        
        aRect = Rect.Make(myPoint1,myPoint2)
        aGPoint = GraphicShape.Make (aRect) 
        theGList.Add(aGPoint)     
        end
Дает следующий результат:
Изображение

Единицы измерения карты - децимал дигриз. Единицы дистанс - unknown. В чем тут проблема?

Re: Определение скриптом выбранного полигона

Добавлено: 19 авг 2011, 22:52
Максим Дубинин
прямоугольники не такие как надо? а какие надо?

Re: Определение скриптом выбранного полигона

Добавлено: 19 авг 2011, 22:55
Elliv
Ну, по коду если смотреть - то должны быть квадраты 0.1 х 0.1.

Причем меняю плюсы на минусы и наоборот - а рисует все равно в одну и ту же сторону, только размеры изменяются хаотично. Что за язык вообще такой чокнутый Оо

Хотя, размеры не совсем хаотичные, даже после перезапуска рисует точно такие же неправильные ректы.

Re: Определение скриптом выбранного полигона

Добавлено: 17 дек 2011, 14:23
Евгений_ZX
из справки: Rect.Make (anOrigin, aSize)
Создает прямоугольник aRect, начинающийся в точке anOrigin с размером aSize. anOrigin - точка начала построения прямоугольника. aSize - точка, X и Y значения которой представляют ширину и высоту прямоугольника.

соответственно исключите из расчета вашего Mypoint2 все значения Mypoint1 содержащего центроиды "плавающих" объектов и размеры прямоугольников сразу перестанут "плавать" )))

Голяков Евгений
ФГУП "ВИМС" vims-geo.ru