[CDR X5-X8] CreateSubPathFromArray не замыкается контур линии

Статус
Закрыто для дальнейших ответов.

Евгений1201

Участник
Топикстартер
Сообщения
4
Реакции
0
Dim crv As Curve
Set crv = New Curve
Dim i As Integer
ce(0).ElementType = cdrElementStart
ce(0).PositionX = 0#
ce(0).PositionY = 0#
For i = 1 To UBound(s)
With ce(i)
.ElementType = cdrElementLine
.PositionY = s(i, 0)
.PositionX = s(i, 1)
End With
Next i

Set crv = CreateCurve(ActiveDocument)
crv.CreateSubPathFromArray ce
ActiveLayer.CreateCurve crv
crv.closed = true ' НЕ РАБОТАЕТ !!!
Dim shp As ShapeRange
Set shp = ActiveSelectionRange
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
А что в s?
Полигон реально замкнут?
 

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
судя по имени свойства оно может быть только для чтения. Для замыкания кривой стоит поискать метод.
 

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
А вообще глянул чтение/запись, тогда массив для примера нужен где не срабатывает.
 

Евгений1201

Участник
Топикстартер
Сообщения
4
Реакции
0
Последние координаты в массиве равны первым. Вот первая часть кода
Dim doc As Document
Set doc = ActiveDocument
With doc
.ReferencePoint = cdrCenter
.Unit = cdrMillimeter
End With
Dim sFileName As String
Dim r As Integer 'номер строки
Dim strK As String
Dim strKx As String
Dim strKy As String
Dim intL As Integer
Dim intX As Integer
Dim s
sFileName = CorelScriptTools.GetFileBox("координаты (*.txt)|*.txt")
Open sFileName For Input As #1
r = 0
Do Until EOF(1)
Line Input #1, strK
r = r + 1
Loop
Close #1
ReDim s(r - 1, 1)

Open sFileName For Input As #1
r = 0
Do Until EOF(1)
Line Input #1, strK
intL = Len(strK)
intX = InStr(strK, vbTab)
strKx = VBA.Left(strK, intX)
strKy = VBA.Right(strK, intL - intX)
s(r, 0) = strKx
s(r, 1) = strKy
r = r + 1
Loop
Close #1
 

Евгений1201

Участник
Топикстартер
Сообщения
4
Реакции
0
в массиве координаты точек фигуры. Координаты последней точки совпадают с первой
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
А вообще глянул чтение/запись, тогда массив для примера нужен где не срабатывает.
Да нет должно работать.
Конечно, нужен полный код с координатами точек а то пустое вангование получается, даже проверить у себя нельзя, работает или нет?
И как топикстартер определяет что контур реально незамкнут если визуально точки совпадают?
Врубив vanga_mode на максимум, внушает смутные сомнения участок
ActiveLayer.CreateCurve crv
crv.closed = true
то есть сперва из подпути создали шейп а потом зачем то исходному подпути (не шейпу!) присвоили атрибут closed
Сомнительная конструкция
 

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
Ну махнуть эти пару строчек местами и проверить.
 
  • Спасибо
Реакции: Евгений1201

_MBK_

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

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
А в хелп залезть? Закрываются подпути, а не объект целиком.
Код:
Sub Test()
 Dim spath As SubPath
 For Each spath In ActiveShape.Curve.Subpaths
 spath.Closed = True
 Next spath
End Sub
 
  • Спасибо
Реакции: Евгений1201

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
  • Спасибо
Реакции: Евгений1201

Евгений1201

Участник
Топикстартер
Сообщения
4
Реакции
0
Спасибо всем! Активизировали мне башку :). Проверил еще раз.
Dim shpS As Shape
Set crv = CreateCurve(ActiveDocument)
Dim sp As SubPath
Set sp = crv.CreateSubPathFromArray(ce)
sp.Closed = True
Set shpS = ActiveLayer.CreateCurve(crv)
Теперь получается.
 

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
Комментарий модератора: Просьба в будущих постах пользоваться тегом [соde].
 
Статус
Закрыто для дальнейших ответов.