Присваивание легенды группе тем

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

Не встречал ли кто-нить такую утилиту, присваивающую группе тем одинаковую легенду (имеется в виду одиночный символ)?

13 Ответы

0 голосов
ответил 25 Март, 05 от Vasiliy2 (8,240 баллов)
;Присваивание сохраненной легенды темам ,выбранным из списка
 
'-----------------------------------------------------------------------------------
' GET THE VIEW AND THE THEMES
 
theView = av.GetActiveDoc
 
if (theView.is(View).not) then
  msgBox.Info("Activate a View before running this Script","")
  return NIL
end
 
theThemes = theView.GetThemes
theActThemes = theView.GetActiveThemes.clone
 
'-----------------------------------------------------------------------------------
' LET'S CLONE THE LIST
 
theThmList = theThemes.clone
 
'-----------------------------------------------------------------------------------
' IF THE USER'S PLAYING UP; SHOW HER
 
if (theThmList.Count = 0) then
  theThmList.Add("Ну_ты_блин_даешь.shp")
  Msgbox.MultiListAsString(theThmList,"Select the Themes to load a Legend... "," Load LEGEND")
  return NIL
end
 
'-----------------------------------------------------------------------------------
' ASK THE USER WHICH THEMES
 
theView.getDisplay.flush
 
selList = Msgbox.MultiList(theThmList,"Select the Themes to load a Legend:   (PS: Click OK without Selection to sort this "+
                                      "List by Theme Type)"," LOAD LEGEND FOR")
 
'-----------------------------------------------------------------------------------
' CHECK TO SEE IF SOME WHERE SELECTED, BAIL IF NOT AND USER CANCELS, PREPARE FOR A
' NEW LIST IN ORDER OF THEME-TYPE - IF NOTHING WAS SELECTED AND USER CLICKS OK:
 
if (selList = NIL) then
  av.ShowMsg("  BREAKUP: Load Legend ...")
  return NIL
elseif (selList.Count = 0) then
  sortByType = TRUE
else
  sortByType = FALSE 
end
 
'-----------------------------------------------------------------------------------
 
