[CDR X4 и ранее] Артефакт с замыканием кривой

Cyrax

Топикстартер
10 лет на форуме
Сообщения
588
Реакции
4
Во вложении файл с кривой. Проблема в том, что она не замыкается:
1) при перемещении последнего узла в позицию первого вместо схлопывания перемещаемый узел толкает первый
2) В докере "Свойства объекта" - вкладка "Кривая" - галка "Замыкать кривую" галка установлена и не снимается

Очистка трансформации проблему не решает. Никакие эффекты не применяются.
При создании новых кривых проблем не наблюдается.

https://forum.rudtp.ru/resources/corel-x3-artefakt-s-zamykaniem-krivoj.2338/download?version=2521
 
при перемещении последнего узла в позицию первого вместо схлопывания перемещаемый узел толкает первый
Зато первый превосходно переносится к последнему и фигура схлопывается
 
Зато первый превосходно переносится к последнему и фигура схлопывается
Проверил ещё раз: ни первый к последнему, ни последний к первому не пристыковываются. Только толкают
Проверил и в тестовом файле (который прикрепил), и в рабочем файле.

Если насильно разомкнуть один из верхних узлов - размыкается.
После размыкания ни один из узлов не пристыковывается ни к одному из других. Только толкают
Проверил и в тестовом файле (который прикрепил), и в рабочем файле.

P.S. Могу предположить, что окрываете вы файл в Corel X6. У меня в данный момент X3
 
У меня в данный момент X3
На X3 последовательность иная - чтобы разомкнуть данный объект достаточно выделить его и нажать Weld
Данный способ работает и на X6
 
На X3 последовательность иная - чтобы разомкнуть данный объект достаточно выделить его и нажать Weld
Видимо, под Weld вы подразумеваете некую комбинацию клавиш, объединяющую/разъединяющую кривую.
Если так, то в X3 у команды "Упорядочить - Закрыть путь" комбинация клавиш отсутствует. Более того, при выделение сабжевого объекта этот пункт (набор команд) неактивен.
 
Последнее редактирование:
Попробовал в Х7 - там вообще открылось с ЗАМКНУТОЙ кривой из трёх узлов
Попробовал в Х5 - эффект тот же, что и вы описали.
Открыл докер Properties - закладка Curve - снял галку Close Curve. Все стало вменяемым.
Х3 к сожалению нет. Уже нет
 
Видимо, под Weld вы подразумеваете некую комбинацию клавиш, объединяющую/разъединяющую кривую.
Ну вот только не надо притворяться, что вы не знаете что такое Weld
В русской версии Формирование-Объединение
 
Если вы заводили этот топик дабы раскрыть секрет фокуса - он в том, что данная фигура - мутант, у нее на четыре Node всего три Segments
 
Попробовал в Х5 - эффект тот же, что и вы описали.
Открыл докер Properties - закладка Curve - снял галку Close Curve. Все стало вменяемым.
Х3 к сожалению нет. Уже нет
Успешно сняли галку "Close Curve" в X5 ?
В то же время вы пишете, что "в Х5 - эффект тот же, что и вы описали"
 
Ну вот только не надо притворяться, что вы не знаете что такое Weld
Во-первых, у меня русскоязычный Corel.
Во-вторых, у меня рисует робот, не человек. Он-то уж точно знает, но мне не говорит...

В русской версии Формирование-Объединение
Вот этот способ работает. Артефакт устраняет.

данная фигура - мутант, у нее на четыре Node всего три Segments
Так кривая разомкнута. Поэтому 3 сегмента.
Если замкнуть, будет 4 сегмента.
 
Последнее редактирование:
да .. про галку вы правы - но узлы перемещаются вместе - это я имел в виду
 
Мало ли что там на уровне свойств у артефактной кривой творится.
На уровне интерфейса кривая ведёт себя как разомкнутая и наличие у неё при этом 3 сегментов вполне соответствует этому поведению. Здесь скорее, свойство "Closed" имеет некорректное значение, не соответствующее поведению кривой на уровне интерфейса.
 
