| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Можно ли программно обратить полилинию какой -нибудь 1-й командой без циклов?

VBA. Можно ли программно обратить полилинию какой -нибудь 1-й командой без циклов?

Ответ
Поиск в этой теме
Непрочитано 14.02.2019, 00:53 #1
VBA. Можно ли программно обратить полилинию какой -нибудь 1-й командой без циклов?
Кудахтыч
 
Регистрация: 28.01.2019
Сообщений: 62

Ну в Автокаде же есть такая команда reverse, можно ли это использовать в VBA?
Просмотров: 4040
 
Непрочитано 14.02.2019, 01:13
#2
ProjectMaster


 
Регистрация: 21.08.2017
Сообщений: 1,054


Нормаль кажись поменять надо
ProjectMaster вне форума  
 
Непрочитано 14.02.2019, 02:30
#3
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от Кудахтыч Посмотреть сообщение
Ну в Автокаде же есть такая команда reverse, можно ли это использовать в VBA?
через комстроку можно попытаться) А программно в VBA только у сплайнов (AcadSpline) есть готовый метод Reverse.
В этом смысле в .NetApi проще: polyline есть производный класс от curve, а в curve есть метод ReverseCurve().


Цитата:
Сообщение от ProjectMaster Посмотреть сообщение
Нормаль кажись поменять надо
куда? Нормаль определяет плоскость рисования полилинии, а не порядок следования вершин.
Сергей812 вне форума  
 
Непрочитано 14.02.2019, 08:28
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Кудахтыч Посмотреть сообщение
Можно ли программно обратить полилинию какой -нибудь 1-й командой без циклов?
Можно. Напишите соответствующую функцию, и при необходимости реверса вызывайте ее буквально одной командой. Что там внутри функции вообще не интересно и сколько там циклов тоже. Инкапсуляция - наше все =)
Boxa вне форума  
 
Непрочитано 14.02.2019, 09:55
#5
ProjectMaster


 
Регистрация: 21.08.2017
Сообщений: 1,054


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
куда? Нормаль определяет плоскость рисования полилинии, а не порядок следования вершин.
Это смотря что понимать под "обратить". Если цель - у одностороннего сварного шва или линии земли (тип линии) реснички повернуть в другу сторону - как раз смена нормали на противоположную помогает.

Если перенумеровать узлы - то нет.
ProjectMaster вне форума  
 
Непрочитано 14.02.2019, 10:25
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от Boxa Посмотреть сообщение
Что там внутри функции вообще не интересно и сколько там циклов тоже. Инкапсуляция - наше все =)
Ну с ООП у VBA очень грустно из-за отсутствия возможности реализовать конструктор с параметрами. Есть приватный конструктор и деструктор, а потом еще приходится делать псевдоконструктор - метод для инициализации полей класса. Красота кода страдает в натуре)

Цитата:
Сообщение от ProjectMaster Посмотреть сообщение
Это смотря что понимать под "обратить".
Когда вы, менеджеры, научитесь читать до конца:
Цитата:
Сообщение от Кудахтыч Посмотреть сообщение
Ну в Автокаде же есть такая команда reverse
из хелпа к команде:
Цитата:
Обращение порядка вершин выбранных линий, полилиний, сплайнов и спиралей;
Сергей812 вне форума  
 
Непрочитано 14.02.2019, 11:21
#7
ProjectMaster


 
Регистрация: 21.08.2017
Сообщений: 1,054


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Когда вы, менеджеры, научитесь читать до конца:
Цитата из справочника: "Команда REVERSE в AutoCAD 2010
Новая команда REVERSE в AutoCAD 2010 позволит вам изменить направление линей, полилиний, сплайнов и спиралей на противоположное. Для работы команды достаточно выбрать объекты, которые вы желаете развернуть. Возможность изменения направления объектов в частности очень удобна, если используете в вашем чертеже специальные типы линий."
Того же можно достичь сменой нормали. Прошу прощенья, что как обычно не объяснил детали своего предложения.
ProjectMaster вне форума  
 
