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

cuongtk2

Thành viên
  • Số lượng nội dung

    441
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    39

Bài đăng được đăng bởi cuongtk2


  1. (defun c:mocranhgioi ( / ENT I LS MODELSPACE N P1 P2)
      (if (not (tblsearch "block" "mocranhgioi"))
        (progn
          (entmake '((0 . "BLOCK")(2 . "mocranhgioi")(70 . 2)(10 0.0 0.0 0.0)))
          (entmake '((0 . "LINE")(8 . "0") (10 -0.7 0.0 0.0) (11 0.7 0.0 0.0)))
          (entmake '((0 . "LINE")(8 . "0") (10 0.0 0.7 0.0) (11 0.0 -0.7 0.0)))
          (entmake '((0 . "CIRCLE")(8 . "0") (10 0.0 0.0 0.0) (40 . 0.7)))
          
          (entmake '((0 . "ENDBLK")))
          ))
        
      
    (setq ent (car (entsel)))
     
    (setq modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
    (setq ls (car(acet-pline-segment-list (entget ent)))
          n (length ls)
          i 0)
    (while (< i (- n 1))
      
        (progn
          (setq p1 (vlax-3d-point (nth i ls))
                p2 (vlax-3d-point (nth (+ i 1) ls))
                )
         (vla-AddDimAligned modelSpace p1 p2 p2)
         (vla-InsertBlock modelSpace p1 "mocranhgioi" 1 1 1 0)
         )
       
      (setq i (1+ i))
      )
      )
                      
    6 giờ trước, alisp đã nói:

    Cái block của tôi nó đẹp như thế mà bạn nỡ nào dời điểm chèn nó tít tận đâu đâu để làm gì vậy? Nó vẫn chèn đó chứ nhưng do điểm chèn không đúng nên zoom all mới thấy.

    Hay là bạn muốn vẽ cái circle và hatch thay vì block? Nếu vậy chờ người khác viết cho bạn nhé.

    Nên code thêm block vào, vì trong bản vẽ không phải lúc nào cũng có block đó.


  2. Đã sửa được

     [CommandMethod("wblockEntity")]
    
            static public void wblockEntity()
            {
                Document doc = AcadApp.DocumentManager.MdiActiveDocument;
                Database db = doc.Database;
                Editor ed = doc.Editor;
    
                using (var tr = db.TransactionManager.StartTransaction())
                {
                    PromptEntityOptions peo = new PromptEntityOptions("");
                    peo.SetRejectMessage("Đối tượng không phải block");
                    peo.AddAllowedClass(typeof(BlockReference), true);
                    peo.Message = "Chọn Block";
                    var per = ed.GetEntity(peo);
    
                    if (per.Status != PromptStatus.OK)
                        return;
                    var id = per.ObjectId;
                    var btr = tr.GetObject(id, OpenMode.ForRead) as BlockTableRecord;
                    var blr = tr.GetObject(id, OpenMode.ForRead) as BlockReference;
    
                    if (blr.IsDynamicBlock)
                    {
                        btr = tr.GetObject(blr.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
                    }
    
                    string FileName = "c:/temp/" + btr.Name + ".dwg";
                    
                    using (Database newDb = db.Wblock(btr.ObjectId))
                    {
                        newDb.UpdateExt(true);
                        newDb.UpdateThumbnail = 16;
                        newDb.SaveAs(FileName, DwgVersion.AC1021);
                    }
                  
    
                    tr.Commit();
                }
    
    
            }

     


  3. Trong code thiếu gì để các Dynamic properties theo vào 

    [CommandMethod("wblockEntity")]
    
            static public void wblockEntity()
            {
                Document doc = AcadApp.DocumentManager.MdiActiveDocument;
                Database db = doc.Database;
                Editor ed = doc.Editor;
    
                using (var tr = db.TransactionManager.StartTransaction())
                {
                    PromptEntityOptions peo = new PromptEntityOptions("");
                    peo.SetRejectMessage("Đối tượng không phải block");
                    peo.AddAllowedClass(typeof(BlockReference), true);
                    peo.Message = "Chọn Block";
                    var per = ed.GetEntity(peo);
    
                    if (per.Status != PromptStatus.OK)
                        return;
                    var id = per.ObjectId;
                    var btr = tr.GetObject(id, OpenMode.ForRead) as BlockTableRecord;
                    var blr = tr.GetObject(id, OpenMode.ForRead) as BlockReference;
    
                    if (blr.IsDynamicBlock)
                    {
                        btr = tr.GetObject(blr.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
                    }
    
                    string FileName = "c:/temp/" + btr.Name + ".dwg";
    
                    ObjectIdCollection ids = new ObjectIdCollection();
                    foreach (ObjectId ent in btr)
                    {
                        ids.Add(ent);
                    }
                    using (Database newDb = new Database(true, false))
                    {
                       
                        db.Wblock(newDb, ids, new Point3d(), DuplicateRecordCloning.Ignore);
                        newDb.SaveAs(FileName, DwgVersion.AC1021);
                    }
    
    
                    tr.Commit();
                }
    
    
            }

     


  4. 11 giờ trước, alisp đã nói:

    Không thấy thớt nói năng chi, chắc chưa hài  lòng, có lẽ phải tính phương án quét toàn bộ vòng tròn chứ pick từng cái tốn time quá chăng? Nếu như vậy chắc phải trả phí chứ phần free tới đây là chấm dứt đó nhen!!

    Tính ra tìm được vị trí dim chỗ nào cho phù hợp không phải là một vấn đề đơn giản đối với phương án đối với quét chọn. Bởi vì có thể chỉ tính được những thứ có sẵn mà còn không tính ra đến bản thân đường dim phát sinh ra từ việc dim đường tròn kế trước. Chưa kể còn phải trừ chỗ để làm việc khác.

    Tính ra dim từng nút một chủ động hơn nhiều


  5. Viết thế này cho gọn @thiep

    (setq ent (entsel)
          cent (acet-dxf 10 (entget (car ent)))
          pick (cadr ent)
          r (distance cent pick)
          ang (angle cent pick)
          phantu (* pi 0.25)
          ang (fix (/ ang phantu)
          ang (* ang phantu)           ; p13_1,  p14_1
          ang1 (+ ang phantu)       ;  p13_2,  p14_2
          )
     

    • Like 1

  6. Chắc là do Mtext thôi, Dtext chỉ có 1 font duy nhất không bao giờ nhảy font sang chữ HOA đâu. Explode ra nếu thấy thành nhiều đoạn là có nhiều font trong 1 Mtext. Thường gặp khi edit Mtext ,style standard để font txt.shx sẽ không có ký tự tiếng Việt tương ứng nên lúc đó nó nhảy font lung tung.

    Mình thường select all  rồi chuyển sang 1 font nào đó (Arial) sẽ hết.

    Cảm giác giống như Normal Template của Word để font ABC khi mình gõ Unicode đôi lúc nó lại nhảy sang font ABC.


  7. Dim dưới và phải.

    (defun c:test ( / CENT ENT P1 P1A P2 P2A RAD)
    (setq ent (entget (car (entsel))))
    (setq cent (acet-dxf 10 ent)
          rad (acet-dxf 40 ent)
          p1 (polar cent 0 rad)
          p1a (polar cent 0 ( * rad 1.2))
          p2 (polar cent (* pi 1.5) rad)
          p2a (polar cent (* pi 1.5) ( * rad 1.2))
          )
    (command "dimordinate" p1 p1a)
    (command "dimordinate" p2 p2a)
    )

     

    • Vote tăng 1

  8. Tạo text mới thì không nên, lý do : style, height , widthfactor có thể khác nhau ở mỗi bản vẽ sinh ra tạo text không như ý muốn.

    
    (DEFUN c:tg  ( / LOAITEXT NOIDUNG OLD SS TEXT TONGDAI)
      (SETQ ss (ACET-SS-TO-LIST (SSGET '((0 . "*LINE")))))
      (SETQ ss (MAPCAR 'VLAX-ENAME->VLA-OBJECT ss))
      (SETQ tongdai 0)
      (FOREACH n ss (SETQ tongdai (+ tongdai (VLA-GET-LENGTH n))))
    
      (SETQ text (ENTGET (CAR (ENTSEL "Append to: "))))
      (SETQ loaitext (ACET-DXF 0 text))
      (IF (OR
            (= loaitext "TEXT")
            (= loaitext "MTEXT")
            )
        (PROGN
          (SETQ old (ASSOC 1 text))
          (SETQ noidung (STRCAT (CDR old) ", L= " (RTOS (/ tongdai 1000) 2 2) " m"))
    
          (SETQ text (SUBST (CONS 1 noidung) old text))
          (ENTMOD text)
    
          )
        (ALERT "Vui long chon vao Text or Mtext")
        )
      (PRINC)
      )

     


  9. Nói rõ về cái để double click trong1. thì mới giúp được.

    - Đang phỏng đoán nó là 1 block có chứa 1 số entity bị tắt layer, hoặc bị ẩn năm ở xa chỗ mình cần nhìn khi editblock.

    - Hoặc điểm chèn của khối nằm rất xa mấy cái viền khung tên (hay gặp khi dùng Paste để tạo khối mà không ấn định basepoint). Bạn thử pick vào block xem nó hiện điểm insert ở nơi nào là rõ.


  10. (defun c:hcncheo( / ANG ANG1 DIST E ENT ENTS H L1 L2 LISTDINH NAME OBJ P1 P2 P3 P4 P5 P6 PARAM PE PS PT)
    (setq ents (entsel "\nPick entity"))
    (if (null ents) (exit))
    (setq pt (cadr ents)
          ent (car ents)
          name (acet-dxf 0 (entget ent)))
    (if (null (or (= name "LWPOLYLINE")
    	(= name "LINE"))
    	  )
      (exit)
      )
    (if (= name "LWPOLYLINE")
    (setq obj (vlax-ename->vla-object ent)
          pt (vlax-curve-getclosestpointto obj pt)
          param (fix (vlax-curve-getParamAtPoint obj pt))
          ps (vlax-curve-getPointAtParam obj param)
          pe (vlax-curve-getPointAtParam obj (+ param 1))
          )
      )
    (if (= name "LINE")
      (setq ps (acet-dxf 10 (entget ent))
    	pe (acet-dxf 11 (entget ent))
    	)
      )
    
    (setq p1 (if (< (car ps) (car pe)) ps pe)
          p2 (if (< (car ps) (car pe)) pe ps)
          ang (angle p1 p2)
          ang1 (+ ang (* pi 0.5))
          dist (DISTANCE p1 p2))
    (alert (strcat "L= "  (rtos dist 2 2)))
    (setq l1 (getdist "\nL1:"))
    (setq l2 (getdist "\nL2:"))
    (if (> (+ l1 l2) dist)
      (alert "Tong L1 + L2  qua lon")
      )
    (setq h (getdist "\nH:"))
    
    (setq p3 (polar p1 ang l1)
          p4 (polar p2 ang (- 0 l2))
          p5 (polar p4 ang1 h)
          p6 (polar p3 ang1 h)
          )
    (DEFUN list_point_pline  (p1 w)
      (LIST (LIST 10 (CAR p1) (CADR p1)) (CONS 40 w) (CONS 41 w) (CONS 42 0.0))
      )
    (DEFUN make_lwpolyline  (list_dinh dong_lai do_day layer / dlist elist1 e_list n i)
      (SETQ n (LENGTH list_dinh))
      (SETQ dlist nil)
      (SETQ i 0)
      (WHILE (< i n)
        (SETQ dlist (APPEND dlist
                            (list_point_pline (NTH i list_dinh) do_day)
                            )
              )
        (SETQ i (1+ i))
        )
    
      (SETQ elist1 (LIST (CONS 0 "LWPOLYLINE")
                         (CONS 100 "AcDbEntity")
                         (CONS 410 "Model")
                         (CONS 8 layer)
                         (CONS 100 "AcDbPolyline")
                         (CONS 90 n)
                         (CONS 70 dong_lai)
     ;(cons 43 0.0)
                         (CONS 38 0.0)
                         (CONS 39 0.0)))
      (SETQ e_list nil)
      (SETQ e_list (APPEND elist1 dlist))
      (SETQ e_list (APPEND e_list (LIST '(210 0.0 0.0 1.0))))
      (ENTMAKE e_list)
      )
    
    (DEFUN make_dim_y1  (style p1 p2 p3  ang layer / d e_list basepoint p4)
      
      (SETQ e_list (LIST
                     (CONS 0 "DIMENSION")
                     (CONS 100 "AcDbEntity")
                     (CONS 67 0)
                     (CONS 410 "Model")
                     (CONS 8 layer)
                     (CONS 100 "AcDbDimension")
                     (cons 10 p3)
                     (cons 11 p3)
                     (LIST 12 0.0 0.0 0.0)
                     (CONS 70 32)
                     (CONS 1 "")
                     (CONS 71 5)
                     (CONS 72 1)
                     (CONS 41 1.0)
                     (CONS 42 0)
                     (CONS 52 0.0)
                     (CONS 53 0.0)
                     (CONS 54 0.0)
                     (CONS 51 0.0)
                     (LIST 210 0.0 0.0 1.0)
                     (CONS 3 style)
                     (CONS 100 "AcDbAlignedDimension")
                     (cons 13 p1)
                     (cons 14 p2)
                     (LIST 15 0.0 0.0 0.0)
                     (LIST 16 0.0 0.0 0.0)
                     (CONS 40 0.0)
                     (CONS 50 ang)
                     (CONS 100 "AcDbRotatedDimension")
    		 )
            )
      (ENTMAKE e_list)
    
    
      )
    
    (setq listdinh (mapcar '(lambda (e) (list (car e) (cadr e))
    			  )
    		       (list p3 p4 p5 p6))
          )
    (MAKE_LWPOLYLINE listdinh 1 0 "chunhat")
    
    (MAKE_DIM_Y1 "Standard" p3 p6 (polar p1 (- 0 ang) (+ h h)) ang1 "dim")
    (MAKE_DIM_Y1 "Standard" p1 p3 (polar p1 ang1 (+ h h)) ang  "dim")
    (MAKE_DIM_Y1 "Standard" p4 p2 (polar p1 ang1 (+ h h)) ang  "dim")
    
    
    )

    thử lại nhé

    • Like 1
×