[CDR 2017-2021] инструмент "ПОИСК": найти пунктирные кривые

trimers

Участник
Топикстартер
Сообщения
10
Реакции
0
Доброго времени суток!
Есть файл с большим количеством кривых одного цвета и толщины отличающиеся только стилем линий (сплошные, пунктирные и шрихпунктирные). Нужно найти только пунктирные линии и поменять им стиль на сплошной. Стандартный ПОИСК, увы, выделяет все линии. Все макросы, которые я находил в инете выбирают только по цвету. Можно ли это сделать автоматически?
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 145
Реакции
2 043
Можно ли это сделать автоматически
надо делать запрос на СТИЛЬ аутлайна, если аутлайн есть и если он не сплошной - то сделать его таковым
например
Код:
Sub Test10()
  Dim s As Shape
  For Each s In ActivePage.Shapes
    If s.Outline.Type = cdrOutline Then
      If s.Outline.Style.Index <> 0 Then
        s.Outline.Style = OutlineStyles(0)
      End If
    End If
  Next s
End Sub
 
  • Спасибо
Реакции: trimers

lev

Модератор
20 лет на форуме
Сообщения
2 146
Реакции
2 071
То же самое одной строкой, в клипы не залезает, как и предыдущий:
Код:
Sub NoDotDash()
  ActivePage.Shapes.FindShapes(Query:="@outline[.type = 'dot-dash']").SetOutlineProperties , OutlineStyles(0)
End Sub
 
  • Спасибо
Реакции: trimers и dastin

trimers

Участник
Топикстартер
Сообщения
10
Реакции
0
надо делать запрос на СТИЛЬ аутлайна, если аутлайн есть и если он не сплошной - то сделать его таковым
например
Код:
Sub Test10()
  Dim s As Shape
  For Each s In ActivePage.Shapes
    If s.Outline.Type = cdrOutline Then
      If s.Outline.Style.Index <> 0 Then
        s.Outline.Style = OutlineStyles(0)
      End If
    End If
  Next s
End Sub

