Rated 5/5 based on 240179 internet user reviews

Đến nội dung


Hình ảnh
- - - - -

Tao block thuộc tính trong Cad


  • Please log in to reply
13 replies to this topic

#1 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 09 April 2010 - 10:01 AM

Chào cả nhà, mình muốn tạo một Block có thuộc tính dữ liệu như sau:
- Có một loạt các ô (vẽ bằng Pline) có diện tích là S. Mình có sử dụng một đoạn code VBA để lấy ra giá trị S này và viết nó ra trong mỗi ô đó, bao gồm cả thứ tự ô và 1 vài đối tượng hình học khác (line, cỉcle...). Nay mình muốn mỗi đối tựong trong ô thống kê đó là 1 block có thuộc tính thì ko biết làm thế nào. Mong đựoc chỉ giáo?
ví dụ: http://www.mediafire.com/?j1mkqywym4e
- Mình có đọc qua Topic chuyểm dữ liệu giữa CAd và excel, Cách tạo Block có thuộc tính này cũng giúp mình chuyển dữ liệu qua lại excel đơn giản hơn.
Rất mong đựoc chỉ giáo! ^^
  • 0

#2 hoaletrang

hoaletrang

    biết vẽ line

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

Đã gửi 11 April 2010 - 08:51 PM

Để tạo 1 block có thuộc tính bạn hãy tạo như các block bình thường, riêng đối với các thuộc tính bạn hãy sử dụng lệnh ATTDEF để chèn các thuộc tính hoặc copy thuộc tính từ 1 block khác.
Để hiệu chỉnh thuộc tính có lệnh ATTEDIT.
  • 0

#3 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 12 April 2010 - 12:29 PM

Để tạo 1 block có thuộc tính bạn hãy tạo như các block bình thường, riêng đối với các thuộc tính bạn hãy sử dụng lệnh ATTDEF để chèn các thuộc tính hoặc copy thuộc tính từ 1 block khác.
Để hiệu chỉnh thuộc tính có lệnh ATTEDIT.

Hi, hình như bạn hiểu nhầm í mình rồi. Ý mình là muốn tạo Block thuộc tính viết bằng VBA. Mỗi Block thuộc tính đựoc tạo ra (trong ví dụ là 1 vòng tròn thống kê tên lô và diện tích PLine chẳng hạn) khi thực hiện selection mỗi Pline đó chứ ko phải dùng lệnh.
  • 0

#4 hoaletrang

hoaletrang

    biết vẽ line

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

Đã gửi 12 April 2010 - 05:33 PM

Hi, hình như bạn hiểu nhầm í mình rồi. Ý mình là muốn tạo Block thuộc tính viết bằng VBA. Mỗi Block thuộc tính đựoc tạo ra (trong ví dụ là 1 vòng tròn thống kê tên lô và diện tích PLine chẳng hạn) khi thực hiện selection mỗi Pline đó chứ ko phải dùng lệnh.

Tôi ko biết bạn làm cụ thể như thế nào.
Có vài đoạn code liên quan xin gửi bạn xem có tác dụng gì không.
Dim Bl As AcadBlock
	Dim center(0 To 2) As Double
	center(0) = 2#: center(1) = 2#: center(2) = 0#
	Set Bl = ThisDrawing.Blocks.Add(center, "Rebar011")
	Bl.AddAttribute 250, acAttributeModeVerify, "Hay Nhap So", center, "NHAPSO", "12345"
	Bl.AddCircle center, 250
	Bl.AddText "Khong Co Gi", center, 25
	ThisDrawing.ModelSpace.AddMInsertBlock center, "Rebar011", 1, 1, 1, 0, 1, 1, 0, 0

  • 1

#5 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 15 April 2010 - 04:37 PM

Mình dùng đoạn code sau để chọn ra các 3d polyline:
Dim poly_3d As AcadSelectionSet
On Error Resume Next
Set poly_3d = ThisDrawing.SelectionSets("SSET")
poly_3d.Delete
Set poly_3d = ThisDrawing.SelectionSets.Add("SSET")
Dim gpCode3dpoly(0) As Integer
Dim dataValue3dpoly(0) As Variant
gpCode3dpoly(0) = 0: dataValue3dpoly(0) = "Polyline"
poly_3d.SelectOnScreen gpCode3dpoly, dataValue3dpoly

