А вы нарисуйте в своем способе поверклип длиной неПокажите уже наконец
, а в 3 раза больше. Или в 5, так чтобы вся фигура в него поместилась. И масштабируйте его не до желаемого размера, а в 3 (5) раз больше. И оказывается что загонять исходную фигуру в поверклип, а потом оттуда доставать уже и не надо.с текущую сторону фигуры
Точно такой же как у вас в 34-м посте.Вы условие какой задачи выполняете?
нарисуйте в своем способе поверклип
Разве поверклип, в который не загнали фигуру - это собственно поверклип?загонять исходную фигуру в поверклип, а потом оттуда доставать уже и не надо.
А давайте вы все вернетесь в более созидательное русло беседы, а не будете словесно препираться.А давайте вы покажете своим способом как получить такой пятиугольник.
А нафига, собственно, при РАВНОСТОРОННЕМ треугольнике какие-то макросы? Polygon tool при нажатом Ctrl и построении трехстороннего полигона даст таки равносторонний треугольник. Потом можно задать его ШИРИНУ, все стороны будут равны такой ширине. Вот для других треугольников да, посложнееТак попробуйте (предполагается, что у Вас равносторонний многоугольник, без искажений):
Код:Sub Polyside() ActiveDocument.Unit = cdrMillimeter ActiveDocument.ReferencePoint = cdrCenter Set s = ActiveShape If s.Type = cdrPolygonShape Then sl = s.DisplayCurve.Length / s.Polygon.Sides desired_sl = InputBox("Введите длину стороны") sc = desired_sl / sl s.Stretch sc, sc End If End Sub
Для N<5 это справедливоА нафига, собственно, при РАВНОСТОРОННЕМ треугольнике какие-то макросы? Polygon tool при нажатом Ctrl и построении трехстороннего полигона даст таки равносторонний треугольник. Потом можно задать его ШИРИНУ, все стороны будут равны такой ширине.
Так не нужно строить абстрактного коня в вакууме. Задача стояла - треугольник. Впрочем, с другой стороны, равносторонний треугольник частный случай.Для N<5 это справедливо
Sub testTriangle()
'
' Recorded 22.10.2018
'
' Description:
' строит треугольник по трем сторонам
'
Dim s1 As Shape
Set s1 = ActiveLayer.CreateLineSegment(0.334114, 7.631453, 7.279783, 7.631453)
s1.Fill.ApplyNoFill
s1.Outline.SetProperties 0.003, OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100), ArrowHeads(0), ArrowHeads(0), False, False, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, , , 5#
ActiveDocument.ReferencePoint = cdrCenter
s1.SetSize 7.086614, 0.000016
Dim s2 As Shape
Set s2 = ActiveLayer.CreateEllipse2(0.263642, 7.631453, 3.737697, -3.737697, 90#, 90#, False)
s2.SetSize 7.874016, 7.874016
Dim s3 As Shape
Set s3 = ActiveLayer.CreateEllipse2(7.350256, 7.631453, 4.383091, -4.383091, 90#, 90#, False)
s3.Fill.ApplyNoFill
s3.Outline.SetProperties 0.003, OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100), ArrowHeads(0), ArrowHeads(0), False, False, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, , , 5#
s3.SetSize 8.661417, 8.661417
Dim s4 As Shape
Set s4 = s3.Intersect(s2, True, True)
' вот тут нужно будет получить координаты одой из точек получившейся при пересечении фигуры
Dim s5 As Shape
Set s5 = ActiveLayer.CreateLineSegment(0.263642, 7.631453, 3.577224, 9.758) ' а вот тут их подставить
Dim crv As Curve
Set crv = ActiveDocument.CreateCurve()
With crv.CreateSubPath(0.263642, 7.631453) ' и тут
.AppendLineSegment 3.577224, 9.758
.AppendLineSegment 7.350256, 7.631453
End With
s5.Curve.CopyAssign crv
s4.Delete
ActiveDocument.CreateSelection s1, s5
Dim s6 As Shape
Set s6 = ActiveSelection.Combine
Set crv = ActiveDocument.CreateCurve()
With crv.CreateSubPath(0.263642, 7.631453)
.AppendLineSegment 7.350256, 7.631453
.AppendLineSegment 3.577224, 9.758
.AppendLineSegment 0.263642, 7.631453
End With
s6.Curve.CopyAssign crv
Set crv = ActiveDocument.CreateCurve()
With crv.CreateSubPath(0.263642, 7.631453)
.AppendLineSegment 7.350256, 7.631453
.AppendLineSegment 3.577224, 9.758
.AppendLineSegment 0.263642, 7.631453
.Closed = True
End With
s6.Curve.CopyAssign crv
End Sub
Function drawTriangle(a, b, c, Cx, Cy) As Shape
Dim spath As SubPath, crv As Curve
Dim Ax, Ay, Bx, By, Adx, Ady, p
'рассчитываем координаты вершин
Bx = Cx - a
By = Cy
p = (a + b + c) / 2
Ady = 2 / a * Sqr(p * (p - a) * (p - b) * (p - c))
Adx = Sqr(b ^ 2 - Ady ^ 2)
If a ^ 2 + b ^ 2 - c ^ 2 > 0 Then Ax = Cx - Adx Else Ax = Cx + Adx
Ay = Cy - Ady
'рисуем треугольник
Set crv = Application.CreateCurve(ActiveDocument)
Set spath = crv.CreateSubPath(Cx, Cy)
spath.AppendLineSegment Bx, By
spath.AppendLineSegment Ax, Ay
spath.Closed = True
Set drawTriangle = ActiveLayer.CreateCurve(crv)
End Function
Всем привет! В программе Corel я новичок, и вот столкнулся вроде бы с элементарной проблемой.
Рисую пятиугольник либо треугольник
Ну тогда да, я пропустил про пятиугольник. Был неправ, пойду накачуДа ну?
Тоже чудно В защиту своего способа скажу - наглядно и считать не нужно Впрочем, на этом преимущества заканчиваются. Расчеты в данном случае намного быстрее. Хотя не думаю, что в этом случае это имеет какое-то значение, это если бы треугольников миллион сгенерить...Вот функция из моего макроса. a, b, c - длины сторон, Cx, Cy - координаты вершины C.
Код:Function drawTriangle(a, b, c, Cx, Cy) As Shape Dim spath As SubPath, crv As Curve Dim Ax, Ay, Bx, By, Adx, Ady, p 'рассчитываем координаты вершин Bx = Cx - a By = Cy p = (a + b + c) / 2 Ady = 2 / a * Sqr(p * (p - a) * (p - b) * (p - c)) Adx = Sqr(b ^ 2 - Ady ^ 2) If a ^ 2 + b ^ 2 - c ^ 2 > 0 Then Ax = Cx - Adx Else Ax = Cx + Adx Ay = Cy - Ady 'рисуем треугольник Set crv = Application.CreateCurve(ActiveDocument) Set spath = crv.CreateSubPath(Cx, Cy) spath.AppendLineSegment Bx, By spath.AppendLineSegment Ax, Ay spath.Closed = True Set drawTriangle = ActiveLayer.CreateCurve(crv) End Function