[CDR X5-X8] Отрисовка элемента в фигуре

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
Всем доброго дня. Я здесь новичок, но по форуму как я вижу есть опытные люди. У меня вопрос как макросом сделать чтобы:
1. Выделил например группу прямоугольников
2. Макрос нарисовал в них круг или несколько кругов с определённым отступом от краев.
Рисовать макросом я научился но не получается в фигуре только на активном слое рисует. Подскажите как правильно написать код. Спасибо.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Я не совсем понял смысл противопоставления "в фигуре"/"на активном слое"? Фигуры не на активном слое? Или вам вписать круг в прямоугольник надо как в поверклип? Или в группу? Или просто дополнительным контуром в шейп?
 

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
Я не совсем понял смысл противопоставления "в фигуре"/"на активном слое"? Фигуры не на активном слое? Или вам вписать круг в прямоугольник надо как в поверклип? Или в группу? Или просто дополнительным контуром в шейп?
На слое есть прямоугольник и макрос в нем или в группе прямоугольников не зависимо от их размера должен рисовать окружности на определённом отступе. Просто я макросом делаю Activelayer при этом слой выбирается и рисуется на слое а не внутри прямоугольника на этом слое. А как сделать чтобы прямоугольник был активен. Как то так.
 

_MBK_

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

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
Ваше объяснение на самом деле ничего не объяснило, а только больше запутало.
Прямоугольник - это объект на активном слое - так? Вы создаете объект тоже на активном слое - ведь так и надо?
Вас просто координаты окружности не устраивают или как? Зачем вам

%8
Пардон что запутал. Да вы правы рисую прямоугольник - это объект на активном слое, а после этого в этом же прямоугольнике нужно нарисовать окружности с определёнными отступом от краев. Чтобы координаты окружности отталкиваясь от прямоугольника, а не от листа.
 

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
Ваше объяснение на самом деле ничего не объяснило, а только больше запутало.
Прямоугольник - это объект на активном слое - так? Вы создаете объект тоже на активном слое - ведь так и надо?
Вас просто координаты окружности не устраивают или как? Зачем вам

%8
Чтобы что то вроде этого получалось
 

Вложения

  • Screenshot_2017-10-29-01-59-41.png
    Screenshot_2017-10-29-01-59-41.png
    365.8 КБ · Просм.: 945

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Чтобы координаты окружности отталкиваясь от прямоугольника, а не от листа.
Координаты прямоугольника берете (LeftX,TopY) и передвигаете созданный объект в нужную позицию относительно их
 

_MBK_

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

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
В смысле с группой? Группа - это тоже объект класса Shape, у него те же свойства что и у всех остальных шейпов, соответственно, координаты так же считаются.
Я добрался до корела. прикрепляю код и скриншот. Эллипс рисуется относительно листа а не прямоугольника. Как сделать чтобы прямоугольник был активен и внутри него уже производить действия, или это только перемещением можно делать.
 

Вложения

  • Screenshot_4.png
    Screenshot_4.png
    94.7 КБ · Просм.: 785

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
Я добрался до корела. прикрепляю код и скриншот. Эллипс рисуется относительно листа а не прямоугольника. Как сделать чтобы прямоугольник был активен и внутри него уже производить действия, или это только перемещением можно делать.

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

Sub pramvkrug()

Dim e As Shape
Set e = ActiveLayer.CreateEllipse(ActiveSelection.LeftX, ActiveSelection.TopY, ActiveSelection.RightX, ActiveSelection.BottomY, 90, 90, True)

End Sub
 

Вложения

  • Screenshot_5.png
    Screenshot_5.png
    97.3 КБ · Просм.: 599

_MBK_

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

Sub pramvkrug()

Dim e As Shape
Set e = ActiveLayer.CreateEllipse(ActiveSelection.LeftX, ActiveSelection.TopY, ActiveSelection.RightX, ActiveSelection.BottomY, 90, 90, True)

End Sub
А в чем с группой проблема?
 

_MBK_

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

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
А вам надо найти конкретный прямоугольник в группе? По какому признаку? У группы есть свойство Shapes - там список всех дочерних шейпов, перебирайте его в цикле или я ж не знаю какие у него уникальные свойства
Нужно чтобы отрабатывал по принципу контура.
Sub pramvkrug()

Dim OrigSelection As ShapeRange
Set OrigSelection = ActiveSelectionRange

Dim e As Shape
Dim eff1 As Effect

'Set e = ActiveSelection.CreateEllipse(ActiveSelection.LeftX, ActiveSelection.TopY, ActiveSelection.RightX, ActiveSelection.BottomY, 90, 90, True)

Set eff1 = OrigSelection(1).CreateContour(0, 10, 1, 0, CreateRGBColor(0, 0, 0), CreateRGBColor(0, 0, 0), CreateRGBColor(0, 0, 0), 0, 0, 2, 4, 15#)
eff1.Contour.ContourGroup.AddToSelection
ActiveSelection.Separate
End Sub

То есть неважно сколько в группе прямоугольников он в них создает контур. Вот так же и с кругом нужно только несколько и по контуру.
 

Вложения

  • Screenshot_6.png
    Screenshot_6.png
    79.8 КБ · Просм.: 777

_MBK_

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

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
Стоп-стоп-стоп, я не поспеваю за вашими темпами! %8
Очередное уточнение задачи снова вывело ее за рамки моего понимания и совершенно увело прочь от топиковой формулировки. Вы что - хотите макрос для создания люверсов сделать? Так сразу надо было и писать - уже полно готовых, вдобавок, делается это совершенно по другому и подводных камней на этом тернистом пути будет просто море. 'fp'
Вы правы примерно так, просто решил начать с них и так понимаю что это пока для меня не подъемная тема. Просто мне например нужно что-то как на скриншоте т.е линии и контур. Но после запуска прямые не подгоняются по координатам прямоугольника если рисовать стд. т.е на листе вредствами корела.
 

Вложения

  • Screenshot_7.png
    Screenshot_7.png
    94.8 КБ · Просм.: 758

_MBK_

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

Vadimsapr

Участник
Топикстартер
Сообщения
40
Реакции
0
Попробую проще.
1. На листе прямоугольник
2. Выделил
3. Запустил макрос
4. Макрос нарисовал контур и 2 линии, как на рисунке(с определенными отступами)

Просто когда создаешь макрос рисуя "руками" т.е нажали настройки - записать макрос - "все нарисовали" - остановить запись. На новом листе после запуска этого же макроса, контур отрисовывается правильно а линии рисуются там же где и при создании макроса.
 

Вложения

  • Screenshot_7.png
    Screenshot_7.png
    94.8 КБ · Просм.: 752

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
а линии рисуются там же где и при создании макроса.
Это было сложно, но я таки понял ;)
Дело в том, что при записи макроса идет запись только проделываемых операций, а не того, что вы подумали при этом. То есть, когда вы рисуете линию, он записывает в макрос создание именно этой линии в конкретных координатах, а не "линию с отступом от края фигуры" Тут надо самому лезть в код и менять координаты на переменные. Ну вы же вроде как сами поняли это судя по сообщению #11?