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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Создание динамических блоков в AvtoCad с автоматическим выравниваем вдоль линии

Создание динамических блоков в AvtoCad с автоматическим выравниваем вдоль линии

Ответ
Поиск в этой теме
Непрочитано 15.12.2023, 22:59 #1
Создание динамических блоков в AvtoCad с автоматическим выравниваем вдоль линии
lerok1789
 
Регистрация: 15.12.2023
Сообщений: 7

Здравствуйте.
Подскажите, пожалуйста, как в автокаде можно создать блок, который при вставке в модели будет выравниваться перпендикулярно полилинии.
То есть есть полилиния (ось газопровода) на которую нужно разместить блоки, так что бы они выравнивались вдоль этой линии.
Просмотров: 744
 
Непрочитано 15.12.2023, 23:44
#2
Сергей812


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


блок не знает о полилинии, по которой он должен выровняться)
Сергей812 вне форума  
 
Автор темы   Непрочитано 15.12.2023, 23:55
#3
lerok1789


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
блок не знает о полилинии, по которой он должен выровняться)
Тогда только вручную ровнять каждый вставляемый элемент?
Видела блоки пилонов, которые вставлялись горизонтально или вертикально, в зависимости от оси. С осью газопровода так не получится сделать?
lerok1789 вне форума  
 
Непрочитано 16.12.2023, 00:10
#4
Сергей812


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


видел когда то лиспы, которые выравнивали примитивы "скопом" по указанному объекту. Попробуйте поискать.
Сергей812 вне форума  
 
Непрочитано 16.12.2023, 09:18
#5
Boxa

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


Цитата:
Сообщение от lerok1789 Посмотреть сообщение
Подскажите, пожалуйста, как в автокаде можно создать блок, который при вставке в модели будет выравниваться перпендикулярно полилинии.

Вам нужен параметр "Выравнивание" и сунуть его в базовую точку блока
Boxa вне форума  
 
Автор темы   Непрочитано 16.12.2023, 09:29
#6
lerok1789


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


Спасибо попробую
lerok1789 вне форума  
 
Непрочитано 16.12.2023, 13:52
#7
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,924
<phrase 1=


Может это поможет?
https://www.lee-mac.com//objectalign.html
или это
https://www.lee-mac.com//autoblockbreak.html
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:

Последний раз редактировалось zenon, 16.12.2023 в 14:58.
zenon вне форума  
 
Непрочитано 16.12.2023, 15:36
#8
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 403


Цитата:
Сообщение от lerok1789 Посмотреть сообщение
есть есть полилиния (ось газопровода) на которую нужно разместить блоки, так что бы они выравнивались вдоль этой линии
Если речь именно про линию без дуг, можно воспользоваться кодом VBA ниже. Код вставляет блок под названием "1", который нужно создать в документе предварительно. Запустите код, выделите полилинию, потом укажите необходимое количество точке на полилинии - если код в состоянии, он вставит под необходимым углом. Если промахнулись мимо полилинии - просто вставляет. Вопрос в какую сторону крутить до перпендикулярности вы не поднимали, соответственно направление произвольное.
Код:
[Выделить все]
Sub blref_rot_pline()
Dim blrObj As AcadBlockReference
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
Dim ssObj As AcadSelectionSet
Dim insPnt As Variant
Dim i As Integer
Dim intOM As Integer
Dim points() As Double
intOM = ThisDrawing.GetVariable("OSMODE")
ThisDrawing.SetVariable "OSMODE", 2659
    FilterType(0) = 0
    FilterData(0) = "LWPOLYLINE"
    For Each ssObj In ThisDrawing.SelectionSets
    If ssObj.Name = "qw" Then
        ssObj.Delete
        Exit For
    End If
    Next
    Set ssObj = ThisDrawing.SelectionSets.Add("qw")
    ssObj.SelectOnScreen FilterType, FilterData
        If ssObj.count > 0 Then
        ReDim points(UBound(ssObj.Item(0).Coordinates)) As Double
        points = ssObj.Item(0).Coordinates
        
        End If
        On Error Resume Next
        insPnt = ThisDrawing.Utility.GetPoint(, "Укажите точку вставки")
        Do While Err.Number = 0
          Set blrObj = ThisDrawing.ModelSpace.InsertBlock(insPnt, "1", 1, 1, 1, 0)
          If UBound(blrObj.IntersectWith(ssObj.Item(0), acExtendNone)) > 0 Then
              For i = 0 To UBound(points) - 2 Step 2
                 
                      If (points(i + 2) - points(i)) = 0 Then
                        If points(i) = insPnt(0) And Abs(points(i + 3) - points(i + 1)) > Abs(points(i + 3) - insPnt(1)) And Abs(points(i + 3) - points(i + 1)) > Abs(points(i + 1) - insPnt(1)) Then
                            blrObj.Rotation = -3.14 / 2
                            Exit For
                        End If
                      ElseIf Abs(insPnt(1) - ((points(i + 3) - points(i + 1)) / (points(i + 2) - points(i)) * (insPnt(0) - points(i)) + points(i + 1))) < 0.001 Then
                        blrObj.Rotation = blrObj.Rotation + Atn((points(i + 3) - points(i + 1)) / (points(i + 2) - points(i)))
                        Debug.Print i
                        Exit For
                      End If
              Next i
          End If
            insPnt = 0
            insPnt = ThisDrawing.Utility.GetPoint(, "Укажите точку вставки")
       Loop

            ThisDrawing.SetVariable "OSMODE", intOM

    Set ssObj = Nothing
End Sub
Dinoxromniy вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Создание динамических блоков в AvtoCad с автоматическим выравниваем вдоль линии

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сквозная нумерация динамических блоков zenon Программирование 214 28.08.2020 08:45
Поворот размерного текста вдоль размерной линии olga87 Программирование 2 04.05.2015 19:46
Создание структурной линии из полилинии в autodesk Civil 3d 2012 xdrivers Вертикальные решения на базе AutoCAD 5 27.01.2015 08:01
Подсчет Блоков и Динамических блоков с учетом visibility (видимости) и сумму длин линий, полилиний по слоям и вывод результатов в Ecxel Andrey_nadym Программирование 18 07.01.2014 01:42
Создание линии типа "_______текст_______ " с возможностью изменение текста xabraxabra AutoCAD 18 03.10.2011 02:35