Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
se7en

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

Các bài được khuyến nghị

se7en    5

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
anhcos    177
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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
se7en    5
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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
anhcos    177
ý 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 đó.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phantuhuong    204
ý 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é.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
se7en    5

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×