Рисование откосов

0 голосов
спросил 08 Июль, 03 от Гость (210,080 баллов) в категории Программные продукты Esri

Господа!

У кого есть соображения по автоматизации рисования откосов?

(Чередование длинных и коротких бергштрихов от одной линии (верхней бровки) до другой (нижней).

5 Ответы

0 голосов
ответил 09 Июль, 03 от Гость (210,080 баллов)

Активный документ - Вид, выделено две графических полилинии..

' рисование откосов
'
aView = av.GetActiveDoc
fLine = aView.Getgraphics.GetSelected.Get(0)  'верхняя линия, рисуется первой
tLine = aView.Getgraphics.GetSelected.Get(1) 
'нижняя линия, рисуется второй
  ' т.е идея такова: сперва цифруеш все верхи, затем все низы
  ' в данном случае берется из графики, но несложно переделать
  ' для темы, можно и с работой по атрибутам, дерзай..

    'TODO: здесь можно MsgBox для запроса шага
fLine.SetShape(fLine.GetShape.ReturnDensified (0.2)) 
'<0.2> - шаг бергштриха
                                                      ' по линии в ед.карты

fPnt = fLine.GetShape.AsList.Get(0).AsList
toPerc = 100 / (fPnt.Count)
stPerc = 0
tPnt = {}
for each p in 0..(fPnt.Count - 1)
  stPerc = stPerc + toPerc
  tPnt.Add(tLine.GetShape.Along (stPerc))
end

lens = false
for each p in 0..(fPnt.Count - 1)
  bLine = PolyLine.Make({{fPnt.Get(p), tPnt.Get(p)}})
  if (lens) then
    divp = bLine.Along (50)
    bLine = PolyLine.Make({{fPnt.Get(p), divp}})
  end
  lens = not lens
    gl = GraphicShape.Make(bLine)
    aView.GetGraphics.UnselectAll
    gl.SetSelected(TRUE)
    aView.GetGraphics.Add(gl)
end

0 голосов
ответил 09 Июль, 03 от crocodile (2,120 баллов)

А вот если чуть-чуть переделать скрипт пердложенный AndB : "закоротить" кодimage , и убрать счетчитк count-1, на мой вкус он мало применим к спискам точек (лучше уж получить номер элемента списка если хочется иметь цифру), то получится покороче и рисовать будет покрасивее, от одного конца до другого.

aView = av.GetActiveDoc
fLine = aView.Getgraphics.GetSelected.Get(0)  'верхняя линия, рисуется первой
tLine = aView.Getgraphics.GetSelected.Get(1)  'нижняя линия, рисуется второй
  ' т.е идея такова: сперва цифруеш все верхи, затем все низы
  ' в данном случае берется из графики, но несложно переделать
  ' для темы, можно и с работой по атрибутам, дерзай..

    'TODO: здесь можно MsgBox для запроса шага
fLine.SetShape(fLine.GetShape.ReturnDensified (0.1))  '<0.2> - шаг бергштриха
                                                      ' по линии в ед.карты

strix_start_Pnt_lst = fLine.GetShape.AsList.Get(0).AsList 'список точек первой линии


lens = false

for each p in strix_start_Pnt_lst  'для  каждой точки в списке
   
  tLine_percent=fLine.getshape.PointPosition (p)

 
  strix_Line = PolyLine.Make({{p,tLine.getshape.along(tLine_percent)}})
 
  if (lens) then 
    divp = strix_Line.Along (50)
    strix_Line = PolyLine.Make({{p, divp}})
  end
 
  lens = not lens
 
    gl = GraphicShape.Make(strix_Line)
    aView.GetGraphics.UnselectAll
    gl.SetSelected(TRUE)
    aView.GetGraphics.Add(gl)
end

 

0 голосов
ответил 10 Июль, 03 от ababb (320 баллов)

Спасибо за ответ, но программа не работает.

Андрей

0 голосов
ответил 10 Июль, 03 от ababb (320 баллов)

Прошу прщения, исходные линии должны быть в графике, а как сделать, что бы они брались из шейпа?

Андрей

 

0 голосов
ответил 10 Июль, 03 от Гость (210,080 баллов)

2crocodile: угу... не возражаю :) 

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...