if (sortByType = FALSE) then
 
  '-----------------------------------------------------------------------------------
  ' ASK THE USER WHICH LEGEND TO TAKE
 
  theLegendFile = FileDialog.Show ("*.avl", "ArcView Legend (*.avl)", "Choose a legend file:")
 
  if (theLegendFile = nil) then
    av.ShowMsg("   BREAKUP: Load Legend ...")
    return NIL
  end
 
  i = 0
  theCF = nl+"Can not find Classification Field : "+nl+nl
  theCFC = 0
  theTF = nl+"Legend improper for : "+nl+nl
  theTFC = 0
 
  '-----------------------------------------------------------------------------------
  ' ASSIGN THE LEGEND, CHECK FOR SOME ERRORS
 
  for Each thm in selList
    theCurLegCl = thm.GetLegend.clone
    theCurLeg = thm.GetLegend
    if (thm.GetClass.GetClassName = "STheme") then
      theTF = theTF +"   '"+thm.getName+"'"+nl
      theTFC = theTFC + 1
      continue
    elseif (thm.is(ITheme)) then
      theTF = theTF +"   '"+thm.getName+"'"+nl
      theTFC = theTFC + 1
      continue
    end   
   
    theLegLo = theCurLeg.Load(theLegendFile, #LEGEND_LOADTYPE_ALL)
 
   
    if (theLegLo = TRUE) then
      i = i + 1
    else
      theTF = theTF +"   '"+thm.getName+"'"+nl
      theTFC = theTFC + 1
      continue
    end
   
    theNuLeg = thm.GetLegend
   
    if ((theNuLeg.getLegendType = #LEGEND_TYPE_SIMPLE) and (thm.GetClass.GetClassName = "GTheme")) then
      thm.setLegend(theCurLegCl)
      theTF = theTF +"   '"+thm.getName+nl
      theTFC = theTFC + 1
      i = i - 1
      continue
    end
 
    if ((theNuLeg.getLegendType <> #LEGEND_TYPE_SIMPLE) or (theNuLeg.getlegendtype <> #LEGEND_TYPE_DOT)) then
      theFldNames = theNuLeg.GetFieldNames
      for each Nm in theFldNames
        if (thm.is(Ftheme)) then
          theFTab = thm.getFTab
          if ((theFTab.FindField(Nm) = NIL)) then
            thm.setLegend(theCurLegCl)
            theCF = theCF + "   Field  '"+Nm.asString+"'  misses in  '"+thm.getName+"'"+nl
            theCFC = theCFC + 1
            i = i - 1
          end
        elseif ((thm.GetClass.GetClassName = "GTheme") and (thm.hasTable)) then
          theVTab = thm.getVTab
          if ((theVTab.FindField(Nm) = NIL)) then
            thm.setLegend(theCurLegCl)
            theCF = theCF + "   Field  '"+Nm.asString+"'  misses in  '"+thm.getName+"'"+nl
            theCFC = theCFC + 1
            i = i - 1
          end
        elseif ((thm.GetClass.GetClassName = "GTheme") and (thm.hasTable).not) then
          if (Nm.AsString <> "Value") then
            thm.setLegend(theCurLegCl)
            theCF = theCF + "   Field  '"+Nm.asString+"'  misses in  '"+thm.getNa
0 голосов
ответил 25 Март, 05 от Гость (210,080 баллов)
Василий, огромное спасибо за скрипт!
0 голосов
ответил 25 Март, 05 от Гость (210,080 баллов)

Чтобы не создавать отдельной темы - задам свой вопрос в этой.

Никому не приходилось в компоновке изображение вида поворачивать под определенным градусом? Чтобы ориентация была не на север? Пробовал экспортировать в wmf и поворачивать в Кореле, но там шрифты и значки не совсем корректно экспортируются.

0 голосов
ответил 25 Март, 05 от Vasiliy2 (8,240 баллов)
в Compiled Layout Tools
есть View Frame Cropper  (и доступны скрипты) которые превращают в компоновке вид в объекты графики и поворачивают группу этих объктов на любой угол
0 голосов
ответил 29 Март, 05 от Гость (210,080 баллов)

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

0 голосов
ответил 29 Март, 05 от BigSerg (4,080 баллов)
Для передачи в Corel попробуй использовать формат POST script - отобразит все корректно - единственно все надписи будут линиями а не текстом
0 голосов
ответил 29 Март, 05 от Гость (210,080 баллов)

У нас плоттер из постскрипта не печатает, нету соответствующего девайса. Как выход - использовали Нежинские утилиты 3 для экспорта в BMP (400 dpi). Однако размер у них неслабый получается...

0 голосов
ответил 29 Март, 05 от BigSerg (4,080 баллов)
ну дык, а что тебе мешает из корела во все что угодно(после разворота есс-но) - вплоть до вмф экспортнуть
- уж свой то вмф он будет всегда понимать
да и весят они (так как вектор) не очень много
0 голосов
ответил 30 Март, 05 от Гость (210,080 баллов)

После операции: экспорт в BMP (400dpi) - поворот в Кореле - экспорт в WMF получился файл который в два раза больше бмпэшного:) 

Еще заметил, что при импорте бмпэшной компоновки в корел теряется масштаб. Конечно, при желании его можно подогнать, да и операции по развороту проводим достаточно редко. Поэтому, пока позволяют аппаратные средства будем поворачивать в Кореле (хотя эти выкрутасы с экспортом-импортом достаточно утомительны) 

0 голосов
ответил 31 Март, 05 от Ilya (10,800 баллов)
Переводи в PostScript (EPS) и потом открывай в Corel, только не импортом, а командой "Открыть". Попробуй, понравится.... :)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...