Chuyển đến nội dung
Diễn đàn CADViet
trivan77

cutdim, movedim, blockattribute

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

em đang tự học về code Autocad trong c#,.NET

mọi người cho phép em hỏi 2 vấn đề như sau ạ:

1. để thay đổi giá trị của block attribute thì mình sử dụng phương thức hay thay đổi thuộc tính nào ạ ? ( em đã lấy ra được đối tượng block )

2. em đang dự định thực hiện code 2 phương thức movedim và cutdim, mọi người có thể gợi ý giúp em 1 chút ý tưởng được không ạ ( tác động đến thuộc tính, phương thức nào của đối tượng dimension,...), em đã lấy ra đối tượng dimension rồi ạ

Em xin chân thành cảm ơn ạ

Chỉnh sửa theo trivan77
em ấn nhầ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

1. Lấy từ AttributeColection

 /// <summary>
        /// Set value a tag in Attribute Block
        /// </summary>
        /// <param name="entId"></param>
        /// <param name="thamso"></param>
        /// <param name="noidung"></param>
        /// <returns></returns>
        public static void SetBlockAtt(ObjectId entId, string thamso, string noidung)
        {
            using (Transaction tr = entId.Database.TransactionManager.StartTransaction())
            {
                BlockReference blkRef = (BlockReference)tr.GetObject(entId, OpenMode.ForRead);
                AttributeCollection attCol = blkRef.AttributeCollection;

                foreach (ObjectId attId in attCol)
                {
                    AttributeReference attRef = (AttributeReference)tr.GetObject(attId, OpenMode.ForRead);
                    if (attRef.Tag.ToUpper() == thamso.ToUpper())
                    {
                        attRef.UpgradeOpen();
                        attRef.TextString = noidung;
                    }
                }
                tr.Commit();
            }

        } // method

 

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

2. Move ObjectId

 /// <summary>
        /// Moves an ObjectId.
        /// </summary>
        /// <param name="entityId">The entity ID.</param>
        /// <param name="displacement">The displacement.</param>
        public static void Move(this ObjectId entityId, Vector3d displacement)
        {
            using (Transaction tr = entityId.Database.TransactionManager.StartTransaction())
            {
                Entity entity = tr.GetObject(entityId, OpenMode.ForWrite) as Entity;
                entity.TransformBy(Matrix3d.Displacement(displacement));
                tr.Commit();
            }
        }

 

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

To cuongtk2:
Thưa a, em cũng đã từng điều chỉnh value cho attribute theo tag như cách a làm nhưng không được ạ ? Nếu được em có thể đăng code lên cho a check giúp được không ạ ?

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

[CommandMethod("Sua_TKT")]
          public void sua_tkThep()
          {
               Database db = doc.Database;

               Editor ed = doc.Editor;

               Transaction tr = db.TransactionManager.StartTransaction();

               using (tr)
               {
                    try
                    {
                         doc.LockDocument();
                         

                         BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                         BlockTableRecord btr = tr.GetObject(bt[thong_Ke_Thep.tenBlock], OpenMode.ForWrite) as BlockTableRecord;

                         foreach (ObjectId objId_loopVariable in btr.GetBlockReferenceIds(true, true))
                         {
                              BlockReference bl = (BlockReference)tr.GetObject(objId_loopVariable, OpenMode.ForWrite);

 

 

                               // ========================================================================
                              if (bl.AttributeCollection.Count == 1)
                              {
                                   //...
                              }

 

                              // ========================================================================

                              if (bl.AttributeCollection.Count == 2)
                              {
                                   Table table_1 = (Table)tr.GetObject(table.Id, OpenMode.ForWrite);


                                   table_1.Cells[soHang + 1, 1].Value = thong_Ke_Thep.soHieu;
                                   table_1.Cells[soHang + 1, 1].Alignment = cellAlign;

                                   //....

                                   

                                   AttributeCollection attCol = bl.AttributeCollection;

                                   foreach (ObjectId attId in attCol)
                                   {
                                        AttributeReference attRef = (AttributeReference)tr.GetObject(attId, OpenMode.ForRead);

                                        string tag = attRef.Tag;
                                        if (tag == "L1")
                                        {
                                             attRef.UpgradeOpen();
                                             attRef.TextString = L1;
                                             //attRef.UpgradeOpen();
                                        }

                                        

                                        if (tag == "L2")
                                        {
                                             attRef.UpgradeOpen();
                                             attRef.MTextAttribute.Contents = L2;
                                             //attRef.UpgradeOpen();

                                        }

                                        
                                        //attRef.UpdateMTextAttribute();
                                   }

                              }

                         }
                         tr.Commit();
                    }
                    catch (Autodesk.AutoCAD.Runtime.Exception ex)
                    {
                         MessageBox.Show(ex.Message);
                    }

               }


          }

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

1.code của em sử dụng dữ liệu ngoài nhiều quá không kiểm tra được. Quá nhiều biến không thấy khai báo.

2. Em chưa phân biệt được đối tượng Insert (thứ đã chèn vào bản vẽ) và đối tượng Block( thứ dùng để chèn),

Anh nghĩ em nên học cách lấy đối tượng từ bản vẽ. ed.GetEntity() để tác động vào đối tượng đó.

http://docs.autodesk.com/ACD/2010/ENU/AutoCAD .NET Developer's Guide/index.html

Chúc thành công

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

×