sau đó lấy ra giá trị diện tích, và tâm của polyline đó. Trong mối lần chọn đối tựợng polyline này mình muốn insert vào 1 block, sau đó add attributes vào mỗi block đó. Tuy nhiên sau khi add attributes vao thì Block này đã mạc định giá trị attribute đó, đến khi insert block này vào polyline tiếp theo (trong phép selection) thì sẽ có thêm att của đối tựong trước. Cho mình hỏi có cách nào loại bỏ đc att trước ko nhỉ?
 ' Insert the block
Dim blockRefObj As AcadBlockReference
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
(point1, "block_insert", 1#, 1#, 1#, 0)

  • 0

#6 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 15 April 2010 - 06:28 PM

Bạn thêm dòng này nữa:
blockRefObj.GetAttributes(0).TextString = "Giá trị cần thay đổi"
  • 1

#7 trinhvqh

trinhvqh

    biết lệnh block

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

Đã gửi 15 April 2010 - 06:53 PM

Chào cả nhà, mình muốn tạo một Block có thuộc tính dữ liệu như sau:
- Có một loạt các ô (vẽ bằng Pline) có diện tích là S. Mình có sử dụng một đoạn code VBA để lấy ra giá trị S này và viết nó ra trong mỗi ô đó, bao gồm cả thứ tự ô và 1 vài đối tượng hình học khác (line, cỉcle...). Nay mình muốn mỗi đối tựong trong ô thống kê đó là 1 block có thuộc tính thì ko biết làm thế nào. Mong đựoc chỉ giáo?
ví dụ: http://www.mediafire.com/?j1mkqywym4e
- Mình có đọc qua Topic chuyểm dữ liệu giữa CAd và excel, Cách tạo Block có thuộc tính này cũng giúp mình chuyển dữ liệu qua lại excel đơn giản hơn.
Rất mong đựoc chỉ giáo! ^^


Hãy thử nghiệm với ACA, vấn đề của bạn sẽ được giải quyết rốt ráo.
File video
File ACA
  • 1

#8 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 15 April 2010 - 10:26 PM

Bạn dùng cad phiên bản bao nhiêu (ACA) là gì và bạn đã sử dụng những lệnh gì thế, nhìn cái Video của bạn hoa hết cả mắt, quá lợi hại.
  • 0

#9 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 16 April 2010 - 09:30 AM

Hãy thử nghiệm với ACA, vấn đề của bạn sẽ được giải quyết rốt ráo.
File video
File ACA

Cách làm này của bạn quá lợi hại, mình đang tìm theo từ khóa cách tạo Multi-View Block Reference để tham chiếu. Bạn có thể nói rõ hơn về cách tạo Multi-View Block Reference ko? có thể dùng VBA để tạo Multi-View Block Reference ko?
Thankyou so much!!!
  • 0

#10 trinhvqh

trinhvqh

    biết lệnh block

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

Đã gửi 16 April 2010 - 10:06 AM

Cách làm này của bạn quá lợi hại, mình đang tìm theo từ khóa cách tạo Multi-View Block Reference để tham chiếu. Bạn có thể nói rõ hơn về cách tạo Multi-View Block Reference ko? có thể dùng VBA để tạo Multi-View Block Reference ko?
Thankyou so much!!!


Để làm được như trên bạn phải sử dụng ACA (Tham khảo thêm ở Topic Autocad Architecture 2009)
Multi-View Block là đối tượng thiết lập bởi ACA được tạo thành từ Block Attribute

Bạn cứ từ từ đọc các bài viết của tôi về Tags, schedule và tìm hiểu
Trước mắt, để ứng dụng cho công việc bạn hãy lấy file ACA tôi đã post và làm theo video trên
- Chọn tag-> Add selected để chọn đối tượng
- Schedule sẽ tự động update
- Muốn xuất dữ liệu sang Exel thì kích chuột phải vào schedule -> Export
  • 0

#11 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 16 April 2010 - 12:13 PM

Để làm được như trên bạn phải sử dụng ACA (Tham khảo thêm ở Topic Autocad Architecture 2009)
Multi-View Block là đối tượng thiết lập bởi ACA được tạo thành từ Block Attribute

Bạn cứ từ từ đọc các bài viết của tôi về Tags, schedule và tìm hiểu
Trước mắt, để ứng dụng cho công việc bạn hãy lấy file ACA tôi đã post và làm theo video trên
- Chọn tag-> Add selected để chọn đối tượng
- Schedule sẽ tự động update
- Muốn xuất dữ liệu sang Exel thì kích chuột phải vào schedule -> Export

- Mình vừa đọc qua cái topic của bạn, quả thật rất đáng nể, từ bứoc đầu tìm hiểu cũng như lời lẽ, phân tích của quá trình nghiên cứu, thực hành, hướng dẫn. Rất đáng học hỏi!
Hóa ra cái ACA bạn nói là Autocad Architecture, thảo nào mình down file Cad của bạn dùng ko đc. Mình đang viết một đoạn code để tính khối lựong một lô bằng PL, gần như đã hoàn tất, nay mình muốn các đối tựong được tao ra trong một đối tượng selection là 1 block reference cho tiện quản lý và xuất nhập dự liệu. Ai dè lại học được chiêu mới của bác, thật thú vị.
- Mình ko dùng ACA và chưa dùng bao giờ vì thực chất là công việc của mình ít hoặc chưa dùng tới nó, mình dùng civil 3D 2010. Thấy trong chương trình cũng có đối tượng Multi Block View..., Tuy ko dùng đc cái ví dụ của bạn (có lẽ khác chưong trình); Nhưng mình nghĩ chưong trình này cũng có khả năng tạo Tag, schedule như ACA. Mình sẽ theo các bài học trên topic ACA để áp dụng theo xem thế nào.
- Một điểm chú ý nữa là chưong trình Civil 3D cũng có khả năng tạo ra sản phẩm giống như video Qhsdd, 1_8 của bạn bằng Menu Parcel, tiện lợi và khá nhanh (mình sẽ gửi video lên sau).
- Trở lại với mục dích chính trên topic này, mong đc giúp đỡ cách tạo Block thuộc tính bằng Vba giống như ví dụ mình có send.
  • 0

#12 sson

sson

    biết zoom

  • Members
  • Pip
  • 18 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 20 April 2010 - 10:36 PM

Chào cả nhà, mình muốn tạo một Block có thuộc tính dữ liệu như sau:
- Có một loạt các ô (vẽ bằng Pline) có diện tích là S. Mình có sử dụng một đoạn code VBA để lấy ra giá trị S này và viết nó ra trong mỗi ô đó, bao gồm cả thứ tự ô và 1 vài đối tượng hình học khác (line, cỉcle...). Nay mình muốn mỗi đối tựong trong ô thống kê đó là 1 block có thuộc tính thì ko biết làm thế nào. Mong đựoc chỉ giáo?
ví dụ: http://www.mediafire.com/?j1mkqywym4e
- Mình có đọc qua Topic chuyểm dữ liệu giữa CAd và excel, Cách tạo Block có thuộc tính này cũng giúp mình chuyển dữ liệu qua lại excel đơn giản hơn.
Rất mong đựoc chỉ giáo! ^^

Đây là đoạn code tôi viết bạn xem có đúng với cái bạn đang cần không nhé. Bạn phải sử dụng đoạn code này trong file cad mà bạn up lên, vì tôi sử dụng các tên block và tên thuộc tính trong đó. Chúc bạn thành công!

Public Sub pratice()
On Error GoTo ketthuc
	Dim bloref_p As AcadBlockReference
	Dim ip(0 To 2) As Double
	Dim sset As AcadSelectionSet
	Dim entry As AcadEntity
	Set sset = ThisDrawing.SelectionSets.Add("SS1")
	sset.SelectOnScreen
	Dim pl As AcadLWPolyline
	Dim varAttributes As Variant
	Dim i As Integer
For Each entry In sset
	If entry.ObjectName = "AcDbPolyline" Then
		Set pl = entry
		ip(0) = pl.Coordinates(0)
		ip(1) = pl.Coordinates(1)
		Set bloref_p = ThisDrawing.ModelSpace.InsertBlock(ip, "556O", 1, 1, 1, 0, "")
		varAttributes = bloref_p.GetAttributes
		For i = LBound(varAttributes) To UBound(varAttributes)
		If varAttributes(i).TagString = "A1-1" Then
			varAttributes(i).TextString = Round(pl.Area)
		End If
		Next
	End If
Next entry
sset.Delete
Exit Sub
ketthuc:
MsgBox "loi roi"
sset.Delete
End Sub

  • 0

#13 letanviet

letanviet

    Chưa sử dụng CAD

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

Đã gửi 12 April 2012 - 10:56 PM

auto lisp là cái tào lao nhất
  • 0

#14 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 4815 Bài viết
Điểm đánh giá: 2319 (tuyệt vời)

Đã gửi 13 April 2012 - 06:54 AM

auto lisp là cái tào lao nhất

Hy vọng sẽ có 1 ngày đẹp trời bạn sẽ ồ lên rằng: "Ồ, nói autolisp tào lao là tào lao mất rồi!"
  • 1