Đến nội dung


Hình ảnh
- - - - -

Cho e hỏi cách trả về đúng đối tượng


  • Please log in to reply
5 replies to this topic

#1 se7en

se7en

    biết vẽ ellipse

  • Members
  • PipPip
  • 52 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 16 September 2009 - 11:01 PM

Em chọn 1 số đối tượng bằng method selectonscreen của selectionset. tập hợp này gồm các đối tượng điểm, polyline, circle. Giờ e muốn lấy thuộc tính như sau : điểm thì lấy tọa độ, polyline thì lấy chiều dài, vòng tròn thì lấy bankính. Nhưng em không biết trả về cho đúng từng đối tượng ntn trong tập hợp đó.
For i = 1 to sset.count
nếu i là điểm thì thông báo tọa độ.
nếu i là polyline thì thông báo chiều dài.
nếu i là circle thì thông báo bán kính.
next

Em tự học vba trong cad nên hơi gà. Mong chỉ giáo.
Thanks.
  • 0
Mê xe và súng
Thích để súng trong xe

#2 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 17 September 2009 - 08:18 AM

Em chọn 1 số đối tượng bằng method selectonscreen của selectionset. tập hợp này gồm các đối tượng điểm, polyline, circle. Giờ e muốn lấy thuộc tính như sau : điểm thì lấy tọa độ, polyline thì lấy chiều dài, vòng tròn thì lấy bankính. Nhưng em không biết trả về cho đúng từng đối tượng ntn trong tập hợp đó.
For i = 1 to sset.count
nếu i là điểm thì thông báo tọa độ.
nếu i là polyline thì thông báo chiều dài.
nếu i là circle thì thông báo bán kính.
next

Em tự học vba trong cad nên hơi gà. Mong chỉ giáo.
Thanks.


Sửa dòng sau cho chính đúng:
Cái này bắt phải bắt đầu từ 0 (CAD nó quy định thế)

For i = 0 to sset.count-1

Dim stPoint, ndPoint as Object
Dim Length as Double
Dim Radius as Double

For i = 0 to sset.count-1
select case sset.Item(i).ObjectName
case "AcDbPoint" 'là điểm
redim stPoint(2)
stPoint(0) = sset.Item(i).Coordinate(0)
stPoint(1) = sset.Item(i).Coordinate(1)

case "AcDbLine" 'là đường thẳng
stPoint=sset.Item(i).StartPoint
stPoint=sset.Item(i).EndPoint

case "AcDbLCircle" 'là đường tròn
Radius =sset.Item(i).Radius 'or Diameter

'là lightweight polyline 'là polyline 'là 3D polyline
case "AcDbPolyline" , "AcDb2DPolyline" , "AcDb3dPolyline"
Length = sset.Item(i).Length

...

end select
next i

  • 0
Clear sky!

MF Rock collection.

#3 se7en

se7en

    biết vẽ ellipse

  • Members
  • PipPip
  • 52 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 17 September 2009 - 10:19 AM

Sửa dòng sau cho chính đúng:
Cái này bắt phải bắt đầu từ 0 (CAD nó quy định thế)

For i = 0 to sset.count-1

Dim stPoint, ndPoint as Object
Dim Length as Double
Dim Radius as Double

For i = 0 to sset.count-1
select case sset.Item(i).ObjectName
case "AcDbPoint" 'là điểm
redim stPoint(2)
stPoint(0) = sset.Item(i).Coordinate(0)
stPoint(1) = sset.Item(i).Coordinate(1)

case "AcDbLine" 'là đường thẳng
stPoint=sset.Item(i).StartPoint
stPoint=sset.Item(i).EndPoint

case "AcDbLCircle" 'là đường tròn
Radius =sset.Item(i).Radius 'or Diameter

'là lightweight polyline 'là polyline 'là 3D polyline
case "AcDbPolyline" , "AcDb2DPolyline" , "AcDb3dPolyline"
Length = sset.Item(i).Length

...

end select
next i


ý em là làm sao lưu lại đối tượng vào biến luôn, vì sau này em còn xử lý trên đối tượng đó nữa.
Thanks
  • 0
Mê xe và súng
Thích để súng trong xe

#4 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 17 September 2009 - 01:46 PM

ý em là làm sao lưu lại đối tượng vào biến luôn, vì sau này em còn xử lý trên đối tượng đó nữa.
Thanks


Biến sset đã chứa đựng danh sách các thực thể được chọn, thay đổi cái gì thì thực thể CAD sẽ đổi theo.

Các giá trị lưu trong sset chỉ là liên kết đến thực thể thực trong CAD. Giá trị trong sset sẽ giữ nguyên cho đến khi nào gọi hàm xóa tập chọn hoặc xóa danh sách các thực thể trong tập chọn đó.
  • 0
Clear sky!

MF Rock collection.

#5 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 18 September 2009 - 05:23 PM

ý em là làm sao lưu lại đối tượng vào biến luôn, vì sau này em còn xử lý trên đối tượng đó nữa.
Thanks


Bạn có thể dùng mảng để gán giá trị biến vào, nhớ làn dùng mảng động nhé.
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#6 se7en

se7en

    biết vẽ ellipse

  • Members
  • PipPip
  • 52 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 07 November 2009 - 02:35 PM

Em viết 1 code, chọn 1 tập hợp điểm (ssetP)rồi sau đó pick 1 điểm gốc (base point), code sẽ ghi khoảng cách từ điểm gốc đến các điểm còn lại trong tập hợp theo kiểu ghi bán kính. Giả sử tập hợp e toàn đối tượng điểm không có đối tượng khác. Nhưng khi chạy bị báo lỗi "Object was erased". Không biết em đã viết sai chỗ nào. Mọi người xem giúp em
Ecám ơn nhiều.

Sub P2P()
Dim SSetP As AcadSelectionSet
Dim i As Integer
Dim BasePoint As Variant
Dim check As Boolean

'Check selectionset
check = False
If ThisDrawing.SelectionSets.Count > 0 Then
For i = 0 To ThisDrawing.SelectionSets.Count - 1
If ThisDrawing.SelectionSets.Item(i).Name <> "SSetP" Then
check = False
Else
check = True
Exit For
End If
Next i
End If

If check = False Then
Set SSetP = ThisDrawing.SelectionSets.Add("SSetP")
Else
Set SSetP = ThisDrawing.SelectionSets.Item(i)
SSetP.Clear
End If
SSetP.SelectOnScreen

BasePoint = ThisDrawing.Utility.GetPoint

Dim dimObj As AcadDimRadial
For i = 0 To SSetP.Count - 1
Set dimObj = ThisDrawing.ModelSpace.AddDimRadial(BasePoint, SSetP.Item(i), 1)
Next
ZoomAll

End Sub

  • 0
Mê xe và súng
Thích để súng trong xe