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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Размеры группы фигур на листе

Размеры группы фигур на листе

Ответ
Поиск в этой теме
Непрочитано 21.12.2009, 16:56 #1
Размеры группы фигур на листе
ajax
 
Регистрация: 21.12.2009
Сообщений: 2

Требуется программка на Visual Basic, считающая максимальное расстояние по горизонтали и вертикали между всеми объектами на чертеже, то есть общие размеры прямогугольной области, занятой фигурами (размерные линии, выноски не учитываются).
Просмотров: 2589
 
Непрочитано 22.12.2009, 00:11
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от ajax Посмотреть сообщение
Требуется программка на Visual Basic, считающая максимальное расстояние по горизонтали и вертикали между всеми объектами на чертеже, то есть общие размеры прямогугольной области, занятой фигурами (размерные линии, выноски не учитываются).
Такой вариант устроит?

Код:
[Выделить все]
Option Explicit


Public Sub BoundingBoxTest()
    Dim pfs As AcadSelectionSet
    Dim oEnt As AcadEntity
    Dim varPt As Variant
    Dim i As Long
    Dim maxpt As Variant
    Dim minpt As Variant
    Dim xmin As Double
    Dim ymin As Double
    Dim xmax As Double
    Dim ymax As Double
    Dim coords(0 To 7) As Double
    Dim oPline As AcadLWPolyline

    Set pfs = ThisDrawing.PickfirstSelectionSet

    pfs.Clear

    pfs.SelectOnScreen

    If pfs.Count = 0 Then Exit Sub

    ReDim maxx(0 To pfs.Count - 1) As Double

    ReDim minx(0 To pfs.Count - 1) As Double

    ReDim maxy(0 To pfs.Count - 1) As Double

    ReDim miny(0 To pfs.Count - 1) As Double

    For i = 0 To pfs.Count - 1

        Set oEnt = pfs.Item(i)

        oEnt.GetBoundingBox minpt, maxpt

        minx(i) = CDbl(minpt(0))

        miny(i) = CDbl(minpt(1))

        maxx(i) = CDbl(maxpt(0))

        maxy(i) = CDbl(maxpt(1))

    Next i
    
    Dim minxs As Variant
    
    minxs = SortLess(minx)
    
    xmin = minxs(0)
    
    Dim minys As Variant
    
    minys = SortLess(miny)
 
    ymin = minys(0)
    
    Dim maxxs As Variant
 
    maxxs = SortMore(maxx)
    
   xmax = maxxs(0)
   
   Dim maxys As Variant
    
   maxys = SortMore(maxy)
 
   ymax = maxys(0)
   
coords(0) = CDbl(xmin)
coords(1) = CDbl(ymin)

coords(2) = CDbl(xmax)
coords(3) = CDbl(ymin)

coords(4) = CDbl(xmax)
coords(5) = CDbl(ymax)

coords(6) = CDbl(xmin)
coords(7) = CDbl(ymax)

Set oPline = ThisDrawing.ModelSpace.AddLightWeightPolyline(coords)
oPline.Closed = True
oPline.color = acYellow

End Sub


Public Function SortMore(SourceArr As Variant) As Variant

        Dim Check As Boolean
        Dim Elem As Double
        Dim iCount As Integer

        Check = False
        Do Until Check
        Check = True
        For iCount = LBound(SourceArr) To UBound(SourceArr) - 1
        If SourceArr(iCount) < SourceArr(iCount + 1) Then
        Elem = SourceArr(iCount)
        SourceArr(iCount) = SourceArr(iCount + 1)
        SourceArr(iCount + 1) = Elem
        Check = False
        End If
        Next
        Loop
        
SortMore = SourceArr

End Function
Public Function SortLess(SourceArr As Variant) As Variant

        Dim Check As Boolean
        Dim Elem As Double
        Dim iCount As Integer

        Check = False
        Do Until Check
        Check = True
        For iCount = LBound(SourceArr) To UBound(SourceArr) - 1
        If SourceArr(iCount) > SourceArr(iCount + 1) Then
        Elem = SourceArr(iCount)
        SourceArr(iCount) = SourceArr(iCount + 1)
        SourceArr(iCount + 1) = Elem
        Check = False
        End If
        Next
        Loop
        
