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

Doan Van Ha

Moderator
  • Số lượng nội dung

    6.201
  • Đã tham gia

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

  • Ngày trúng

    445

Bài đăng được đăng bởi Doan Van Ha


  1. Đây là 1 table mà người vẽ chắc chưa rành dùng Cad, thay vì sử dụng width của pline thì họ lại dùng hatch, vừa thiếu chuyên nghiệp vừa nặng file.

    Viết tạm cho vui thôi chứ chả mặn với bài toán này. Còn mấy chỗ hở hoặc dư thì bạn dùng extend hoặc trim để xử thủ công (viết lisp cũng được nhưng mất công).

    
    (defun C:ABC(/ Midle ss i ent lst p1 p2 p3 p4)
     (defun Midle(p q) (mapcar '(lambda(p q) (/ (+ p q) 2.0)) p q))   (setq ss (ssget '((0 . "HATCH"))) i 0)
     (repeat (sslength ss)
      (setq lst nil ent (ssname ss i) i (1+ i))
      (setq lst (entget ent) lst (vl-remove-if '(lambda(x) (or (/= (car x) 10) (equal (cdr x) '(0.0 0.0 0.0)))) lst))
      (setq lst (vl-sort lst '(lambda(x y / p) (setq p (cdr (car lst))) (< (distance p (cdr x)) (distance p (cdr y))))))
      (setq p1 (cdr (car lst)) p2 (cdr (cadr lst)) p3 (cdr (caddr lst)) p4 (cdr (cadddr lst)))
      (entmakex (list (cons 0 "Line") (cons 10 (Midle p1 p2)) (cons 11 (Midle p3 p4))))
      (entdel ent))
      (princ))
    
    • Like 1

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

    Sở dĩ mình cần biến này để viết lisp giải quyết vấn đề sau:

    - khi dùng lệnh STRETCH mà trạng thái group đang bật thì một số đối tượng nằm trong group sẽ bị ảnh hưởng. Do vậy trước khi dùng lệnh sketch phải tắt group đi.

    - Lisp mình viết như sau, nhưng mình thấy ko ổn lắm. Nhờ các bạn sửa giùm:

    
    (defun C:S (/ CPS) ;;; STRETCH neu Group "ON" thi tat di, sau do bat lai. CPS = current pickstyle
    
      (setq CPS (getvar "PICKSTYLE"))
      (if (or (=  1 CPS) (= 3 CPS))
      	(setvar "PICKSTYLE" 0)
        )
      (command "STRETCH")
      (setvar "PICKSTYLE" CPS)  
      (princ)
      )

    Cám ơn các ban!.

    1. Không nên đặt tên lệnh là "S" vì nó trùng với lệnh tắt "STRETCH".
    2. Khái niệm "mình thấy ko ổn lắm" là rất mơ hồ.

    3. Có vài điều cần sửa nữa.

    Các câu hỏi của bạn luôn khó hiểu và lủng củng, cần chú ý.

    • Like 1

  3. Test một vài hàm đơn giản rồi cho lặp nhiều vòng trong các đời Cad chưa nói lên được tốc độ chạy lisp của từng đời Cad.

    Khi tool đó tập hợp rất nhiều hàm khác nhau thì chưa biết điều gì xãy ra.
    Tôi đã test hơn chục tool của tôi viết trên Cad2007, Cad2021 và ZWCad2020 đều cho kết quả Cad2007 nhanh hơn rất nhiều Cad2021 và ZWCad2020.
    Đó là 1 thực tế cần quan tâm, chia sẻ để mọi người biết thôi, chứ không tranh luận gì. 


  4. 27 phút trước, cuongtk2 đã nói:

    @Doan Van HaCad 2007 được cái là khởi động nhanh. Nhưng em nghĩ nó không chạy nhanh hơn cad đời sau.

    AutoLisp chỉ chạy đơn luồng nên đời cad nào nó cũng chạy như nhau thôi. 

    Bản vẽ với 50k line . Chạy hết 4.00s ở cad 2021. Bác thử xem cad 2007 chạy hết bao nhiêu time.

    dothoigian.dwg

    dothoigian.lsp

    Câu tô đậm không đúng đâu. Anh có rất nhiều soft liên quan tốc độ, test trên 2007 nhanh hơn Cad >2020 rất nhiều


  5. 4 phút trước, nguyenkienAgr đã nói:

    Ý mình là khi mở 1 bản vẽ ra thì làm sao biết được trang thái group đang bật (ON) hay đang tắt mà không cần ấn tổ hợp phím Ctr+Shift+A.

    Nó chắc có 1 biến hệ thống quản lý trạng thái này nhưng mình ko biết biến ấy là gì.

    Mục đích để mình thêm tùy chọn trong lisp. Ví dụ khi gọi lệnh Edit Text thì trạng thái group chuyển sang OFF nếu đang ở trạng thái ON.

    Không biết ý tưởng này có vớ vẩn quá không ? Thành thực xin lỗi các bạn nếu topic này làm các bạn khó chịu. Chúc các bạn một ngày cuối tuần vui vẻ :)

    Thì biến "PICKSTYLE" đó.

    • Like 1

  6. 2 giờ trước, nguyenkienAgr đã nói:

    Chào các bạn, 

    Mình muốn biết trạng thái group ON hay OFF thì dùng hàm nào nhỉ? Chỉ dẫn giúp mình với. Cám ơn các bạn!.

    Có phải bạn đang muốn tìm "PICKSTYLE" ?

    Giá trị bằng 0 >> không chọn group được

    Giá trị bằng 1 >> chọn được group

    Ngoài ra còn có 2 giá trị 2 và 3

    • Like 1

  7. 1 giờ} trướ}c, Leeboow đã nói:

    Chào các bác,

    Các bác cho em hỏi có cách nào để set current layer là layer 0 cho hàng loạt file cad mà không cần mở file cad lên không nhỉ? 

    thanks các bác. 

    Đa số câu hỏi của bạn là không có ý nghĩa thực tế nhiều, nhưng bạn vẫn đặt yêu cầu viết lisp?


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

    Wao, hay quá bro ơi. cảm ơn rất nhiều nhé. Bài viết của huynh hay và vô cùng hữu ích luôn.
    Không biết huynh có cách nào check tương tự cho các lệnh PURGE, UNITS và STYLE không nhỉ?

    Chân thành cảm ơn huynh

    Câu hỏi sai: một bên là lệnh, 1 bên là biến. Với 1 lệnh có thể có rất nhiều biến liên quan. Với 1 biến cũng có nhiều lệnh liên quan.
    Nói chung không thể đem mạ ngoài đồng mà nấu cơm được.


  9. 14 phút trước, Leeboow đã nói:

    Các bro cho mình hỏi có lisp nào phục vụ cho việc check các biến điều khiển trong cad không nhỉ?

    Ví dụ như: lệnh PSL, LTS, MEASURMENT,... 

    Mình muốn kiểm tra xem các biến này có được set về hệ số 1 chưa. Nhưng gõ từng lệnh để check và mở từng bản vẽ lên thì khá lâu.

    Không biết có lisp nào check cùng lúc nhiều bản vẽ cho các lệnh này không nhỉ.

    Đồng thời nếu chỉnh sửa hàng loạt về giá trị nào đó thì càng tuyệt với.

    Mong các huynh chỉ giáo.

     

    Màu xanh: dùng lệnh sysvdlg >> save all >> đọc giá trị tất cả biến hệ thống, còn biến môi trường thì phức tập hơn.
    Màu vàng: câu này mênh mông bát ngát, không nói khơi khơi được

    • Like 1
×