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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

4 phút trước, quocmanh04tt đã nói:

Nếu không giao thực thì nó không nằm trên đối tượng nào cả, ngược lại thì nó nằm trên cả 2.

ý là mình muốn loại nó ra nên có điều kiện khác 0 là được

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
5 phút trước, huunhantvxdts đã nói:

ý là mình muốn loại nó ra nên có điều kiện khác 0 là được

Biết lisp mà còn nói vậy. Nếu lisp trên ổn thì này (nhiều điểm) cũng ổn:

(defun IntersectWith_e1e2  (e1 e2 / gd lp pt)
  (if (setq gd (vlax-invoke
                 (vlax-ename->vla-object e1)
                 'IntersectWith
                 (vlax-ename->vla-object e2)
                 acExtendNone))
    (repeat (/ (length gd) 3)
      (setq pt (list (car gd) (cadr gd) (caddr gd))
            gd (cdddr gd))
      (if (zerop (distance (vlax-curve-getClosestPointTo e1 pt nil)
                           (vlax-curve-getClosestPointTo e2 pt nil)))
        (setq lp (cons pt lp)))))
  lp)

  • Like 1

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 giờ} trướ}c, quocmanh04tt đã nói:

Biết lisp mà còn nói vậy. Nếu lisp trên ổn thì này (nhiều điểm) cũng ổn:

(defun IntersectWith_e1e2  (e1 e2 / gd lp pt)
  (if (setq gd (vlax-invoke
                 (vlax-ename->vla-object e1)
                 'IntersectWith
                 (vlax-ename->vla-object e2)
                 acExtendNone))
    (repeat (/ (length gd) 3)
      (setq pt (list (car gd) (cadr gd) (caddr gd))
            gd (cdddr gd))
      (if (zerop (distance (vlax-curve-getClosestPointTo e1 pt nil)
                           (vlax-curve-getClosestPointTo e2 pt nil)))
        (setq lp (cons pt lp)))))
  lp)

sau 1 hồi test thấy sai sai ở đâu????

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

Các bác cho em hỏi:

Em tạo một lisp A với cú pháp (defun c:() ... và ghi vào file A.lsp sau đó load vào cad.

Trong lisp B (file B.lisp) em muốn dùng lệnh A thì em viết (command "A" "") nhưng khi thực thi lệnh B thì nó báo là không có lệnh A. Trong khi tại dòng command thì lệnh A thực thi ngon lành.

Xin chỉ giáo.

Cám ơn các bác.

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

Cám ơn bác Doan Van Ha, đã chạy ngon lành.

 

Em thắc mắc thêm :

1/ Lisp tạo block của em :

 

(defun C:CreateBlockLeverMB()

    (command "pline" '(-2.5 0) '(17.5 0) '(17.5 5) '(-2.5 5) "C" "")
    (setq Oj1 (entlast))
    (command "pline" '(-2.5 0) '(2.5 0) '(2.5 5) '(-2.5 5) "C" "")
    (setq Oj2 (entlast))
    (command "pline" '(0 0) '(2.5 2) '(-2.5 2) "C" "")
    (command "bhatch" "P" "S" "S" (entlast) "" "")
    (setq Oj3 (entlast))
    (command "MText" '(0 3.5) "S" "Small" "H" 2 "J" "MC" '(0 3.5) "CÐ" "")
    (setq Oj4 (entlast))
    (entmake '(
        (0 . "ATTDEF")         ; Tao doi tuong ATTDEF
        (8 . "0")           ; Layer  name      
        (10 0.0 0.0 0.0)
        (11 10 2.5 0.0)            
        (40 . 2.5)                                        
        (50 . 0)                   
        (7 . "Small")           
        (72 . 1)     ; Horizontal text : 0 = Left; 1= Center; 2 = Right
        (74 . 2)    ; Vertical text : 0 = Baseline; 1 = Bottom; 2 = Middle; 3 = Top
        (3 . "Enter the value")  
        (2 . "Lever")
        (1 . "%%p0,00m")            
        (70 . 0)                           
    ))            
    (setq Oj5 (entlast))
    (command "block" "Lever_MB" "A" "Y" "N" (list 0 0) Oj1 Oj2 Oj3 Oj4 Oj5 "")

)

 

Xin các bác chỉ giúp em cách thay mấy dòng gán Oj1, Oj2... cho đơn giản hơn. Tốt nhất là cho vào 1 biến duy nhất.

 

2. Em thấy để vẽ một số đối tượng bằng lệnh rất gọn như vẽ đường thẳng, đường tròn, ghi Mtex..mà sao các bác không dùng mà các bác lại dùng hàm entmake???

 

Cám ơn các bác.

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 giờ} trướ}c, NPQ đã nói:

Các bác chỉ giúp em cách thay mấy dòng gán Oj1, Oj2... cho đơn giản hơn. Tốt nhất là cho vào 1 biến duy nhất.

 

