[CDR 2017-2021] Эффект Упрощение с помощью макроса.

suntory

Administrator
15 лет на форуме
Сообщения
23 349
Реакции
12 401
Даже пытаться не буду
Это не конкретно про вас :)
чтобы получить совет и подсказку и сделать самостоятельно
Ваше право, просто не обращайте внимания, такие "полезные" советы неизбежны, поэтому в том разделе и закрыты комментарии.
 

suntory

Administrator
15 лет на форуме
Сообщения
23 349
Реакции
12 401
Пойти заказать кому-то вместо того, чтобы сделать самому, потому что вопрос не понравился и лень или вообще неинтересно дальше помогать, в данном случае.
 

garvey

Участник
Сообщения
142
Реакции
44
Я, простите, не большой "макросодел", еще по Адобовским "Action" туда-сюда, но!
Неужели "двоечку"
"SelectAll
Simplify"
Так трудно запрограммировать макросами?
 

garvey

Участник
Сообщения
142
Реакции
44
Даже пытаться не буду. Я создал тему в автоматизации, чтобы получить совет и подсказку и сделать самостоятельно.
Как правило, если "подскажите" не работает, то "научите как" – задача более сложная, чем "сделайте"

Не по теме:

А если что-то надо объяснять,
То ничего не надо объяснять.
А если всё же стоит объяснить,
То ничего не стоит объяснить.
(с) М.Щербаков

 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835

DukereD

макрософил
Сообщения
459
Реакции
111
пробегаемся по элементам смотрим кто с кем стыкуется тупо по "квадрату" выделения. и потом пошел по очереди по списку пары между собой тримить. ) в целом прикольный алгоритм надо будет себе такую кнопочку забабахать в панель ) нечто подобное у меня уже есть для вырезания дырок в макетах от горе-полиграфистов, которые любят отверстия делать белыми объектами сверху )). но упрощение каждого с каждым думаю тож прикольная штука.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Да делали когда то такое, по моему, как бы не Санчес?
 

lev

Модератор
20 лет на форуме
Сообщения
2 142
Реакции
2 066
Application.FrameWork.Automation.Invoke "7da36c72-627c-4782-b51a-01718a43551b" 'Simpify
 
  • Спасибо
Реакции: mnemonix, DukereD и tohaa

tohaa

Участник
Топикстартер
Сообщения
229
Реакции
8
Application.FrameWork.Automation.Invoke "7da36c72-627c-4782-b51a-01718a43551b" 'Simpify
Вот это дело! Но есть Нюанс. Объекты упрощать всеже нужно попарно, т.к. корел очень часто лепит какую-то чушь при упрощении нескольких объектов одновременно.
 

DukereD

макрософил
Сообщения
459
Реакции
111

tohaa

Участник
Топикстартер
Сообщения
229
Реакции
8
а чем этот Invoke отличается от s.Trim(s2, true, true)
тоже самое попарно перебрать и он упростит.
Код:
Sub RIs()
    Dim sr As ShapeRange
    Dim peresech As shape
    Dim i As Integer, j As Integer

    
    Set sr = ActiveSelectionRange
    
  
    For i = 1 To sr.Count - 1
        For j = i + 1 To sr.Count
            Set peresech = sr(i).intersect(sr(j))
            
            
            If Not peresech Is Nothing Then
                Application.FrameWork.Automation.Invoke "7da36c72-627c-4782-b51a-01718a43551b" 'Simpify
            End If
            
            Set peresech = Nothing
        Next j
    Next i
    
    Set sr = Nothing
End Sub

Помогите что я делаю не так? нахожу пересечение. если оно есть пытаюсь упростить.
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 131
Реакции
2 027
внимательно смотрите за руками ...
вот вы сделали Set peresech = sr(i).intersect(sr(j))
ваше пересечение стало активным - выделилось
сколько потом его не упрощай - проще оно не станет. Нет?
Вы же хотите sr упростить? Это раз.
А во-вторых - полученный intersect никуда не делся. Его надо трансклюкировать.

вот- подкрашенное - испытайте


Код:
Sub RIs()
    Dim sr As ShapeRange
    Dim peresech As Shape
    Dim i As Integer, j As Integer

    
    Set sr = ActiveSelectionRange
    
 
    For i = 1 To sr.Count - 1
        For j = i + 1 To sr.Count
            Set peresech = sr(i).Intersect(sr(j))
            
            
            If Not peresech Is Nothing Then
            sr.CreateSelection
                Application.FrameWork.Automation.Invoke "7da36c72-627c-4782-b51a-01718a43551b" 'Simpify
            End If
            peresech.Delete
'            Set peresech = Nothing
        Next j
    Next i
    
'    Set sr = Nothing
End Sub
 
  • Спасибо
Реакции: mnemonix и tohaa

tohaa

Участник
Топикстартер
Сообщения
229
Реакции
8
внимательно смотрите за руками ...
вот вы сделали Set peresech = sr(i).intersect(sr(j))
ваше пересечение стало активным - выделилось
сколько потом его не упрощай - проще оно не станет. Нет?
Вы же хотите sr упростить? Это раз.
А во-вторых - полученный intersect никуда не делся. Его надо трансклюкировать.

вот- подкрашенное - испытайте


Код:
Sub RIs()
    Dim sr As ShapeRange
    Dim peresech As Shape
    Dim i As Integer, j As Integer

   
    Set sr = ActiveSelectionRange
   
 
    For i = 1 To sr.Count - 1
        For j = i + 1 To sr.Count
            Set peresech = sr(i).Intersect(sr(j))
           
           
            If Not peresech Is Nothing Then
            sr.CreateSelection
                Application.FrameWork.Automation.Invoke "7da36c72-627c-4782-b51a-01718a43551b" 'Simpify
            End If
            peresech.Delete
'            Set peresech = Nothing
        Next j
    Next i
   
'    Set sr = Nothing
End Sub
Ну надо же! забыл про выделение! спасибо
 

tohaa

Участник
Топикстартер
Сообщения
229
Реакции
8
1685189063719.png
Работает только с простыми объектами. Как только попадается кривая сложнее или например текст в кривых - сбой(
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 131
Реакции
2 027
не ... так лучше, но работает не до конца
и peresech.Delete даёт ошибку
вернем Set peresech = Nothing
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 131
Реакции
2 027
и с простыми объектами выходит винегрет
1685189387118.png