Непрочитано 14.02.2019, 11:32
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от ProjectMaster Посмотреть сообщение
Новая команда REVERSE в AutoCAD 2010 позволит вам изменить направление линей, полилиний, сплайнов и спиралей на противоположное. Для работы команды достаточно выбрать объекты, которые вы желаете развернуть. Возможность изменения направления объектов в частности очень удобна, если используете в вашем чертеже специальные типы линий."
Надо работать с первоисточниками стараться всё-таки:
REVERSE
Цитата:
Обращение порядка вершин выбранных линий, полилиний, сплайнов и спиралей
И в исходном английском варианте:
Цитата:
Reverses the vertices of selected lines, polylines, splines, and helixes
Сергей812 вне форума  
 
Непрочитано 14.02.2019, 11:36
#9
ProjectMaster


 
Регистрация: 21.08.2017
Сообщений: 1,054


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Надо работать с первоисточниками стараться всё-таки:
REVERSE
И в исходном английском варианте:
Кудахтыч, Вам зачем нужно обратить полилинии? Чтобы исправить направление отрисовки для типов линий или еще для чего?

P.S. Вот мой старый код. Это было сделано в автокаде 2000.

Код:
[Выделить все]
Public Sub InvertLine()

Dim tt, ro, massa, massa1 As Double
Dim ml As AcadLine
Dim mc As AcadCircle
Dim i As Long
Dim s As String
Dim x1, y1, z1, x2, y2, z2 As Double
Dim mpl As AcadLWPolyline


Dim currNormal As Variant

ActiveDocument.Utility.Prompt "Укажите линии."


ActiveDocument.ActiveSelectionSet.SelectOnScreen
massa = 0
Dim newNormal(0 To 2) As Double
For i = 0 To ActiveDocument.ActiveSelectionSet.count - 1 Step 1
  s = ActiveDocument.ActiveSelectionSet.Item(i).ObjectName
  If s = "AcDbLine" Then
    Set ml = ActiveDocument.ActiveSelectionSet.Item(i)
    
    currNormal = ml.Normal
    ' Change the normal for the circle
    
    newNormal(0) = -currNormal(0)
    newNormal(1) = -currNormal(1)
    newNormal(2) = -currNormal(2)
    ml.Normal = newNormal
    ml.Update
  End If
  
  
  
  
  If s = "AcDbCircle" Then
    Set mc = ActiveDocument.ActiveSelectionSet.Item(i)
    
    currNormal = mc.Normal
    ' Change the normal for the circle
    
    newNormal(0) = -currNormal(0)
    newNormal(1) = -currNormal(1)
    newNormal(2) = -currNormal(2)
    mc.Normal = newNormal
    mc.Update
  End If
  
Next i

End Sub

Последний раз редактировалось ProjectMaster, 14.02.2019 в 12:06.
ProjectMaster вне форума  
 
Автор темы   Непрочитано 21.02.2019, 07:23
#10
Кудахтыч


 
Регистрация: 28.01.2019
Сообщений: 62


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Надо работать с первоисточниками стараться всё-таки:
REVERSE
И в исходном английском варианте:
Да я хотел узнать лишь есть ли такая команада, а функцию обращения 2д полилинии я и сам уже написал, просто это лишний кусок кода и всё.
Кудахтыч вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Можно ли программно обратить полилинию какой -нибудь 1-й командой без циклов?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Подскажите, в какой серии можно посмотреть узлы опирания многопустотных плит на железобетонную стену amaryliss Железобетонные конструкции 1 03.09.2012 08:59
В какой простой программе можно рассчитать неразрезую балку на упругих опорах? roman white Прочее. Программное обеспечение 1 11.08.2012 00:36
С помощью какой программы можно сделать слепок крупной модели senseysensor Другие CAD системы 14 22.08.2009 13:37
какой командой в лиспе можно регулировать ширину столбика в экселе? doki LISP 11 02.02.2008 12:28