SortLess = SourceArr

End Function
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 22.12.2009, 18:52
#3
ajax


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


Работает, за исключением того что размеры и выноски не отсеиваются из выборки
ajax вне форума  
 
Непрочитано 22.12.2009, 19:28
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от ajax Посмотреть сообщение
Работает, за исключением того что размеры и выноски не отсеиваются из выборки
Добавь логический фильтр чтобы не выбирать
-4 "NOT"> тут размеры и выноски -4 "NOT>"

Типа:

Код:
[Выделить все]
Public Sub BoundingBoxTest()
    Dim pfs As AcadSelectionSet
    Dim oEnt As AcadEntity
    Dim varPt As Variant
    Dim ftype(5) As Integer
    Dim fdata(5) As Variant
    Dim dxfCode, dxfValue
    Dim i As Long
    Dim maxpt As Variant
    Dim minpt As Variant
    Dim xmin As Double
    Dim ymin As Double
    Dim xmax As Double
    Dim ymax As Double
    Dim coords(0 To 7) As Double
    Dim oPline As AcadLWPolyline


    ftype(0) = -4: ftype(1) = -4: ftype(2) = 0: ftype(3) = 0: ftype(4) = -4: ftype(5) = -4
    
    fdata(0) = "<not": fdata(1) = "<or": fdata(2) = "DIMENSION": fdata(3) = "LEADER,MLEADER": fdata(4) = "or>": fdata(5) = "not>"
    
    dxfCode = ftype: dxfValue = fdata
    
    Set pfs = ThisDrawing.PickfirstSelectionSet

    pfs.Clear

    pfs.SelectOnScreen dxfCode, dxfValue

    If pfs.Count = 0 Then Exit Sub

    ReDim maxx(0 To pfs.Count - 1) As Double

    ReDim minx(0 To pfs.Count - 1) As Double

    ReDim maxy(0 To pfs.Count - 1) As Double

    ReDim miny(0 To pfs.Count - 1) As Double

    For i = 0 To pfs.Count - 1

        Set oEnt = pfs.Item(i)

        oEnt.GetBoundingBox minpt, maxpt

        minx(i) = minpt(0)

        miny(i) = minpt(1)

        maxx(i) = maxpt(0)

        maxy(i) = maxpt(1)

    Next i
    
    Dim minxs As Variant
    
    minxs = SortLess(minx)
    
    xmin = minxs(0)
    
    Dim minys As Variant
    
    minys = SortLess(miny)
 
    ymin = minys(0)
    
    Dim maxxs As Variant
 
    maxxs = SortMore(maxx)
    
   xmax = maxxs(0)
   
   Dim maxys As Variant
    
   maxys = SortMore(maxy)
 
   ymax = maxys(0)
   
coords(0) = CDbl(xmin)
coords(1) = CDbl(ymin)

coords(2) = CDbl(xmax)
coords(3) = CDbl(ymin)

coords(4) = CDbl(xmax)
coords(5) = CDbl(ymax)

coords(6) = CDbl(xmin)
coords(7) = CDbl(ymax)

Set oPline = ThisDrawing.ModelSpace.AddLightWeightPolyline(coords)
oPline.Closed = True
oPline.color = acYellow

End Sub
МТексты у лидеров не отфильтровываются - здесь
нужен сложный алгоритм через расширенные словари
лидеров и мультилидеров
Я пас...

~'J'~

Последний раз редактировалось Олег (jr.), 22.12.2009 в 20:02. Причина: добавлен код
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Размеры группы фигур на листе



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не видны размеры в листе Дмитрий01 AutoCAD 7 19.05.2009 13:34
При перемещении чертежа на листе убегают размеры! alexNAP AutoCAD 6 06.05.2009 12:17
Размеры на листе Kotsar AutoCAD 12 15.05.2007 09:47
Размеры на листе и видовые окна с разними масштабами Pave1 AutoCAD 4 18.07.2006 11:55