[CDR 2017-2021] Копирование всех свойств PowerClip

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
Всем привет.

Темка такая. Есть у меня объект поверклип. и есть обычная кривая. так вот как мне в пару строк всё содержимое из одного поверклипа запихнуть в этот объект (а если этот объект уже поверклип и что-то содержит его надо очистить)

Пробовал так делать, то при дубликате объекты остаются внутри исходного объекта
Код:
                Set all = baza.PowerClip.Shapes.all
                all.Duplicate

пробовал через copy-paste работает норм, но выкидывает ошибку если "тяжелый" объект (растр и т.п)

Очищаю поверклип так
Код:
                        Set d = ins.PowerClip.ExtractShapes
                        d.Delete

В общем суть такая. Есть образец нужно сделать почти копию только по форме другого объекта.
Может вообще проще продублировать образец и заменить ему внешний шейп? Так можно?

Спасиюо заранее )
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Можно и думаю, что нужно
 

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
Можно и думаю, что нужно
что-то не очень получается (((

Код:
Set dup = ActivePage.Shapes(a + "_XS").Duplicate
Set curv = ActivePage.Shapes(a + "_L").Curve

dup.Curve.CopyAssign curv

не хочет внешнюю курву заменять (
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А вы точно уверены что пытаетесь через dup.Curve.CopyAssign менять именно обтравочную кривую?
Попробуйте уже существующую обтравочную кривую понодово перестроить
 
  • Спасибо
Реакции: DukereD

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
А вы точно уверены что пытаетесь через dup.Curve.CopyAssign менять именно обтравочную кривую?
Попробуйте уже существующую обтравочную кривую понодово перестроить
думаю, что уверен в курве лежит внешняя кривая, а внутренности лежат в powerclip

по узлам это жестоко )
кривые немного разные.
через
crv.CreateSubPath(lix, Lst).AppendLineSegment lix, en
примерно такой код пробегаться по новой кривой, создать новый объект(переменную). и потом её ассигнуть?
а в чем разница то для корела. по идее не должно быть
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
по узлам это жестоко
Не пойму что плохого, вы ж не руками кривую пересоздаете, а умный железный компьютер в цикле меняет узлы
Вдобавок это я самый крайний извращенный вариант написал, честно говоря, не пойму чем вас не устраивает прямой - вытащить все объекты из существующего паверклипа и вставить в новый через AddToPowerClip?
Уж это то должно гаранированно работать так же как и первый более заднепроходный вариант
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Я не знаю, что у вас там за объекты, но, в порядке постукивания по шине все ж посмотрите в отладчике, что у вас в dup.Curve - возможно, там ничего не было и нету? К примеру, клип - прямоугольник или эллипс.
И вообще мне этот способ кажется сомнительным, примерно как операция на живом пациенте без наркоза
 

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
Я не знаю, что у вас там за объекты, но, в порядке постукивания по шине все ж посмотрите в отладчике, что у вас в dup.Curve - возможно, там ничего не было и нету? К примеру, клип - прямоугольник или эллипс.
И вообще мне этот способ кажется сомнительным, примерно как операция на живом пациенте без наркоза
Да не.. всё там верно и объекты какие надо где надо. Написал рабочий код НО...
Код:
dup.SizeWidth = curv.SizeWidth
dup.SizeHeight = curv.SizeHeight
dup.PositionX = curv.PositionX
dup.PositionY = curv.PositionY

dup.Curve.CopyAssign curv.Curve

вот так вот работает, а если поставить строку
Код:
dup.Curve.CopyAssign curv.Curve
перед применением размеров (и даже перед перемещением позиции)
то он пустой объект делает без содержимого.
а вот в такой последовательности, как я написал выше - работает вроде норм.
 

_MBK_

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

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
И еще немного поковырялся. Изменение размеров не важно. а вот позиционирование - да. Сначала позиционируем - потом Ассигн. тогда работает.
в общем рабочий код получился вот такой.

Код:
Set dup = baza.Duplicate

dup.SizeHeight = dup.SizeHeight * (curv.SizeWidth / dup.SizeWidth)
dup.SizeWidth = curv.SizeWidth
dup.PositionX = curv.PositionX
dup.PositionY = curv.PositionY

dup.Curve.CopyAssign curv.Curve

dup.OrderBackOf curv
curv.Delete
 

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
И еще немного поковырялся. Изменение размеров не важно. а вот позиционирование - да. Сначала позиционируем - потом Ассигн. тогда работает.
в общем рабочий код получился вот такой.
На самом деле, это все логически малообъяснимо и напоминает шаманство, а все шаманские костыли чреваты багами в неожиданных местах.
К примеру, почему кривая в неправильной позиции не годится для поверклипа? Единственное логичное объяснение - она должна пересекаться с маскируемыми объектами, не так ли? Но в этом случае, вовсе не любая кривая, помещенная в нужную позицию будет годиться для поверклипа, я б на вашем месте потестировал бы такие вещи поподробнее.
Вдобавок отчего такая железная уверенность, что исходный клип - именно кривая, а не круг, прямоугольник или прочий нативный объект? Как правило, наоборот.
 
  • Спасибо
Реакции: DukereD

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
На самом деле, это все логически малообъяснимо и напоминает шаманство, а все шаманские костыли чреваты багами в неожиданных местах.
К примеру, почему кривая в неправильной позиции не годится для поверклипа? Единственное логичное объяснение - она должна пересекаться с маскируемыми объектами, не так ли? Но в этом случае, вовсе не любая кривая, помещенная в нужную позицию будет годиться для поверклипа, я б на вашем месте потестировал бы такие вещи поподробнее.
Вдобавок отчего такая железная уверенность, что исходный клип - именно кривая, а не круг, прямоугольник или прочий нативный объект? Как правило, наоборот.
Да. согласен. поведение странное весьма - обязательно буду отслеживать это.
Собственно поэтому и написал вопрос, что вчера на ночь глядя мутил а оно не мутилось. а сегодня с небольшого пинка и на свежую голову разобрался )

Ну кривая именно кривая в моем случае потому что объекты весьма специфические в данном макросе.
Но на крайний случай согласен - можно использовать DisplayCurve в качестве образца обводки, но в данном случае можно этим пренебречь )
 

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
В целом вопрос был прост и наверное тему можно даже закрыть )
Вот еще попутно маленький вопросец только.
Где можно почитать или послушать про объектную модель корела?
А то только через долгое чтение мануалов получается всё это постигать.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Но на крайний случай согласен - можно использовать DisplayCurve в качестве образца обводки
Ну разве что посмотреть, что именно там находится. Назначить туда свою кривую однозначно нельзя.
Но, повторяю, вы не ищете прямых правильных путей, ведь есть же еще, как это грустно звучит, cпециальное свойство PowerClip в котором и сидит прямой список шейпов, образующих клип.
Где можно почитать или послушать про объектную модель корела?
Alt-F11 - F1
Или выделяете объект и в Watch его - все по полочкам, что и где
 

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
Ну разве что посмотреть, что именно там находится. Назначить туда свою кривую однозначно нельзя.
Но, повторяю, вы не ищете прямых правильных путей, ведь есть же еще, как это грустно звучит, cпециальное свойство PowerClip в котором и сидит прямой список шейпов, образующих клип.
ок. прямой способ ну. дял моих задач такой способ вполне. там исходник и цель почти одинаковые шейпы.
а как правильно взять именно все шейпы? прямым присваиванием?

