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

Mèo Mun

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

    42
  • Đã tham gia

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

  • Ngày trúng

    2

Bài đăng được đăng bởi Mèo Mun


  1. 23 phút trước, vietcuongngx đã nói:

    không, bạn cứ nói rõ hơn tý đc không, bạn thử lấy một ví dụ thế nào để lệnh 3dmove làm đc mà lệnh move không làm đc

    Khi di chuyển chỉ dùng chuột, không sử dụng chế độ bắt điểm.

    + Lệnh Move: Chỉ di chuyển đối tượng theo mặt phẳng Oxy trên màn hình, không di chuyển theo phương Z

    + Lệnh 3DMove: Xuất hiện biểu tượng XYZ. Bấm vào trục nào thì di chuyển đối tượng theo phương đó, kể cả phương Z , nó hiệu quả khi đang ở khung nhìn 3d khi không biết trục XYZ là phương nào.


  2. 12 phút trước, Bee đã nói:

    Ok đây là phần check justify với trường hợp là các dtuong cùng left hoặc right để mirror. Nếu lẫn lộn thì bạn tự modify code thêm nhé.

    • mirror_blockatt.lsp
      lisp help
    •  
    
    (defun c:mirror_blockatt  ()
      
      (command "select" "all" "")
      (setq remove (ssget "p"))
    
      (print "MIRROR Select objects: ")
      (if (setq ss (ssget))
        (progn
          (command "mirror" ss "" pause pause "N")
    
          (command "select" "all" "remove" remove "")
          (setq new (ssget "p"))
    
          (if (= 0 (check_justify (ssname new 0)))
            (setq j "R")
            (setq j "L")
            )
    
          (command "_justifytext" new "" j "")
          )
        )
      (princ)
      )
    
    (defun check_justify (en / ent justify)
      (setq ent (entnext en))
      (while (/= "SEQEND" (cdr (assoc 0 (entget ent))))
        (if (= "ATTRIB" (cdr (assoc 0 (entget ent))))
          (setq justify (cdr (assoc 72 (entget ent))))
          )
        (setq ent (entnext ent))
        )
      justify
      )

    @DVH: chắc bạn này chưa sài qua autolisp duyệt att in block. ^_^

    Cám ơn bác. Em check thấy ổn.


  3. 24 phút trước, Doan Van Ha đã nói:

    Bạn bổ sung 1 hàm if: nếu nó là left thì mirror thành right; nếu nó là right thì mirror thành left. Làm được?

     

    21 phút trước, Bee đã nói:

    Dynamic block khong flip duoc justify att.

    Bạn thêm vào lisp phần check justify của att rồi cho nó tự xử. Em đang định post thì bác Hạ pót roài ^_^

     

     

    Bác giúp em code cách kiểm tra :Justify của Att và Chọn ra được tên dxf của Block với . :((( Kiểm tra thuộc tính đối tượng thì em đang dùng NENTSEL, nhưng để chọn được đối tượng khối ngoài cùng ( là Block chứa nó ) , thì em chưa biết làm. 

    Các bác code luôn vào lisp của em luôn cho tiện ạ.

    Đến đoạn này là em bí rồi !!!  :((


  4. 34 phút trước, Doan Van Ha đã nói:

    Lệnh MI thì chắc chịu. Chơi lisp thì kết hợp được cả MIRROR và Justifytext thành 1 lệnh duy nhất. Điều này bạn làm được mà

    Bác #Doan Van Ha

    Có lẽ sẽ tuyệt hơn nếu chỉ click vô cái hình mũi tên đối xứng, là đối xứng vèo 1 cái Block. ^^. Chứ thêm thao tác sẽ làm mất đi tính hay của Attriblock. 

    Lisp em cũng vừa viết thử như sau: 

     

    (defun c:dxt ( / object pt1 pt2)
      (setq object (car (entsel "Chon block doi xung: "))
        pt1 (cdr (assoc 10 (entget object)))
        pt2 (list (car pt1) (+ (cadr pt1) 100000)))
      (command "MIRROR" object "" "non" pt1 "non" pt2 "y")
      (command "_JUSTIFYTEXT" object "" "BR" "")
      (princ))

     

    + Tuy nhiên: Lisp có 1 nhược điểm: 

    - Giả sử ban đầu block của em đặt định dạng : Bottom Left   ---> Khi đối xứng qua lisp: thành Bottom Right.  Nhưng nếu em đối xứng lại 1 lần nữa: Thì Bottom Right ---> Không thể trở thành Bottom Left được. Chẳng lẽ lại tạo thêm cái lisp nữa cho thêm phần gay cấn hả bác ^^ :;):;)

    Lisp của bác #Bee cũng tương tự như vậy : ( Nhưng công nhận rất hay trong cách chọn lại tập đối tượng của bác :)))

    16 phút trước, Bee đã nói:

    Đang rảnh nên nghịch chút cho bạn làm luôn. Dùng lisp thôi ^_^

    • mirror_blockatt.lsp
      lisp help
    •  
    
    (defun c:mirror_blockatt  ()
      
      (command "select" "all" "")
      (setq remove (ssget "p"))
    
      (print "MIRROR Select objects: ")
      (if (setq ss (ssget))
        (progn
          (command "mirror" ss "" pause pause "N")
    
          (command "select" "all" "remove" remove "")
          (setq new (ssget "p"))
    
          (command "_justifytext" new "" "R")
          )
        )
      (princ)
      )
    

     


  5. 1 giờ trước, Bee đã nói:

    Sau khi mirror bạn dùng lệnh: _justifytext chọn right rồi hãy chỉnh value att thì nó vẫn giữ đc căn lề phẳng 1 bên bạn cần.

    ^_^

    ^_^ . Nhưng mà vậy thì hơi auto "tay"  quá ạ.

    Có hướng giải quyết nào mà chỉ cần Click vô nút Mirror là xong không anh #Bee @@. ??

    Còn nếu ko được chắc phải dùng cách của anh thật. :(


  6. + Em đang có vướng mắc, nhờ các bác giúp đỡ. Em đang tạo ra 1 Block có Attribute trong hình ảnh. 

    - Hình trái: Tạo text Attribute, có định dạng là căn lề trái.

    - Khi đối xứng. Thì Text Attribute đối xứng, tuy nhiên thì Text Attribute vẫn định dạng là căn lề trái.

    ---> Khi em thay đổi chữ trong Text, tức là thay đổi đi chiều dài của nó. Thì vị trí gắn text thay đổi.

    Câu hỏi em đặt ra: Nếu em muốn khi đối xứng + Thay đổi chiều dài của nó , mà text nó đổi sang dạng căn lề phải . Hoặc bằng cách nào đó bất kỳ để nó thẳng hàng theo bên phải. Thì em phải làm như thế nào ạ. Mong các bác hướng dẫn. ~|~~|~~|~

    ( Em có gửi file DWG kèm theo )

     

    Attribute.png

    Attribute.dwg


  7. Nếu muốn người khác giúp đỡ mình. Việc làm đầu tiên là bạn cẩn phải tôn trọng họ.

    Ở đây, việc tôn trọng bạn chỉ cần "Viết đúng chính tả, kiểm lại cẩn thận trước khi đăng bài" ! "Lồi, gi, sữa, biế, phụ..." Dấu chấm, dấu phẩy, viết hoa đầu dòng...

    Khắc phục xong, tôi sẽ trả lời giúp bạn ! Hoặc bạn hãy sử dụng tính năng tìm kiếm trên diễn đàn. Câu trả lời có nhiều rồi.

    Mong các bác khác không trả lời trước.

    • Like 1

  8. Quick code 

    (defun c:cpt(/ ss pt1)
      (setq pt1 (getpoint "\nChon diem goc copy : "))
      (setq ss (car (entsel "\n Chon Text:")))
     
      (while (and ss pt1)
        (command "._copy" ss "" pt1 (setq pt1 (getpoint pt1 "\n diem dich copy :")  ))
        (setq ss (entlast))
        (command "Textedit" "L" "") 
      )
    )
    

     

    Với cad đời cao: (Mình đang dùng cad 2015)

    Thì lệnh _.ddedit dường như không phù hợp, nên không chạy được như ý muốn.

    Thử lại lệnh gốc : Textedit thì ok. 


  9. Em muốn hoán đổi vị trí 2 text cho nhau, dùng lệnh này cũng đc nhưng phải làm nhièu thao tác qua,mà em cần phải hoán đổi vị trí text rất nhiều. Em muốn chỉ cần chon 2 text là nó tự chuyển vị trí cho nhau. Bac nào có thể sửa lại cho em đc không?Cam ơn các bác!!

    Thử cái này xem thế nào: http://www.cadviet.com/upfiles/7/159678_doitext.lsp

×