2. Em thấy để vẽ một số đối tượng bằng lệnh rất gọn như vẽ đường thẳng, đường tròn, ghi Mtex..mà sao các bác không dùng mà các bác lại dùng hàm entmake???

 

Cám ơn các bác.

 

1. Tìm hiểu hàm (entlast) sẽ hiểu tại sao phải Oj12345.

2. Tùy trường hợp người viết thích dùng command hay entmake. Tuy nhiên Entmake ít lỗi hơn, cad chạy nhanh hơn, chỉnh được nhiều thông số hơn, không bị thay đổi ở các phiên bản cad. Còn command có thể bị lỗi ở các phiên bản cad khác nhau do trình tự thực hiện lệnh bị thay đổi.

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
10 phút trước, Danh Cong đã nói:

 

1. Tìm hiểu hàm (entlast) sẽ hiểu tại sao phải Oj12345.

2. Tùy trường hợp người viết thích dùng command hay entmake. Tuy nhiên Entmake ít lỗi hơn, cad chạy nhanh hơn, chỉnh được nhiều thông số hơn, không bị thay đổi ở các phiên bản cad. Còn command có thể bị lỗi ở các phiên bản cad khác nhau do trình tự thực hiện lệnh bị thay đổi.

 

Cám ơn Bác Danh Cong đã dành thời gian để trả lời hơi ngố của em.

1. Em cũng đã tìm hiểu nhưng chưa ra, nếu có cách cho tất cả Oj12345 vào một biến thì mong bác chỉ cho em.

2. Dùng Entmake em thấy quá khó để hiểu hết các cons của nó.

Cám ơn Bác.

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
48 phút trước, NPQ đã nói:

 

Cám ơn Bác Danh Cong đã dành thời gian để trả lời hơi ngố của em.

1. Em cũng đã tìm hiểu nhưng chưa ra, nếu có cách cho tất cả Oj12345 vào một biến thì mong bác chỉ cho em.

2. Dùng Entmake em thấy quá khó để hiểu hết các cons của nó.

Cám ơn Bác.

1. Bạn nghĩ làm sao nếu 1 nhóm người, bạn muốn tóm cổ từng thằng, mà bạn lại đặt chung tên cho cả nhóm ? Gọi làm sao :)
2. Dxf có cái cần cái không, những cái mặc định cần thì bạn lập trình nhiều sẽ biết. Những thông số còn lại nó sẽ lấy theo thiết đặt mặc định

 

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
3 phút trước, ketxu đã nói:

1. Bạn nghĩ làm sao nếu 1 nhóm người, bạn muốn tóm cổ từng thằng, mà bạn lại đặt chung tên cho cả nhóm ? Gọi làm sao :)

 

Cám ơn bác đã trả lời cho em tuy nhiên, em nghĩ phải có một loại biến nào đấy như list để tóm nó vô chung chứ, do trình của em non quá nên chỉ nghĩ vậy chứ không biết có đúng không nữa. Nếu em làm cái bock có vài chục đối tượng thì phải tạo vài chục biến hay sao bác? 

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
32 phút trước, NPQ đã nói:

 

Cám ơn bác đã trả lời cho em tuy nhiên, em nghĩ phải có một loại biến nào đấy như list để tóm nó vô chung chứ, do trình của em non quá nên chỉ nghĩ vậy chứ không biết có đúng không nữa. Nếu em làm cái bock có vài chục đối tượng thì phải tạo vài chục biến hay sao bác? 

(setq ss (ssadd (entlast) ss))

Tuy nhiên, nếu entmake thì chẳng phải tạo biến nào cả.

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
54 phút trước, quocmanh04tt đã nói:

(setq ss (ssadd (entlast) ss))

Tuy nhiên, nếu entmake thì chẳng phải tạo biến nào cả.

 

Cám ơn Bạn rất nhiều đã có thể rút bớt một số biến.

 

Mình cũng đã có tạo block với entmake nhưng không hiểu hết được các code DXF khi tạo các đối tượng. Và block khi tạo ra không có annotative, phải dùng một lisp khác để chuyển nó thành block có annotative. Mình cũng đã tìm nhưng không thấy mã nào quyết định annotative? Bạn có thể chỉ giúp mình tạo block bằng entmake có annotative.

 

Cám ơn bạn rất nhiều.

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
5 phút trước, NPQ đã nói:

 

Cám ơn Bạn rất nhiều đã có thể rút bớt một số biến.

 

Mình cũng đã có tạo block với entmake nhưng không hiểu hết được các code DXF khi tạo các đối tượng. Và block khi tạo ra không có annotative, phải dùng một lisp khác để chuyển nó thành block có annotative. Mình cũng đã tìm nhưng không thấy mã nào quyết định annotative? Bạn có thể chỉ giúp mình tạo block bằng entmake có annotative.

 

Cám ơn bạn rất nhiều.

1. Gõ từ khóa: DXF code vào gg thì đọc cả ngày không hết.

2. Tham khảo:

((lambda (lst)
   (regapp "ACAD")
   (regapp "AcadAnnotative")
   (entmod (append (subst (cons 70 1) (assoc 70 lst) lst)
                   (list (list -3
                               (list "ACAD"
                                     (cons 1000 "DesignCenter Data")
                                     (cons 1002 "{")
                                     (cons 1070 1)
                                     (cons 1070 1)
                                     (cons 1002 "}"))
                               (list "AcadAnnotative"
                                     (cons 1000 "AnnotativeData")
                                     (cons 1002 "{")
                                     (cons 1070 1)
                                     (cons 1070 1)
                                     (cons 1002 "}")))))))
  (entget (cdr (assoc 330 (entget (tblobjname "BLOCK" blockname))))))

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

Thử với hàm Tblsearch, rồi kết luận nếu đối là xref thì nó ra cả địa chỉ họ hàng quê quán luôn  :)))

 

(tblsearch "Block" "Xref_Frame La Tien")
((0 . "BLOCK") (2 . "Xref_Frame La Tien") (70 . 36) (4 . "") (10 0.0 0.0 0.0) 
(1 . "E:\\03. Cau 1\\OneDrive\\09. Cau La Tien\\0.4 SPT La Tien\\Xref_Frame La 
Tien.dwg") (-2 . <Entity name: 7ef4bcf8>))

  • Vote tăng 1

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

Các bác cho em hỏi 1 chút!

Em muốn viết 1 đoạn lisp can thiệp vào regedit, vào Permission để duyệt qua Group hoặc User name để tích hết vào ô Allow thì có cách nào không ạ? Em cảm ơn các bác nhiều.

Capture_zpskpxd8i4d.png

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
Vào lúc 28/9/2018 tại 08:43, Doan Van Ha đã nói:

Dùng hàm vla-get-IsXRef

 

Vào lúc 28/9/2018 tại 09:09, Danh Cong đã nói:

Thử với hàm Tblsearch, rồi kết luận nếu đối là xref thì nó ra cả địa chỉ họ hàng quê quán luôn  :)))

 

(tblsearch "Block" "Xref_Frame La Tien")
((0 . "BLOCK") (2 . "Xref_Frame La Tien") (70 . 36) (4 . "") (10 0.0 0.0 0.0) 
(1 . "E:\\03. Cau 1\\OneDrive\\09. Cau La Tien\\0.4 SPT La Tien\\Xref_Frame La 
Tien.dwg") (-2 . <Entity name: 7ef4bcf8>))

Cảm ơn các bạn nhé !

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
Vào lúc 29/9/2018 tại 23:35, thanhduan2407 đã nói:

Các bác cho em hỏi 1 chút!

Em muốn viết 1 đoạn lisp can thiệp vào regedit, vào Permission để duyệt qua Group hoặc User name để tích hết vào ô Allow thì có cách nào không ạ? Em cảm ơn các bác nhiều.

 

Đoán là được, vì read và write rigistry được thì e rằng có cách để xử. Nhưng tìm hiểu thứ này mệt óc nên chỉ dám đoán thôi.

  • Like 1

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
7 phút trước, Doan Van Ha đã nói:

Đoán là được, vì read và write rigistry được thì e rằng có cách để xử. Nhưng tìm hiểu thứ này mệt óc nên chỉ dám đoán thôi.

Cháu cảm ơn bác đã phản hồi. Cháu muốn lưu 1 số thứ trong Registry nên cần phải sự đồng ý của việc này ạ! 

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

Chẳng hạn hàm này đọc cách user đã đặt về dấu ngăn cách, và hàm ghi chắc cũng tương tự:
(vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")

  • Vote tăng 1

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 giờ} trướ}c, thanhduan2407 đã nói:

Cháu cảm ơn bác đã phản hồi. Cháu muốn lưu 1 số thứ trong Registry nên cần phải sự đồng ý của việc này ạ! 

Nếu chỉ cần lưu và đọc thì cặp đôi SETENVGETENV là đủ.

 

lưu: (setenv "ThanhDuan" "2407")

 

đọc: (setq val (getenv "ThanhDuan"))

 

  • Vote tăng 1

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
7 giờ trước, gia_bach đã nói:

Nếu chỉ cần lưu và đọc thì cặp đôi SETENVGETENV là đủ.

 

lưu: (setenv "ThanhDuan" "2407")

 

đọc: (setq val (getenv "ThanhDuan"))

 

Em muốn tạo 1 số key trong đó để lưu biến anh ạ. Em đã test thấy cần phải tích vào Allow thì mới ghi biến trong đó dc

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
11 giờ trước, Doan Van Ha đã nói:

Chẳng hạn hàm này đọc cách user đã đặt về dấu ngăn cách, và hàm ghi chắc cũng tương tự:
(vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")

Cháu nay đi công tác nên ko theo dõi dc bài viết. Mong bác thông cảm. Tối cháu sẽ mần theo gợi ý của bác ạ

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

×