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

ngokiet

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

    339
  • Đã tham gia

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

  • Ngày trúng

    29

Cộng đồng

120 (tàm tạm)

About ngokiet

  • Cấp bậc
    biết dimdiameter

Khách truy cập Tiểu sử gần đây

1.896 chế độ xem tiểu sử
  1. ngokiet

    Hỏi cách chuyển layer đường tròn

    À mình mới thử. Thấy đúng. string hay int đều được. @vanlam6408 Hình như bác ít test bằng Console trong vlide. Bác vào vlide nhấn F6. Cửa sổ dòng lệnh hiện ra thì bác có thể test thoải mái mà. Ví dụ như đánh (vla-put-color (vlax-ename->vla-object(car(entsel))) "2") Thì nó sẽ cho chọn object và set color là 2. Hay nhấn (getvar "CECOLOR") là nó trả lới giá trị của cecolor. Vì vậy bạn có thể test nhanh lệnh nào sai để sửa lại cho đúng. Lệnh gộp cũng có thể tách ra test thử. Hy vọng bác có thể nhanh viết lisp được riêng cho mình. Mình không thích vla nhiều mà thích lisp thường hơn. Nó nhanh hơn dùng vla vì khi sài vla nó sửa từng lần 1 trong bản vẽ. Còn entmod thì nó sửa 1 lần nên nhanh hơn. Nhất là khi vẽ mấy bãng table. Vla thích hợp khi đọc dữ liệu từ các app khác nhiều hơn.
  2. ngokiet

    Hỏi cách chuyển layer đường tròn

    (getvar "CECOLOR") của mình nó cho ra kết quả string nên cái (cc) sau đổi thành (atoi cc) @vanlam6408 Cái cc chỉ cho vla-put-color thôi. Bác sửa đoạn (vla-put-Color x (getvar "CECOLOR")) thành (vla-put-Color x cc) các thứ khác giữ nguyên. Còn lỗi "error: bad DXF group: (-1 . #<VLA-OBJECT IAcadLWPolyline 2342be54>)" là do bác dùng list là object chứ không phải là ename. Còn không có acet thì lisp trên của mình sửa lại vậy. (setq ll (list (cons 8 (getvar 'clayer)) (cons 6 (getvar 'celtype)) (cons 62 (if (eq (setq ll (getvar "cecolor")) "BYLAYER") 256 (if (eq ll "BYBLOCK" ) 0 (atoi ll)))) (cons 370 (getvar 'celweight)))) (mapcar '(lambda(x) (entmod (cons (cons -1 x) ll))) (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget)))))
  3. ngokiet

    Hỏi cách chuyển layer đường tròn

    Mình nghĩ nó sai ở đây (vla-put-Color x (getvar "CECOLOR")) vì khi Cecolor = Bylayer hay byblock sẽ bị lỗi. Vì vậy cần làm thêm biên cc (thêm dòng này trước lệnh mapcar) (setq cc (if (eq (setq cc (getvar "cecolor")) "BYLAYER") 256 (if (eq cc "BYBLOCK" ) 0 (atoi cc)))) và sửa thành (vla-put-Color x cc) Còn làm thử theo entmod (setq ll (list (cons 8 (getvar 'clayer)) (cons 6 (getvar 'celtype)) (cons 62 (if (eq (setq ll (getvar "cecolor")) "BYLAYER") 256 (if (eq ll "BYBLOCK" ) 0 (atoi ll)))) (cons 370 (getvar 'celweight)))) (mapcar '(lambda(x) (entmod (cons (cons -1 x) ll))) (acet-ss-to-list (ssget '((0 . "CIRCLE")))))
  4. ngokiet

    Hỏi cách chuyển layer đường tròn

    Bạn nên nghiên cứu các lệnh và biến 1 chút mới xử lý được. Xem khi biến CECOLOR , CELTYPE , CELWEIGHT khi ByLayer, ByBlock là có giá trị như thế nào? So sánh với các hàm vla thì giá trị tương ứng là bao nhiêu vì có thể khác nhau. Mình ko trên máy nên ko test được. Mấy hàm vla mình ít sài nên ko nhớ rõ lắm. không chừng bác dùng hàm vẽ lại circle đó rồi xoá cái cũ đi cũng dễ hơn.
  5. ngokiet

    Hỏi cách chuyển layer đường tròn

    Bạn chuyển layer thì nó chuyển layer là đúng rồi. Còn chuyển các thứ khác thì phải dùng lệnh tương ứng. Như vla-put-color/linetype/lineweight để set thêm. Mình thường sài entmod để chuyển 1 lần tất cả thông số thì khoẻ hơn.
  6. ngokiet

    Hướng dẫn sử dụng mã Lisp

    Bác thử (setvar 'attdia 0) xem
  7. Nó có có đâu mà thấy. Bạn có thễ lạo lệnh m2p như hướng dẫn để gán cho F1 hay Tìm lệnh cancel để gán cho F1 để chuyển F1 thành Cancel như ESC. Nếu ko có gán thì nó là help.
  8. ngokiet

    Sửa lại lệnh DIM cho tiện dụng hơn

    Nếu bạn sài cad đời cao thì bạn gán biến dimlayer là dim thì dim nó sẽ tạo ở layer dim. còn bạn muốn viết lisp thì phải kết thúc lệnh command thì mới setvar clayer lại được. ví dụ: (defun c:dl(/ ll) (setq ll (getvar 'clayer)) (setvar 'clayer "dim") (command "_dimlinear") (while (/= (getvar 'cmdactive) 0) (command pause)) (setvar 'clayer ll))
×