Alt-F11 - F1
Или выделяете объект и в Watch его - все по полочкам, что и где
нуу.. этот способ я уж не один десяток лет использую )
хочется умных людей послушать, понять принципы и правильную логику, чтобы не делать вот таких костылей. )))
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
а как правильно взять именно все шейпы?
В смысле - так просто взять и поменять?
вставить в новый через AddToPowerClip
остальное - шаманство.
правильную логику
разумеют только разработчики-индоканадцы, понять и постичь ее без применения запрещенных госнаркоконтролем веществ нереально.
 

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
В смысле - так просто взять и поменять?
хм.. скопом не получилось.. можэет попробовать пробегаться по исходному поверклипу и поочереди все шейпы перекинуть из одного в другой.. хм... надо поробовать. а я то хотел всё сразу или копированием или дубликатом shapes.all
остальное - шаманство.

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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
С точки зрения логики некурящего человека тоже - если они запилили прямой метод помещения в поверклип, то зачем пытаться лезть напрямую через его голову? Кажущееся упрощение вовсе не означает в этом случае более быстрый и правильный способ. Вдобавок, как вы обратили внимание, поверклип и (Dispalay)Curve объекта - вовсе не одно и тоже, более того, даже тип у них разный - в первом случае Curve а во втором - коллекция шейпов
Это я к вопросу
понять принципы и правильную логику, чтобы не делать вот таких костылей.
 
  • Спасибо
Реакции: DukereD

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
С точки зрения логики некурящего человека тоже - если они запилили прямой метод помещения в поверклип, то зачем пытаться лезть напрямую через его голову? Кажущееся упрощение вовсе не означает в этом случае более быстрый и правильный способ. Вдобавок, как вы обратили внимание, поверклип и (Dispalay)Curve объекта - вовсе не одно и тоже, более того, даже тип у них разный - в первом случае Curve а во втором - коллекция шейпов
Это я к вопросу
добавление то сделали.. а удаление через Ж. все объекты просто вываливаются в текущий слой и всё.. благо удалить их можно особо безболезненно. нет чтобы с параметром удалять или оставлять функцию экстракта сделать...