В любом случае только средствами Autolisp/VisualLisp ты не сможешь ничего в этой ситуации сделать. Задача должна сводиться к попытке получения контура (границы) штриховки на основе данных штриховки, а затем получение площади этой границы.обидно! очень хотелось автоматик сделать lisp, ладно будем познавать дальше иными методами
Дальше поговорим.Придется дальше разговаривать! Не нашел макрос площадь
Задача должна сводиться к попытке получения контура (границы) штриховки на основе данных штриховки, а затем получение площади этой границы.Да я это прекрасно понимаю, но вот как это сделать, странно, что нет инструмента такого встроенного в автокад! Было бы очень удобно...В идеале да нужно чтобы была команда, которая обрисовывает контур блока, и затем конечно брать площадь этой полилинии замкнутой. Но я не имею, пока, такой квалификации, чтобы написать такой макрос
object.GetLoopAt Index, Loop
Object
Hatch
The object or objects this method applies to.
Index
Integer; input-only
A positive integer beginning with 0.
Loop
Variant (object or array of objects); output-only
An object or array of objects that makes up the loop.
Я побоюсь спросить, к чему бы это?Цитироватьobject.GetLoopAt Index, Loop
Object
Hatch
The object or objects this method applies to.
Index
Integer; input-only
A positive integer beginning with 0.
Loop
Variant (object or array of objects); output-only
An object or array of objects that makes up the loop.Код: [Выделить]Sub Example_GetLoopAt()
http://entercad.ru/acadauto.en/
' This example creates an associative hatch in model space.
' It then finds the objects that make up the first loop of the hatch.
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
' Define the hatch
patternName = "ANSI31"
PatternType = 0
bAssociativity = True
' Create the associative Hatch object
Set hatchObj = ThisDrawing.ModelSpace.AddHatch(PatternType, patternName, bAssociativity)
' Create the outer loop for the hatch.
' An arc and a line are used to create a closed loop.
Dim outerLoop(0 To 1) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
Dim startAngle As Double
Dim endAngle As Double
center(0) = 5: center(1) = 3: center(2) = 0
radius = 3
startAngle = 0
endAngle = 3.141592
Set outerLoop(0) = ThisDrawing.ModelSpace.AddArc(center, radius, startAngle, endAngle)
Set outerLoop(1) = ThisDrawing.ModelSpace.AddLine(outerLoop(0).startPoint, outerLoop(0).endPoint)
' Append the outer loop to the hatch object
hatchObj.AppendOuterLoop (outerLoop)
' Append the first circle as one inner loop
Dim innerLoop1(0) As AcadEntity
center(0) = 5: center(1) = 4.5: center(2) = 0
radius = 1
Set innerLoop1(0) = ThisDrawing.ModelSpace.AddCircle(center, radius)
hatchObj.AppendInnerLoop (innerLoop1)
' Append the second circle as the other inner loop
Dim innerLoop2(0) As AcadEntity
radius = 0.5
Set innerLoop2(0) = ThisDrawing.ModelSpace.AddCircle(center, radius)
hatchObj.AppendInnerLoop (innerLoop2)
' Evaluate and display the hatch
hatchObj.Evaluate
ThisDrawing.Regen True
' Find the objects that make up the first loop
Dim loopObjs As Variant
hatchObj.GetLoopAt 0, loopObjs
' Find the types of the objects in the loop
Dim I As Integer
Dim objName As String
objName = ""
For I = LBound(loopObjs) To UBound(loopObjs)
objName = objName & loopObjs(I).EntityName & ", "
Next
MsgBox "The objects in the first loop of the hatch are: " & objName, , "GetLoopAt Example"
End Sub
Дальше поговорим.
Придется дальше разговаривать! Не нашел макрос площадь
Unable to update the solid fill.Это с очень большой вероятностью говорит о том, что AutoCAD не может разобраться с границами штриховки.
91
2548
92
33
93
1
72
1
10
597.2846414763571
20
178.1578161780228
11
625.0347730094702
21
178.1578161780228
97
0
92
48
93
1
72
1
10
682.1803433355739
20
450.8162548646562
11
682.1803433355655
21
450.816241410044
97
0
Boundary path type flag (bit coded):
0 = Default; 1 = External; 2 = Polyline;
4 = Derived; 8 = Textbox; 16 = Outermost
Контур состоит из "отрезков" поллинийкоторые еще и не соединяются между собой.
Походу здесь не хилые проблемы с топологией - фиг поймёшь где там дыркиТочно!
Для начала проверь считает ли площадь этой штриховки GeomProps: http://www.maestrogroup.com.ua/support/GeomProps.zipС иными штриховками, ваш макрос работает, хочу использовать информацию из вашего меню при помощи vla-GetXData, в правильном направлении следую???
в правильном направлении следую???Совершенно мимо.
Совершенно мимо.Подскажите в какую сторону от камня на распутье двигаться!
Блестяще, спасибо!А читать Readme.txt не пробовал? Там это есть.
А читать Readme.txt не пробовал? Там это есть.Воистину есть! к сожалению не читал!
к сожалению не читал!А как ты догадался какой ARX-файл нужно грузить и где смотреть площадь? ;-)
что самое удивительное, если взять тупо квадрат то они совпадут! вся проблема именно в сложноформенных блоках!Проблема в голове. Тебе какая площадь нужна? Внешнего контура? Судя по всему у тебя на фасадах/сечениях проемы, площадь которых в штриховке (если она нормальная) не учитывается. Это та топология, о которой писал trir.
Мне нужна площадь внешнего контура.Вот это и есть постановка задачи. У тебя на входе блок состоящий из отдельных отрезков?
Код хороший, но он находит все контуры все объектов внутри блока, а мне нужен лишь внешний. Без Вас, я чувствую победы не видать:) Итак ты получил набор контуров, один из которых внешний. Как определить какой из них внешний? Ответ очевиден - у него максимальная площадь.