Hi Serge!
В такую жару разбираться в твоем скрипте как-то неохота, вот для примера можешь глянуть мой. Там создается палитра линейных символов вроде надвига. Потом ее можно открыть стандартными методами и покрасить любую линейную тему. И вроде-бы ничего не рушится (пока).
Успехов.
Сергей.
Для всех, кто будет делать свое: имейте ввиду, что определяющим размером в составном символе является размер первого символа списка. Поэтому на первое место в команде SymbolList.FromList({b1,vpm2}) нужно ставить размер базовой линии. Тогда размеры вашего символа будут приемлемыми (2-3-5). Если вы поставите вперед vpm2, то для получения заданного размера придется в данном случае в окне Палитры набрать 25, а у кого из пользователей хватит на это воображения?
'СВП-создание линий надвигов
'Создать асимметричные маркеры треугольников
mrk1 = BasicMarker.Make
mrk1.SetStyle(#BASICMARKER_STYLE_PATTERN)
mrk1.SetFont(Font.Make("ESRI Geology","Normal"))
mrk1.SetCharacter(40) 'угол вверх
vpm1 = VectorPenMarker.Make(mrk1)
vpm1.SetTemplate("13") '13
vpm1.SetInterval(1)
vpm1.SetMarkLayer(0,0.4)
vpm1.SetSize(25)
'vpm1.SetColor(Color.GetMagenta) 'SetRgbList(213,255,255)
' Создать сплошную линию
b1 = BasicPen.Make
b1.SetSize(3)
'b1.SetColor(Color.GetMagenta) 'можно и покрасить
mrk2 = BasicMarker.Make
mrk2.SetStyle(#BASICMARKER_STYLE_PATTERN)
mrk2.SetFont(Font.Make("ESRI Geology","Normal"))
mrk2.SetCharacter(52) 'полукруг
vpm2 = VectorPenMarker.Make(mrk2)
vpm2.SetTemplate("011") '"011313131313131"
vpm2.SetInterval(1)
vpm2.SetMarkLayer(0,0.3) 'для Х-а натуральная дурь
vpm2.SetSize(25)
'vpm2.SetColor(Color.GetMagenta)
'** Создать составные символы
aSymList = SymbolList.FromList({b1,vpm1})
CAIP1 = CompositeArcInfoPen.Make(aSymList)
aSymList = SymbolList.FromList({b1,vpm2})
CAIP2 = CompositeArcInfoPen.Make(aSymList)
aSymList = SymbolList.FromList({b1,vpm1,vpm2})
CAIP3= CompositeArcInfoPen.Make(aSymList)
'** Добавить символы к палитре линий
av.GetSymbolWin.Open
av.GetSymbolWin.SetPanel(#SYMBOLWIN_PANEL_PEN)
p = av.GetSymbolWin.GetPalette
pl = p.GetList(#PALETTE_LIST_PEN)
pl.Add(CAIP1)
pl.Add(CAIP2)
pl.Add(CAIP3)
av.GetSymbolwin.RefreshPalette(#PALETTE_LIST_PEN)
'** Создайте новую палитру и получите ее список линий
pal = Palette.Make
pens = pal.GetList(#PALETTE_LIST_PEN)
'** Добавьте символы в список линий новой палитры
pens.Add(CAIP1)
pens.Add(CAIP2)
pens.Add(CAIP3)
'** Сохраните новую палитру в файловой системе для последующего использования
'здесь нужно прописать свой путь или вставить окно запроса.
mypal = "d:/scriptest/Linestyles/tecline44.avp".AsFileName
pal.SaveToFile(#PALETTE_LIST_PEN,mypal)