Попробовал в Х7 - там вообще открылось с ЗАМКНУТОЙ кривой из трёх узлов
В прошлом году ради интереса пробовал открыть свой файл в новом Corel 2017 - там почти все ромбы превратились в треугольники. Разбираться не стал. Сейчас понятно, в чём дело. Эти ромбы - незамкнуты (одно из рёбер визуализируется за счёт заливки) и с тем же самым артефактом, что в сабже рассматривается. Поэтому и исчезло это самое ребро.
 
Мало ли что там на уровне свойств у артефактной кривой творится.
На уровне интерфейса кривая ведёт себя как разомкнутая и наличие у неё при этом 3 сегментов вполне соответствует этому поведению. Здесь скорее, свойство "Closed" имеет некорректное значение, не соответствующее поведению кривой на уровне интерфейса.
Ну если вам так проще, то пусть будет так. В любом случае, порочность данного контура заключается в том, что в его реализации свойство Closed установлено, но замыкающий сегмент отсутствует. По хорошему бы, надо, чтобы корел ругался уже при открытии подобного файла, но почему то каждая версия считает эту проблему устранимой и устраняет по своему, являя в итоге такое чудо. Последние версии, как я понимаю, просто выбрасывают лишний узел, но почему то создать замыкающий сегмент никто не пытается. Возможно, потому что для его создания данных мало.
 
В любом случае, порочность данного контура заключается в том, что в его реализации свойство Closed установлено, но замыкающий сегмент отсутствует.
Тот факт, что при выполнении этого самого Wend кривая оказывается разомкнутой (и уже без артефакта), можно сделать вывод, что некорректным является не отсутствие замыкающего сегмента, а значение свойства [Closed = True], которое исправляется в значение [False]
(Здесь не совсем понятно, почему команда объединения доступна для одного объекта.)

На X3 последовательность иная - чтобы разомкнуть данный объект достаточно выделить его и нажать Weld. Данный способ работает и на X6
В данном случае создаётся новый объект с теми же самыми свойствами и геометрией (фактически, выполняется дублирование с удалением оригинала), но уже без артефакта. А поскольку создаётся новый объект, то данный способ имеет побочные эффекты. Например, изменение StaticId (если в документе установлена связь объектов по идентификаторам, то все эти связи "полетят")
 
Последнее редактирование:
Другой (программный) способ устранения сабжевого артефакта, не имеющий побочных эффектов:
Код:
shape.Curve.Closed = False  'размыкание кривой с одновременным устранением артефакта (кривая становится корректно разомкнутой)
shape.Curve.Closed = True   'корректное замыкание кривой
Процедура, которая среди выделенных объектов ищет глючные замкнутые кривые и ремонтирует их (корректно замыкает):
Код:
'Ремонт замкнутых кривых
Sub curveCloseRepair()
    If (ActiveSelectionRange.count = 0) Then
        MsgBox "Выделите одну или несколько кривых и повторите операцию."
        Exit Sub
    End If
    ActiveDocument.BeginCommandGroup ("curveCloseRepair")
    Dim settPs As Boolean: settPs = Application.ActiveDocument.PreserveSelection: Application.ActiveDocument.PreserveSelection = False
    Dim settEe As Boolean: settEe = Application.EventsEnabled: Application.EventsEnabled = False
    Dim settOp As Boolean: settOp = Application.Optimization: Application.Optimization = True

    Dim selectedShRange As ShapeRange: shape0 As shape
    Set selectedShRange = ActiveSelectionRange: ActiveSelectionRange.RemoveFromSelection 

    For Each shape0 In selectedShRange.Shapes
        If (shape0.Type = cdrCurveShape) Then
            If (shape0.Curve.Closed) Then
                shape0.Curve.Closed = False  'размыкание кривой с одновременным устранением артефакта (кривая становится корректно разомкнутой)
                shape0.Curve.Closed = True   'корректное замыкание кривой
            End If
        End If
    Next
    selectedShRange.CreateSelection
    Application.ActiveDocument.PreserveSelection = settPs
    Application.EventsEnabled = settEe
    Application.Optimization = settOp
 
    Application.Refresh
    ActiveDocument.EndCommandGroup
End Sub
И после такого ремонта документ уже можно открывать в новых версиях Corel
 
Последнее редактирование: