phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 8, 2011 Cho mình hỏi làm sao để hiển thị các Attribute trong một block sau khi Insert nó? Mình dùng code để insert một block có chữa các text attribute, tuy nhiên nó chỉ hiện lên các đối tượng Line trong block đó, còn attribute thì không hiện lên :wacko: Bác thử dùng SetVariable "ATTMODE", 1 kết hợp với regen xem. 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
Jin Yong 337 Báo cáo bài đăng Đã đăng Tháng 3 8, 2011 Bác thử dùng SetVariable "ATTMODE", 1 kết hợp với regen xem. Tình hình là cũng không ăn thua Tìm trên mạng bàn rất ít về vấn đề này Có một số bài viết khá phức tạp nhưng làm theo cũng chưa có kết quả :( http://forums.autodesk.com/t5/NET/insert-a-block-with-attribute-doesn-t-show-up/m-p/2837455 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 8, 2011 Tình hình là cũng không ăn thua Tìm trên mạng bàn rất ít về vấn đề này Có một số bài viết khá phức tạp nhưng làm theo cũng chưa có kết quả :( http://forums.autodesk.com/t5/NET/insert-a-block-with-attribute-doesn-t-show-up/m-p/2837455 Bác có thể up cái block và đoạn code insertblock lên được không. Em dùng method insertblock 1 block chứa att vào vẫn hiển thị bình thường mà. 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 196 Báo cáo bài đăng Đã đăng Tháng 3 8, 2011 Block có các text attribute, lúc đó nó là một Block reference. Dùng hàm GetAttributes ta sẽ xác định được danh sách các attr của block ref đó. Ứng với mỗi TagString của text attribute ta sẽ đọc/ghi được giá trị của nó thông qua TextString của nó. VD: chèn Block khungten và thay đổi một số thông tin trên bản vẽ dim attrs() as AttributeReference / Object = khungten.GetAttributes (tùy theo later hay early binding) for i = 0 to attrs.Length - 1 select case attrs(i).TagString case "Owner" attrs(i).TextString = "Vietnam" case "Support" attrs(i).TextString = "CADViet" ........ 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
Jin Yong 337 Báo cáo bài đăng Đã đăng Tháng 3 9, 2011 Mất khá nhiều thời gian, sau khi kết hợp cả tây lẫn ta, cuối cùng đoạn mã sau của mình đã có kết quả, Attribute đã hiện ra :| Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() Dim acBlkTbl As BlockTable = acTrans.GetObject(acCurDb.BlockTableId, DatabaseServices.OpenMode.ForRead) Dim acBlkTblRec As BlockTableRecord = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), DatabaseServices.OpenMode.ForWrite) Dim InsertID As ObjectId = acBlkTbl.Item("TK_2") Dim BlockRef As BlockReference = New BlockReference(New Point3d(1, 1, 0), InsertID) acBlkTblRec.AppendEntity(BlockRef) Dim BLR As BlockTableRecord = acTrans.GetObject(BlockRef.BlockTableRecord, DatabaseServices.OpenMode.ForWrite) Dim ent As Entity For Each attID As ObjectId In BLR ent = acTrans.GetObject(attID, DatabaseServices.OpenMode.ForWrite) If ent.GetType.Name = "AttributeDefinition" Then Dim attDef As AttributeDefinition = ent Dim AttRef As AttributeReference = New AttributeReference AttRef.SetAttributeFromBlock(attDef, BlockRef.BlockTransform) If AttRef.Tag = "DK" Then attDef.TextString = "10" BlockRef.AttributeCollection.AppendAttribute(AttRef) acTrans.AddNewlyCreatedDBObject(AttRef, True) End If Next acTrans.AddNewlyCreatedDBObject(BlockRef, True) acTrans.Commit() End Using 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Có bác nào biết cách sử dụng method TrueColor trong VB.net không? Hướng dẫn em phát!!! 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
gia_bach 1557 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Có bác nào biết cách sử dụng method TrueColor trong VB.net không? Hướng dẫn em phát!!! Hỏi vắn tắt quá, không hiểu ý bạn ? Tham khảo (Acad.Net Help): The following example creates 4 circles and assigns a different color to each circle using four different methods. Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry Imports Autodesk.AutoCAD.Colors <CommandMethod("SetObjectColor")> _ Public Sub SetObjectColor() '' Get the current document and database Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database '' Start a transaction Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() '' Define an array of colors for the layers Dim acColors(2) As Color acColors(0) = Color.FromColorIndex(ColorMethod.ByAci, 1) acColors(1) = Color.FromRgb(23, 54, 232) acColors(2) = Color.FromNames("PANTONE Yellow 0131 C", _ "PANTONE(R) pastel coated") '' Open the Block table for read Dim acBlkTbl As BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _ OpenMode.ForRead) '' Open the Block table record Model space for write Dim acBlkTblRec As BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _ OpenMode.ForWrite) '' Create a circle object and assign it the ACI value of 4 Dim acPt As Point3d = New Point3d(0, 3, 0) Dim acCirc As Circle = New Circle() acCirc.SetDatabaseDefaults() acCirc.Center = acPt acCirc.Radius = 1 acCirc.ColorIndex = 4 acBlkTblRec.AppendEntity(acCirc) acTrans.AddNewlyCreatedDBObject(acCirc, True) Dim nCnt As Integer = 0 While (nCnt < 3) '' Create a copy of the circle Dim acCircCopy As Circle acCircCopy = acCirc.Clone() '' Shift the copy along the Y-axis acPt = New Point3d(acPt.X, acPt.Y + 3, acPt.Z) acCircCopy.Center = acPt '' Assign the new color to the circle acCircCopy.Color = acColors(nCnt) acBlkTblRec.AppendEntity(acCircCopy) acTrans.AddNewlyCreatedDBObject(acCircCopy, True) nCnt = nCnt + 1 End While '' Save the changes and dispose of the transaction acTrans.Commit() End Using End Sub 1 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Hỏi vắn tắt quá, không hiểu ý bạn ? Ý em là dùng truecolor để tạo ra cái layer có màu RGB(0, 0, ,0) màu đen. Dùng code trong VB chưa biết sử dụng thế nào. 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
gia_bach 1557 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Ý em là dùng truecolor để tạo ra cái layer có màu RGB(0, 0, ,0) màu đen. Dùng code trong VB chưa biết sử dụng thế nào. Tôi cũng chưa biết cách set màu RGB (vì phụ thuộc class Color), bạn thử dùng thuộc tính Color để gán màu cho Layer VD đổi màu Layer hiện hành thành màu trắng-đen Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim AcadApp As Object Try AcadApp = GetObject(, "AutoCAD.Application") Catch AcadApp = CreateObject("AutoCAD.Application") End Try AcadApp.Visible = True Dim layer As Object layer = AcadApp.ActiveDocument.ActiveLayer layer.Color = 7 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Tôi cũng chưa biết cách set màu RGB (vì phụ thuộc class Color), bạn thử dùng thuộc tính Color để gán màu cho Layer Bác chỉ em code tạo layer như bản file em gửi lên. Mục đích là dùng 1 line thuộc layer 0 để thể hiện khoảng cách dải thép trong cái modun vẽ thép sàn của em. Còn nếu dùng method color em không thể tạo được màu như thế. http://www.cadviet.com/upfiles/3/drawing1_53.dwg 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Nhân tiên Bác cho em hỏi đoạn code sau Function pline_4(ByVal p1() As Double, ByVal p2() As Double, ByVal p3() As Double, ByVal p4() As Double) As Object Dim p(0 To 11) As Double p(0) = p1(0) : p(1) = p1(1) : p(2) = 0 p(3) = p2(0) : p(4) = p2(1) : p(5) = 0 p(6) = p3(0) : p(7) = p3(1) : p(8) = 0 p(9) = p4(0) : p(10) = p4(1) : p(11) = 0 pline_4 = AcadApp.ActiveDocument.Modelspace.Addpolyline(p) pline_4.layer = "_Thep_san" pline_4.setwidth(2, 7, 7) pline_4.setwidth(1, 7, 7) pline_4.setwidth(0, 7, 7) Dim DataType(0) As Integer Dim Data(0) As Object DataType(0) = 1000 Data(0) = "thep" pline_4.setxdata(DataType, Data) End Function nó bị lỗi Invalid argument type in SetXData method. Bác giúp em cá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
linhoreka 47 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Dim DataType(0) As Integer Dim Data(0) As Object DataType(0) = 1000 Data(0) = "thep" pline_4.setxdata(DataType, Data) Tớ thì chả biết VB.NET đâu. Nhưng cái SetXdata thì làm nhiều bên VB rồi. Bên VB làm thế này: 1. Datatype(0) phải bằng 1001, tương ứng bên Data(0) = "Tên chương trình của bạn" để AutoCAD add vào danh sách đăng ký những chương trình Addin: Bạn xem danh sách dài những RegisteredApplications trong AcadDocument thì biết. 2. Sau đó nếu bạn add thêm những dữ liệu nào nữa vào đối tượng, nên dùng tên chương trình đã khai báo để AutoCAD nhóm dữ liệu đó vào 1 nhóm. Khi lấy ra cũng phải khai báo tên chương trình: GetXdata Appname, Datatype, Data Vì vậy code có thể bên VB NET sẽ phải là: Dim DataType(1) As Integer Dim Data(1) As Object '<<< Cái này bên VB là Variant. Không rõ bên NET trong ví dụ mẫu họ để là gì ? DataType(0) = 1001 Data(0) = "Thep San" '<<< Tên chương trình DataType(1) = 1000 Data(1) = "thep" pline_4.setxdata(DataType, Data) 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Dim DataType(0) As Integer Dim Data(0) As Object DataType(0) = 1000 Data(0) = "thep" pline_4.setxdata(DataType, Data) Tớ thì chả biết VB.NET đâu. Nhưng cái SetXdata thì làm nhiều bên VB rồi. Bên VB làm thế này: 1. Datatype(0) phải bằng 1001, tương ứng bên Data(0) = "Tên chương trình của bạn" để AutoCAD add vào danh sách đăng ký những chương trình Addin: Bạn xem danh sách dài những RegisteredApplications trong AcadDocument thì biết. 2. Sau đó nếu bạn add thêm những dữ liệu nào nữa vào đối tượng, nên dùng tên chương trình đã khai báo để AutoCAD nhóm dữ liệu đó vào 1 nhóm. Khi lấy ra cũng phải khai báo tên chương trình: GetXdata Appname, Datatype, Data Vì vậy code có thể bên VB NET sẽ phải là: Dim DataType(1) As Integer Dim Data(1) As Object '<<< Cái này bên VB là Variant. Không rõ bên NET trong ví dụ mẫu họ để là gì ? DataType(0) = 1001 Data(0) = "Thep San" '<<< Tên chương trình DataType(1) = 1000 Data(1) = "thep" pline_4.setxdata(DataType, Data) Không được bạn à! Cái này trong VB6 mình cũng làm được rồi nhưng sang VB2010 nó cứ báo lỗi mới ghét chứ. Có khi phải dùng phương pháp khác thô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
gia_bach 1557 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Nhân tiên Bác cho em hỏi đoạn code sau Function pline_4(ByVal p1() As Double, ByVal p2() As Double, ByVal p3() As Double, ByVal p4() As Double) As Object Dim p(0 To 11) As Double p(0) = p1(0) : p(1) = p1(1) : p(2) = 0 p(3) = p2(0) : p(4) = p2(1) : p(5) = 0 p(6) = p3(0) : p(7) = p3(1) : p(8) = 0 p(9) = p4(0) : p(10) = p4(1) : p(11) = 0 pline_4 = AcadApp.ActiveDocument.Modelspace.Addpolyline(p) pline_4.layer = "_Thep_san" pline_4.setwidth(2, 7, 7) pline_4.setwidth(1, 7, 7) pline_4.setwidth(0, 7, 7) Dim DataType(0) As Integer Dim Data(0) As Object DataType(0) = 1000 Data(0) = "thep" pline_4.setxdata(DataType, Data) End Function nó bị lỗi Invalid argument type in SetXData method. Bác giúp em cái Bạn thử code sau (đã test trên VB 2008) : Function pline_4(ByVal p1() As Double, ByVal p2() As Double, ByVal p3() As Double, ByVal p4() As Double) As Object Dim p(0 To 11) As Double p(0) = p1(0) : p(1) = p1(1) : p(2) = 0 p(3) = p2(0) : p(4) = p2(1) : p(5) = 0 p(6) = p3(0) : p(7) = p3(1) : p(8) = 0 p(9) = p4(0) : p(10) = p4(1) : p(11) = 0 pline_4 = AcadApp.ActiveDocument.Modelspace.Addpolyline(p) pline_4.layer = "_Thep_san" pline_4.setwidth(2, 7, 7) pline_4.setwidth(1, 7, 7) pline_4.setwidth(0, 7, 7) Dim DataType(2) As Short Dim Data(2) As Object DataType(0) = 1001 Data(0) = "thep1001" DataType(1) = 1000 Data(1) = "thep1000" DataType(2) = 1000 Data(2) = "thep1000" pline_4.SetXData(DataType, Data) End Function 1 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 12, 2011 Bạn thử code sau (đã test trên VB 2008) : Function pline_4(ByVal p1() As Double, ByVal p2() As Double, ByVal p3() As Double, ByVal p4() As Double) As Object Dim p(0 To 11) As Double p(0) = p1(0) : p(1) = p1(1) : p(2) = 0 p(3) = p2(0) : p(4) = p2(1) : p(5) = 0 p(6) = p3(0) : p(7) = p3(1) : p(8) = 0 p(9) = p4(0) : p(10) = p4(1) : p(11) = 0 pline_4 = AcadApp.ActiveDocument.Modelspace.Addpolyline(p) pline_4.layer = "_Thep_san" pline_4.setwidth(2, 7, 7) pline_4.setwidth(1, 7, 7) pline_4.setwidth(0, 7, 7) Dim DataType(2) As Short Dim Data(2) As Object DataType(0) = 1001 Data(0) = "thep1001" DataType(1) = 1000 Data(1) = "thep1000" DataType(2) = 1000 Data(2) = "thep1000" pline_4.SetXData(DataType, Data) End Function Á được rồi. Vô cung cám ơn Bác. Thế là giải quyết được vấn đề rôi. Thank! 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
nguyentuyen6 130 Báo cáo bài đăng Đã đăng Tháng 3 14, 2011 E không biết tý gì về VB mới chán. Bác nào cho em biết tổng quát cách sử dụng các lệnh Lặp của VB ( VD: for...., if-then...) :ph34r: 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 196 Báo cáo bài đăng Đã đăng Tháng 3 14, 2011 Nếu không biết VB thì nên bắt đầu bằng C# là hay nhất. Tài liệu hướng dẫn lập trình bằng tiếng Việt ở đây: - C# - VB 1 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
Jin Yong 337 Báo cáo bài đăng Đã đăng Tháng 3 15, 2011 Cho mình hỏi tại sao trong CommandMethod lại không nhận được Form 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
gia_bach 1557 Báo cáo bài đăng Đã đăng Tháng 3 15, 2011 Cho mình hỏi tại sao trong CommandMethod lại không nhận được Form nhỉ? Bạn tạ0 1 Form bình thuờng bằng cách Add Form, sau đó gọi lệnh ShowModalDialog(Form) để hiển thị nó. code VB <CommandMethod("MODALFORM")> _ Public Sub ShowModalForm() Dim modalForm As ModalForm = New ModalForm() Application.ShowModalDialog(modalForm) 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
Jin Yong 337 Báo cáo bài đăng Đã đăng Tháng 3 15, 2011 Thế nhưng muốn điều khiển trước các control của form đó thì mình làm thế nào? Ví dụ mình mình muốn hiển thị hay ko một textbox nào đó của form trước khi cho form hiện ra? 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
Jin Yong 337 Báo cáo bài đăng Đã đăng Tháng 3 15, 2011 Lỗi của mì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
gia_bach 1557 Báo cáo bài đăng Đã đăng Tháng 3 15, 2011 Thế nhưng muốn điều khiển trước các control của form đó thì mình làm thế nào? Ví dụ mình mình muốn hiển thị hay ko một textbox nào đó của form trước khi cho form hiện ra? Sử dụng thuộc tính Visible = true or false để hiển thị hay ko một Control Lỗi của mình: Đối số của ShowModalDialog phải là Form Tham khảo VD bật-tắt hiển thị Label1 và Label2 : http://www.cadviet.com/upfiles/3/formex.zip 1 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
Jin Yong 337 Báo cáo bài đăng Đã đăng Tháng 3 15, 2011 Bạn gia_bach thân mến, ý mình ở đây chính là chương trình soạn thảo không nhận ra được frmHieuChinhMot chính là một form, do đó dòng lệnh frmHieuChinhMot.TextBox1.Visible không có hiệu lực Với lại, nếu mình hiển thị form theo cách của bạn: Application.ShowModalDialog(myForm) thì có thể gõ: myForm.TextBox1.Visible = TrueApplication.ShowModalDialog(myForm) duoc khong? 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 3 15, 2011 Bạn gia_bach thân mến, ý mình ở đây chính là chương trình soạn thảo không nhận ra được frmHieuChinhMot chính là một form, do đó dòng lệnh frmHieuChinhMot.TextBox1.Visible không có hiệu lực Với lại, nếu mình hiển thị form theo cách của bạn: Application.ShowModalDialog(myForm) thì có thể gõ: duoc khong? Em nghĩ là cái frmHieuChinhMot.TextBox1.Visible = true hay false phải cho vao event form_load hay form_Active thì dúng hơ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
gia_bach 1557 Báo cáo bài đăng Đã đăng Tháng 3 15, 2011 Bạn gia_bach thân mến, ý mình ở đây chính là chương trình soạn thảo không nhận ra được frmHieuChinhMot chính là một form, do đó dòng lệnh frmHieuChinhMot.TextBox1.Visible không có hiệu lực Với lại, nếu mình hiển thị form theo cách của bạn: Application.ShowModalDialog(myForm) thì có thể gõ: duoc khong? Tôi không biết bạn đang dùng chương trình soạn thảo gì nhưng nếu bạn khai báo biến đúng thì không có lí do gì "chương trình soạn thảo không nhận". Em nghĩ là cái frmHieuChinhMot.TextBox1.Visible = true hay false phải cho vao event form_load hay form_Active thì dúng hơn Phụ thuộc vào mục đích (ý đồ) của lập trình viên, các thuộc tính (properties) có thể gán(gọi) tại bất kỳ đâu trong Application.- trong cửa sổ Property của chương trình soạn thảo - trong các event như ý của phamngoctukts - hay như ý của Jin Yong : truớc khi hiển thị Form (gọi ShowModalDialog...) 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