СПАСИБО!!!
С пунктирными линиями справляется на отлично!
А со шрихпунктиными не работает :(. Точнее если If s.Outline.Style.Index = 0 то меняет и сплошные и штрихпунктирные
Вопрос как запросить значение стиля аутлайна
 

trimers

Участник
Топикстартер
Сообщения
10
Реакции
0
как обычно, не полное ТЗ :). Есть pdf-файл с выкройками. Файл импортируется в корел. Для дальнейшей вырезки на плоттере нужно каждому типу линий присвоить отдельный цвет и сделать линии сплошными. :(
как поменять цвет я сообразил: s.Outline.Color = CreateCMYKColor(100, 0, 100, 0). Файл
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 145
Реакции
2 043
Вопрос как запросить значение стиля аутлайна


Запросить можно
Код:
    If s.Outline.Type = cdrOutline Then
      i =  s.Outline.Style.Index
      MsgBox i
    End If
получите что-нибудь из диапазона - 0( сплошной) и далее вниз 1, 2, 3 ... до 28 ( можно ещё создавать и сохранять свои)
119595

Что вам это даст? Это просто число ...
 

eugeny

15 лет на форуме
Сообщения
859
Реакции
210
Запросить можно
Код:
    If s.Outline.Type = cdrOutline Then
      i =  s.Outline.Style.Index
      MsgBox i
    End If
получите что-нибудь из диапазона - 0( сплошной) и далее вниз 1, 2, 3 ... до 28 ( можно ещё создавать и сохранять свои)

Что вам это даст? Это просто число ...
Нужно придумать алгоритм создания нового цвета, типа:
Код:
If s.Outline.Style.Index <> 0 Then
' здесь придумать функцию алгоритм формирования цвета
newcolr=functionNewColorArray(s.Outline.Style.Index)

       s.Outline.Color = CreateCMYKColor(newcolr(0), newcolr(1), newcolr(2), newcolr(3))
        s.Outline.Style = OutlineStyles(0)
      End If
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 145
Реакции
2 043
Есть pdf-файл с выкройками. Файл импортируется в корел.
не факт, что каждую такую линию Corel примет как родную ... это же его единоутробные стили ...
каждый имеет вполне определенные параметры - типа ...
.Style.DashCount = 2
.Style.DashLength(1) = 1
.Style.DashLength(2) = 10
.Style.GapLength(1) = 4
.Style.GapLength(2) = 4
а что там из ПДФ прилетит - да кто же его знает - возможно будет группа из кривых или комбинированная кривая со стилем 0 - Corel даже здороваться к ней не подойдёт
 
Последнее редактирование:

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 145
Реакции
2 043
Вот они визуально эти параметры
119596


а вот что из пдф может быть
119597
 

trimers

Участник
Топикстартер
Сообщения
10
Реакции
0
Запросить можно
Код:
    If s.Outline.Type = cdrOutline Then
      i =  s.Outline.Style.Index
      MsgBox i
    End If
получите что-нибудь из диапазона - 0( сплошной) и далее вниз 1, 2, 3 ... до 28 ( можно ещё создавать и сохранять свои)

Вылетает с ошибкой Run-time error '424'
119598
 

trimers

Участник
Топикстартер
Сообщения
10
Реакции
0
не факт, что каждую такую линию Corel примет как родную ... это же его единоутробные стили ...
каждый имеет вполне определенные параметры - типа ...
.Style.DashCount = 2
.Style.DashLength(1) = 1
.Style.DashLength(2) = 10
.Style.GapLength(1) = 4
.Style.GapLength(2) = 4
а что там из ПДФ прилетит - да кто же его знает - возможно будет группа из кривых или комбинированная кривая со стилем 0 - Corel даже здороваться к ней не подойдёт
Похоже Вы правы
 

eugeny

15 лет на форуме
Сообщения
859
Реакции
210
Если файл изначальный в pdf, то его надо и обработать в Illustrator. Определить параметры каждого Dash и перекрасить.
 

trimers

Участник
Топикстартер
Сообщения
10
Реакции
0
Вот они визуально эти параметры
Посмотреть вложение 119596

а вот что из пдф может быть
Посмотреть вложение 119597
да, бывает и так, что каждый штрих передается как отдельный прямоугольник с заливкой, но в моем случае это кривые с со стилем линии. И, мне кажется, нужно выяснить средствами VBA эта линия отличается от сплошной и выбрать остальные с такими же параметрами
 

eugeny

15 лет на форуме
Сообщения
859
Реакции
210
Увы, Illustrator я не знаю
Получается надо перебрать все линии на параметры dash и занести данные в массивы.
Типа так:
создаются два массива: массив параметров и массив линий.
Берете параметры dash записываете их в строку, типа
.Style.DashCount & "-" & .Style.DashLength(1) & "-" & .Style.DashLength(2) . и .т.д
сравниваете с массивом параметров, если есть похожая строка, то узнаете ее индекс и добавляете ссылку с индексом в массив линий, типа Array(sh, index)
Если нет в массиве параметров строки, то добавляете ее в этот массив и запоминаете индекс. Потом тоже самое: добавляете ссылку с индексом в массив линий, типа Array(sh, index).
В результате у вас будут два массива. Вас интересует второй. В нем каждый элемент отдельный массив, в котором первый элемент ссылка на объект линию, а второй индекс.
Перебираете массив и по индексу меняете цвет и тип линии. Количество индексов -- это размер первого массива, столько цветов вам надо назначить.
 

trimers

Участник
Топикстартер
Сообщения
10
Реакции
0
Получается надо перебрать все линии на параметры dash и занести данные в массивы.
Типа так:
создаются два массива: массив параметров и массив линий.
Берете параметры dash записываете их в строку, типа
.Style.DashCount & "-" & .Style.DashLength(1) & "-" & .Style.DashLength(2) . и .т.д
сравниваете с массивом параметров, если есть похожая строка, то узнаете ее индекс и добавляете ссылку с индексом в массив линий, типа Array(sh, index)
Если нет в массиве параметров строки, то добавляете ее в этот массив и запоминаете индекс. Потом тоже самое: добавляете ссылку с индексом в массив линий, типа Array(sh, index).
В результате у вас будут два массива. Вас интересует второй. В нем каждый элемент отдельный массив, в котором первый элемент ссылка на объект линию, а второй индекс.
Перебираете массив и по индексу меняете цвет и тип линии. Количество индексов -- это размер первого массива, столько цветов вам надо назначить.
Наверное я не совсем точно выразился. в файле есть сплошные, пунктирные и шрих-пунктирные линии. Нужно сначала выбрать все пунктирные линии , назначить им цвет красный и поменять тип линии на сплошной. Потом выбрать все штрих-пунктирные линии , назначить им цвет зеленый и поменять тип линии на сплошной.
Вариант предложенный dastin идеально работает, но только для пунктирных
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 145
Реакции
2 043
но только для пунктирных
можно пример в студию - кореловский файл запакованный в архив - загрузить сюда и ссылку в ветку
- с пунктирными и штрих-пунктирными линиями - весь макет не надо ... наверное :)
- только примеры ?
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 145
Реакции
2 043
можно найти все сплошные - покрасить - сгруппировать - заблокировать
потом пунктирные - тоже покрасить - сгруппировать - заблокировать
останутся - штрих-пунктирные :)
 

trimers

Участник
Топикстартер
Сообщения
10
Реакции
0
можно пример в студию - кореловский файл запакованный в архив - загрузить сюда и ссылку в ветку
- с пунктирными и штрих-пунктирными линиями - весь макет не надо ... наверное :)
- только примеры ?
конечно!!! я уже прикреплял архив но не выделил его
 
Последнее редактирование: