- UID
- 107309
- 积分
- 5021
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-2-28
- 最后登录
- 1970-1-1
|
发表于 2004-3-6 11:23:39
|
显示全部楼层
如果是封闭线计算面积就简单多了,看看这个程序能不能帮你解决问题
[php]
Option Explicit
Sub smarea()
On Error Resume Next
Dim i As Integer
Dim areaobj As AcadLWPolyline
Dim sset As AcadSelectionSet
Dim minpnt As Variant
Dim maxpnt As Variant
Dim areains(0 To 2) As Double
Dim txtarea As String
Dim txtins As String
Dim ms As String
Dim txtobj As AcadText
Dim Ftype As Variant
Dim Fdata As Variant
Dim entity As AcadEntity
Dim hatchobj As AcadHatch
Dim pname As String
Dim pype As Long
Dim outloop(0 To 0) As AcadEntity
Dim zminpnt(0 To 2) As Double
Dim zmaxpnt(0 To 2) As Double
Dim sclayer As String
Dim zarea As Double
zarea = 0
Dim us1 As Integer
ThisDrawing.SetVariable "userr1", 1000
us1 = ThisDrawing.GetVariable("userr1")
sclayer = ThisDrawing.GetVariable("clayer")
If ThisDrawing.SelectionSets.Count > 0 Then
For i = 0 To ThisDrawing.SelectionSets.Count - 1
ThisDrawing.SelectionSets.Item(i).Clear
ThisDrawing.SelectionSets.Item(i).Delete
Next
End If
Dim gpCode(3) As Integer, dataValue(3) As Variant
gpCode(0) = -4
dataValue(0) = "<or"
gpCode(1) = 0
dataValue(1) = "PolyLINE"
gpCode(2) = 0
dataValue(2) = "LwPolyline"
gpCode(3) = -4
dataValue(3) = "or>"
Ftype = gpCode
Fdata = dataValue
Set sset = ThisDrawing.SelectionSets.Add("smarea1")
sset.Select acSelectionSetAll, , , Ftype, Fdata
For Each entity In sset
If entity.Layer = sclayer Then
entity.GetBoundingBox minpnt, maxpnt
areains(0) = (minpnt(0) + maxpnt(0)) / 2
areains(1) = (minpnt(1) + maxpnt(1)) / 2
areains(2) = 0
zminpnt(0) = minpnt(0) - 250
zminpnt(1) = minpnt(1) - 250
zminpnt(2) = 0
zmaxpnt(0) = maxpnt(0) + 250
zmaxpnt(1) = maxpnt(1) + 250
zmaxpnt(2) = 0
If entity.Closed = False Then
ThisDrawing.Application.ZoomWindow zminpnt, zmaxpnt
entity.Color = acRed
entity.Highlight True
MsgBox "当前视口图形不闭合,请检查!"
Exit Sub
End If
Select Case us1
Case 500
txtarea = entity.Area / 4
Case 1000
txtarea = entity.Area
Case 2000
txtarea = entity.Area * 4
Case Else
MsgBox "你的比例尺不在可计算之列,请检查你的比例尺"
Exit Sub
End Select
zarea = zarea + txtarea
ms = Format(txtarea / 666.6666, "#0.000")
txtarea = Format(txtarea, "#0.000")
txtins = "S=" & txtarea & "平方米=" & ms & "亩"
Set txtobj = ThisDrawing.ModelSpace.AddText(txtins, areains, 5)
txtobj.Color = acGreen
Dim ptype As Long
pname = "ANSI31"
ptype = 0
Set hatchobj = ThisDrawing.ModelSpace.AddHatch(ptype, pname, True)
hatchobj.PatternScale = 5
Set outloop(0) = entity
hatchobj.AppendOuterLoop (outloop)
hatchobj.Evaluate
End If
Next
ThisDrawing.Utility.Prompt "总面积为:" & zarea & "平方米"
sset.Clear
sset.Delete
End Sub
[/php] |
|