[CDR X5-X8] powerclip макрос

zetrix

Участник
Топикстартер
Сообщения
6
Реакции
0
Макрос делаю впервые, синтаксис не знаю, делаю записью. Много действий записывается, а одну операцию никак. Суть выделить растровое изображение и контур и при помощи powerclip поместить изображение в контур для получения четкой границы.

вот простой код

Dim OrigSelection As ShapeRange
Set OrigSelection = ActiveSelectionRange
OrigSelection(2).AddToPowerClip OrigSelection(2), cdrTrue

на последней строчке застревает.
1634494581461.png
 

zetrix

Участник
Топикстартер
Сообщения
6
Реакции
0
ActiveShape.Shapes(0).Shapes(1).AddToPowerClip ActiveShape.Shapes(0).Shapes(1), cdrTrue

или так

1634494848276.png
 

DukereD

макрософил
Сообщения
459
Реакции
112
ActiveShape.Shapes(0).Shapes(1).AddToPowerClip ActiveShape.Shapes(0).Shapes(1), cdrTrue

или так

Посмотреть вложение 147050
Код:
If ActiveSelectionRange.Shapes.Count = 2 Then ActiveSelectionRange.Shapes.Last.AddToPowerClip ActiveSelectionRange.Shapes.First, cdrTrue

проверяем есть ли 2 объекта выделении и последним выбранным должен быть именно объект - кривая. (форма поверклипа) в него же и засовываем картинку


а у вас в коде вы сам из себя хотите сделать поверклип


вот посмотрите видео. там как раз про переделку записанного макроса.
 
Последнее редактирование:
  • Спасибо
Реакции: zetrix

zetrix

Участник
Топикстартер
Сообщения
6
Реакции
0
спасибо большое. Можно еще один вопросик. Когда Powerclip делаю прям на месте, когда изображение сверху контейнера, то вложение прям как есть получается, а если через макрос с Вашей строчкой, то изображение центруется по центрам изображения и контура, а нужно чтобы powerclip без центровки сработал, так как наложено.
 

DukereD

макрософил
Сообщения
459
Реакции
112
спасибо большое. Можно еще один вопросик. Когда Powerclip делаю прям на месте, когда изображение сверху контейнера, то вложение прям как есть получается, а если через макрос с Вашей строчкой, то изображение центруется по центрам изображения и контура, а нужно чтобы powerclip без центровки сработал, так как наложено.


ну вы хоть сами попробуйте немного поиграться с параметрами.
подсказанное решение забудется через 10 минут. а если сами додумались уж точно не забудется и через месяц.

если последний cdrTrue заменить на cdrFalse (или на ноль) то он не будет подгонять
 
  • Спасибо
Реакции: zetrix

zetrix

Участник
Топикстартер
Сообщения
6
Реакции
0
Спасибо большое. Вникаю, уже пришлось дальше поковыряться самому чтобы добить макрос до финала.

Прошу еще пожалуйста подскажите) . Я честно подписался и посмотрел много Ваших роликов)

Я сделал макрос для выделенной пары картинка поверх границы, ниже макрос отработал и выдал мне границу реза на лазере, растровое изображение картинки с белым фоном и припуском контура 0.3 мм, ниже сам контур растр на печать. Это все хорошо, вроде работает даже пока.

Как сделать чтобы этот макрос применить не к одной выделенной паре границы + картинка, а ко многим таким парам, т.е. если я выделю например 5 пар и макрос в цикле разбил эти пары из общего выделения и обработал каждую?
 

DukereD

макрософил
Сообщения
459
Реакции
112
Спасибо большое. Вникаю, уже пришлось дальше поковыряться самому чтобы добить макрос до финала.

Прошу еще пожалуйста подскажите) . Я честно подписался и посмотрел много Ваших роликов)

Я сделал макрос для выделенной пары картинка поверх границы, ниже макрос отработал и выдал мне границу реза на лазере, растровое изображение картинки с белым фоном и припуском контура 0.3 мм, ниже сам контур растр на печать. Это все хорошо, вроде работает даже пока.

Как сделать чтобы этот макрос применить не к одной выделенной паре границы + картинка, а ко многим таким парам, т.е. если я выделю например 5 пар и макрос в цикле разбил эти пары из общего выделения и обработал каждую?
ну самый простой вариант это пробежаться по объектам ActiveSelectionRange цикломи брать четные вырезать из нечетныхили сначала выделяешь половину - объекты которые резать. затем добавляешь в выделение объекты которыми резать. и попарно обрабатываешь.

но тут нюанс, что они четко должны выделяться в определенном порядке. иначе придется подбирать пару каким-то более сложным алгоритмом.

можно сделать что-то типа автогруппировки. т.е. пробежаться по всем объектам, проверить наложение друг на друга и те которые соприкасаются - положить в группу.
потом выделить все группы и уже их обрабатывать.
пробегаешь
for each s in ActiveselectionRange

и проверяешь
if s.shapes.count>0 then

т.е. смотришь если это группа снова бежишь по группе уже. цикл в цикле
for each ss in s.shapes

по ссылочке можно скачать мою мини панель. там внизу есть кнопка автогруппировки. можно ей сделать группы, а потом своим макросом обработаешь на вырезание (можно и код там глянуть если интересно)
 
Последнее редактирование:

zetrix

Участник
Топикстартер
Сообщения
6
Реакции
0
в corel x6 не находит макрос минипанель. Положил в папку gms, пробовал через пункт загрузить, никак.

1634591706086.png
 

zetrix

Участник
Топикстартер
Сообщения
6
Реакции
0
не понимаю синтаксис визуал, но логично так:

цикл для количества выделенных элементов делить на 2 (т.к. пары)
выполняем макрос для 2 выделения поверх 1 выделения, прибавляем 1 к циклу, следующий будет для 4 на 3 вделении.

Если конечно выделения именно так считаются, а то может как подругому, тогда придется условие если 2 выделение поверх 1 тогда лбработка.
 

DukereD

макрософил
Сообщения
459
Реакции
112
в corel x6 не находит макрос минипанель. Положил в папку gms, пробовал через пункт загрузить, никак.

Посмотреть вложение 147060
ох.. а что ж такой древний корел-то.. ниже x7 эта панелька не пойдет. а лучше 2018

вот мой макрос который берет одну половину объектов и перемещает их на вторую половину
посмотрите может разберетесь в коде )

Код:
Sub Raskidka()
    Dim os  As Shapes
    Dim s As Shape
    
    Set doc = ActiveDocument
    doc.BeginCommandGroup "Raskidka"
    Set os = ActiveSelection.Shapes
    allcnt = os.Count
    half = allcnt / 2
    cnt = 0
    For Each s In os
        cnt = cnt + 1
        If cnt <= half Then
            If ch_raskid_revers Then
                s.Move os(half + cnt).PositionX - s.PositionX, os(half + cnt).PositionY - s.PositionY
            Else
                os(half + cnt).Move s.PositionX - os(half + cnt).PositionX, s.PositionY - os(half + cnt).PositionY
            End If
        End If
    Next s
    doc.EndCommandGroup
End Sub