Đến nội dung


Hình ảnh
- - - - -

Cách lấy giá trị cao độ trong block được tạo bởi Land Desktop


  • Please log in to reply
5 replies to this topic

#1 BKXD98

BKXD98

    biết vẽ circle

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

Đã gửi 23 March 2009 - 04:43 PM

Tôi có file bản vẽ được tạo bởi Acad Land Destop, tôi cần lấy các giá trị cao độ của block cao độ (xem trong bản vẽ đính kèm), các block này chứa 4 ATTRIBUTE, trong đó có 2 ATTRIBUTE là phần nguyên và phần lẻ của giá trị cao độ (nếu xem trong bản vẽ đính kèm thì giá trị cao độ là số lẻ nằm ở giữa).
Các truy cập vào cơ sở dữ liệu của kiểu block này thì tôi chưa biết, mong được các bác hướng dẫn.
Xin cảm ơn.

File dwg
  • 1

#2 tucdrom

tucdrom

    — T — U — N — A —

  • Members
  • PipPipPipPipPipPip
  • 497 Bài viết
Điểm đánh giá: 642 (tốt)

Đã gửi 23 March 2009 - 04:57 PM

Tôi có file bản vẽ được tạo bởi Acad Land Destop, tôi cần lấy các giá trị cao độ của block cao độ (xem trong bản vẽ đính kèm), các block này chứa 4 ATTRIBUTE, trong đó có 2 ATTRIBUTE là phần nguyên và phần lẻ của giá trị cao độ (nếu xem trong bản vẽ đính kèm thì giá trị cao độ là số lẻ nằm ở giữa).
Các truy cập vào cơ sở dữ liệu của kiểu block này thì tôi chưa biết, mong được các bác hướng dẫn.
Xin cảm ơn.
File dwg

Ko hiểu ý bạn cho lắm.Bạn lấy cao độ làm j vậy?Cao độ nhìn thấy rồi còn j(theo như bạn nói:cao độ là số lẻ nằm giữa)
Cách truy cập vào cơ sở dữ liệu của Block dùng lệnh:Be(Block edit) xem sao?Block cần truy cập trong bản vẽ của bạn có tên là:Elev_Point_BLK2
Hoặc eidt lại Block thử dùng lệnh ed(edit) xem sao?

  • 0

Email : anhtu2101@gmail.com



 


#3 BKXD98

BKXD98

    biết vẽ circle

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

Đã gửi 23 March 2009 - 10:03 PM

Ko hiểu ý bạn cho lắm.Bạn lấy cao độ làm j vậy?Cao độ nhìn thấy rồi còn j(theo như bạn nói:cao độ là số lẻ nằm giữa)
Cách truy cập vào cơ sở dữ liệu của Block dùng lệnh:Be(Block edit) xem sao?Block cần truy cập trong bản vẽ của bạn có tên là:Elev_Point_BLK2
Hoặc eidt lại Block thử dùng lệnh ed(edit) xem sao?

Box này là VBA mà, ý tôi muốn hỏi là đoạn code VBA để lấy giá trị cao độ này.

Do 1 số đơn vị khảo sát tự chế thêm 1 số điểm khảo sát bằng cách chép các block cao độ có sẵn rồi tự sửa lại giá trị cao độ nhưng không để ý đến tọa độ z của block cao độ, nên khi muốn xây dựng lại lưới DTM trên land desktop thì không chính xác.

Tôi muốn viết 1 đoạn code để xuất tọa độ các block cao độ (với tọa độ x,y là tọa x,y của block, tọa độ z là giá trị cao độ của block) sang file txt, để từ file txt này xây dựng lại lưới DTM bằng land desktop hay civil 3d.
Tôi chỉ không biết đoạn code truy cập vào csdl của block để lấy giá trị cao độ của nó.
  • 0

#4 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 24 March 2009 - 09:42 AM

Tôi có file bản vẽ được tạo bởi Acad Land Destop, tôi cần lấy các giá trị cao độ của block cao độ (xem trong bản vẽ đính kèm), các block này chứa 4 ATTRIBUTE, trong đó có 2 ATTRIBUTE là phần nguyên và phần lẻ của giá trị cao độ (nếu xem trong bản vẽ đính kèm thì giá trị cao độ là số lẻ nằm ở giữa).
Các truy cập vào cơ sở dữ liệu của kiểu block này thì tôi chưa biết, mong được các bác hướng dẫn.
Xin cảm ơn.

File dwg

Đây là code lấy cao độ
Function PointHeight(Obj As AcadBlockReference) As Double
Dim Att

Att = Obj.GetAttributes
PointHeight = CDbl(Att(1).TextString & "." & Att(2).TextString)
End Function
Không hiểu vì sao lại xuất hiện 2 dấu ";", bạn copy về rồi xóa hoặc bấm vào reply rồi copy text trong đó
VD về cách dùng
Public Sub Test()
Dim i&, n&, s$, Obj As Object
n = 0
For i = 0 To ModelSpace.Count - 1
Set Obj = ModelSpace.Item(i)
If TypeName(Obj) = "IAcadBlockReference" Then
If Obj.Name = "Elev_Point_Blk2" Then
n = n + 1
s = s & PointHeight(Obj) & vbLf
End If
End If
Next i
MsgBox "Co " & n & " block, Cao do la:" & vbLf & s
End Sub

  • 2

#5 lamtecco2

lamtecco2

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 715 Bài viết
Điểm đánh giá: 856 (rất tốt)

Đã gửi 24 March 2009 - 09:56 AM

Chưa cần thiết phải dùng VBA khi Acad đã có lệnh EATTEXT hay ATTEXT xuất các giá trị thuộc tính của block ra tệp số liệu .
  • 2

#6 BKXD98

BKXD98

    biết vẽ circle

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

Đã gửi 24 March 2009 - 02:01 PM

Thanks hai bác ndtnvlamtecco2
To ndtnv, hình như phải thêm ThisDrawing vào trước ModelSpace, nó mới chịu chạy.
  • 0