Помогите со скриптом!

0 голосов
спросил 09 Окт, 11 от Virpul (380 баллов) в категории Программные продукты Esri
Здравствуйте, мне нужна помощь помочь разобраться с уже написанным скриптом:


'do_h_lin.ave строит сложные линии. Создайте в виде кнопку и подсоедините к ней
' эту программку. Выбирете значок и его размер, который будет наноситься на линию
'с заданным шагом. Выбирите графику и нажмите на созданную кнопку, программа задаст
'вопроссы и начнет работать.

theView = av.GetActiveDoc
TheDisplay=theView.GetDisplay
Theinter=List.Make
w=MsgBox.Input ("w=","Введите число шагов", "1").asNumber
if (w = Nil) then
exit
end
THi=0
While (THi<w)
n=MsgBox.Input ("n=","Введите Шаг", "40000").asNumber
if (n = Nil) then
exit
end
Theinter.Add(n)
THi=THi+1
end
THj=THi-1

d=MsgBox.Input ("d=","Введите сдвиг", "1050").asNumber
if (d = Nil) then
exit
end


qw=MsgBox.ChoiceAsString({"Направить наружу","Направить внутрь"},"Выбмрети направление : " , "")
if (qw = Nil) then
exit
end



for each recnum in av.GetActiveDoc.GetGraphics.getSelected
   Shpart=recnum.GetShape.AsMultiPoint.AsList
      E0=0
   X0=Shpart.get(0).GetX
   Y0=Shpart.get(0).getY
' Shpart.Remove (0)

THj=0
          for each Shpoint in Shpart
           
            Xi=Shpoint.GetX
            Yi=Shpoint.GetY
            TheX=((Xi.abs)-(X0.abs)).abs
            TheY=((Yi.abs)-(Y0.abs)).abs
            Ez=(TheX^2)+(TheY^2)
            E=Ez.sqrt
            if(THj=THi) then
            THj=0
            end
            n=Theinter.get(THj)
            Thj=Thj+1       
             En=n-E0
            if (En>=0) then
            While (E>=En)
       
              
            THEcos=TheX/E
            THEsin=TheY/E
              
            Thea=Thesin.Asin.AsDegrees
             if (qw="Направить внутрь") then
              Thea=180+Thea
              d=-(d.abs)
               end

           dx=d*Thesin
           dy=d*Thecos
            
            if (Xi<X0) Then
            THEcos=-Thecos
            nx=0
            else
            nx=1
            end
              if (Yi<Y0) Then
            THEsin=-Thesin
            ny=0
            else
            ny=1
            end
            if ((nx=1)and(ny=1)) then
             dx=-dx
            end
             
            if ((nx=0)and(ny=1)) then
            Thea=180-Thea
            dx=-dx
            dy=-dy
            end

            if ((nx=1)and(ny=0)) then
            Thea=-Thea
            end
             
                     
           if ((nx=0)and(ny=0)) then
            Thea=180+Thea
            dy=-dy
            end

            Xn=X0+(En*Thecos)+dx
            Yn=Y0+(En*Thesin)+dy            
           ThePoint=Xn@Yn
            

TheGraphicPoint=GraphicShape.Make(Thepoint)
TheGraphicPoint.Getsymbol.SetAngle(Thea)
TheGraphicList=TheView.GetGraphics
TheGraphicList.Add(TheGraphicPoint)

if(THj=THi) then
            THj=0
            end
            n=Theinter.get(THj)
            THj=THj+1     &nb

11 Ответы

0 голосов
ответил 10 Окт, 11 от Lord (3,920 баллов)
Скрипт работает следующим образом:
Вдоль выделенной линии в графике (не в теме) ставит маркеры (Point)со сдвигом в сторону от линии.
В запросе наружу или вовнутрь следует понимать так:
Наружу - значит сдвиг влево по направлению линии от начала к концу, вовнутрь - направо по направлению линии.
скрипт ставит группы точек. Например ***   ***   ***
или **        **        **
и т.д.
w= указывается количество точек в группе
Введите шаг - указывается расстояние в единицах измерения вида
Запрос выдаётся количеством, указанным в W=
Притом можно задать различное расстояние между символами.
Расстояние зависит от масштаба, в котором нужно показать карту.
Сдвиг - число в единицах измерения вида, на сколько сдвигается символ в ту или иную сторону.
Зависит от масштаба карты-вида.
Для различных символов сдвиг будет разный.
Методика выполнения
Установить требуемый масштаб вида.
Выбрать символ, какой будет отображаться.
Выделить линию (одну или несколько с шифтом)
выполнить скрипт. Вдоль линии появятся точки тоже в графике (не в теме) Значения по умолчанию 40000 и 1050 заданы для мелкого масштаба карты.
Экспериментируйте, дерзайте.


0 голосов
ответил 10 Окт, 11 от Lord (3,920 баллов)
Если нужно равномерное расположение символов вдоль линии
то W= 1
Шаг спросит один раз. Введите расстояние, через которое должны появляться символы. Можно померять по виду и его задать. Сдвиг подобрать. С третьего раза угадаете, или померять по карте-виду.
0 голосов
ответил 10 Окт, 11 от Virpul (380 баллов)
Выбрать символ, какой будет отображаться.- не в теме а в графике - это как?))

0 голосов
ответил 10 Окт, 11 от Lord (3,920 баллов)
Ctrl+P
появится окно, где можно выбрать шрифт, колор, маркер, линию и заливку. Там и выберите символ.
0 голосов
ответил 10 Окт, 11 от Virpul (380 баллов)
Не получается у меня(((
Выделяю маркер, выделяю кривую в теме и запускаю скрипт - но ничего не выходит, пробовал по разному результат тот же - объясните мне труднодоходящему пожалуйста подробнее)))
0 голосов
ответил 10 Окт, 11 от Virpul (380 баллов)
хоть убей - либо скрипт не рабочий, либо у меня руки кривоваты)

0 голосов
ответил 10 Окт, 11 от Virpul (380 баллов)
Lord можешь попытаться сделать это и посмотреть что получилось на любом примере?
0 голосов
ответил 10 Окт, 11 от Lord (3,920 баллов)
Я же сказал. Объект линейный вне темы. Просто на листе.
Убери видимость всех тем. Будет чистый лист. На нем нарисуй любую ломаную линию. Её выдели и запусти скрипт.
Для темы нужно скрипт переделывать. очень серьёзно.
0 голосов
ответил 10 Окт, 11 от Lord (3,920 баллов)
Так я ведь и пробовал у себя. всё работает. Иначе откуда бы я знал, как оно работает.
0 голосов
ответил 10 Окт, 11 от portvein777tm (13,820 баллов)
скачать символайзер LOL \\и все будеть \\\\ тденис вроде пробовал
 
 
иное дело - после этих (и Ваших) порнографий  - если скрипты (на др машине к примеру) не подключите - будет вам щастье (сегментатион виолатион)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...