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ị

@Tue_NV: Mỗi lần pick + 2 lần set sysvar chắc ko kéo dài thêm bao nhiêu so vơi việc duyệt qua nhiều tam giác bác ah(REGENAUTO = ON từ đầu)

@Thaistreetz: Nếu duyệt trong kích thước 1screen  không có thì tăng lên 2Sc, 4Sc ... Mình nghĩ nếu số điểm đủ lớn thì duyệt vậy vẫn nhanh hơn duyệt tất cả. Tất nhiên là thằng nào duyệt rồi thì mark để không duyệt lại trong lần sau

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, Thaistreetz cho biết:

Mình thì lại dị ứng với việc phải zoom xong trả lại screen vì đã vài lần gặp hiện tượng màn hình nháy nháy trong quá trình xử lý.

Ý tưởng của bác DVH là khá hay. Nhưng nếu áp dụng thì mình sẽ chỉ áp dụng d1 và d2 trong chính cái màn hình screen tại thời điểm lấy tọa độ điểm tra. Vừa đỡ nháy màn hình do zoom, lại vừa cho tốc độ nhanh hơn vì đối tượng chọn được ít hơn nhiều lần. tất nhiên có rủi ro về việc d1 và d2 khi đó không cắt tam giác nào do zoom quá lớn các cạnh tam giác vượt ra khỏi screen. Nhưng cái này dựa trên việc đánh giá thói quen người dùng, chẳng ai zoom vào tận trong cái tam giác khi pick cả.

 

Có lẽ đây là bài toán tra cao độ tại 1 điểm bất kỳ trên lưới tam giác bằng 1 cú pick chuột.
Còn nếu là 1 yêu cầu tra theo thời gian thực (tức là rê con trỏ tới đâu nó báo luôn cao độ tới đó) thì thế nào? Khi đó rõ ràng giải pháp phân mảnh, phân tầng vẫn cho hiệu quả tốt hơn. Nếu có chậm thì cũng chỉ chậm 1 lần duy nhất là lần đầu chạy lệnh

 

Nếu grread thì rõ ràng chọn 1 lần tốt hơn, nhưng bài toán của tôi đang pick từng điểm. Thanks!

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ó 1 điều khó hiểu. Tại sao 1 số file của tôi khi load nó tự động nhảy vào trong này nằm và "mờ" đi? Tôi không add vào đó nhé!

Lôi cổ nó ra khỏi đây bằng cách nào?

 

a.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
16 giờ trước, Thaistreetz cho biết:

Mình thì lại dị ứng với việc phải zoom xong trả lại screen vì đã vài lần gặp hiện tượng màn hình nháy nháy trong quá trình xử lý.

Ý tưởng của bác DVH là khá hay. Nhưng nếu áp dụng thì mình sẽ chỉ áp dụng d1 và d2 trong chính cái màn hình screen tại thời điểm lấy tọa độ điểm tra. Vừa đỡ nháy màn hình do zoom, lại vừa cho tốc độ nhanh hơn vì đối tượng chọn được ít hơn nhiều lần. tất nhiên có rủi ro về việc d1 và d2 khi đó không cắt tam giác nào do zoom quá lớn các cạnh tam giác vượt ra khỏi screen. Nhưng cái này dựa trên việc đánh giá thói quen người dùng, chẳng ai zoom vào tận trong cái tam giác khi pick cả.

 

Có lẽ đây là bài toán tra cao độ tại 1 điểm bất kỳ trên lưới tam giác bằng 1 cú pick chuột.
Còn nếu là 1 yêu cầu tra theo thời gian thực (tức là rê con trỏ tới đâu nó báo luôn cao độ tới đó) thì thế nào? Khi đó rõ ràng giải pháp phân mảnh, phân tầng vẫn cho hiệu quả tốt hơn. Nếu có chậm thì cũng chỉ chậm 1 lần duy nhất là lần đầu chạy lệnh

 

     Bài toán này thường hay dùng cho nghề khảo sát địa hình, sau khi đo xong về vẻ thấy trống thường cấy thêm điểm mia cho đẹp bình đồ. Nhưng thường người ta nội suy lại từ những cao độ đường đồng mức đã vẽ xong. Về nguyên tắc nội suy như vậy là không chính tắc nhưng thường làm vậy đó bạn.

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

Làm sao để khi đang grread thì mũi tên của mouse ẩn được như file gif trên, mọi người?

Tôi grread là cái mũi tên màu trắng của mouse cứ nhảy tung tăng rất bực mì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
57 phút trước, Doan Van Ha cho biết:

Làm sao để khi đang grread thì mũi tên của mouse ẩn được như file gif trên, mọi người?

Tôi grread là cái mũi tên màu trắng của mouse cứ nhảy tung tăng rất bực mình.

Bạn thử xem

(Grread () 4 0)

có được ko?

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
Kịp thời}}, Doan Van Ha cho biết:

Có 1 điều khó hiểu. Tại sao 1 số file của tôi khi load nó tự động nhảy vào trong này nằm và "mờ" đi? Tôi không add vào đó nhé!

Lôi cổ nó ra khỏi đây bằng cách nào?

a.png

Nó là cái danh sách thông báo cho bác là bản vẽ tại phiên làm việc đã được tải vào những gì thôi. Bao gồm:

- Tất cả các plug-in được đặt trong các thư mục support, thư mục chỉ định tự động load.

- Các file chỉ định tự động load bởi người dùng tại Startup Suite

- Các file được load thủ công bằng chính lệnh Appload. 

Nó mờ thế kia thì cũng là thông điệp cho người dùng là load vào thì chả có cách nào unload được. Cái này hiển nhiên bác biết rồi chứ nhỉ. Vì 1 file lisp hay sản phẩm từ lisp thì không unload được. Chỉ có Arx thì mới có thể unload. Cách duy nhất là đóng bản vẽ và mở lại
Trở lại vấn đề của bác, không load mà nó tự nhảy vào thì chắc là 1 trong số các file bác load có dòng code tự động load 1 file nào đó ở địa chỉ trên.

 

Có 1 đối số của hàm grread chỉ định trạng thái của con trỏ là đối số thứ 3.

có tất cả 4 giá trị (hoặc 5, không nhớ nữa) từ 0 đến 3 (hoặc 4) tương ứng với các trạng thái: Không con trỏ, trạng thái bình thường (chữ thập và ô vuông), con trỏ ở trạng thái pick điểm (chữ thập), và trạng thái select đối tượng (ô vuông).

 

Cái diễn đàn này bị dở hơi, viết 1 bài rồi không được viết tiếp nữa ạ? Hay là chính sách dở hơi? Sếp nào thông não em phát ạ.:,D

  • 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

Bạn nào test giùm tôi 2 lệnh lisp đơn giản sau đều có  dùng grread.

- HA1: di chuột không xuất hiện mũi tên ở điểm đi >> mong muốn

- HA2: di chuột có xuất hiện mũi tên nhấp nháy rất khó chịu >> không mong muốn.

Sau khi lấy được pt nếu thao tác sau đó càng nặng nề thì mũi tên càng nháy khủng.

Chắc mũi tên phụ thuộc 1 biến hệ thống nào nữa ngoài tham số Curtype trong hàm grread

(GRREAD[Track] [Allkeys [Curtype]])


(defun C:HA1()
  (while (setq grr (grread T 4 0) code (car grr) pt (cadr grr))))
 (defun C:HA2()
  (command "point" '(0 0))
  (while (setq grr (grread T 4 0) code (car grr) pt (cadr grr))
   (entdel (entlast))
   (command "point" pt)))

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òng lặp với điều kiện (grread T 4 0) thì nó chạy theo thời gian thực luôn, bước lặp khi đó tính đơn vị hình như là 1/10000s. (theo biến hệ thống Date thì phải, không nhớ chắc lắm). Vậy mà bác dùng command để test thì nó chớp giật là đúng rồi. Cái mũi tên xuất hiện là thời gian để cad nó xử lệnh command. Giống như lúc cad bị treo, thay vì con trỏ của cad thì cad nó trả lại trạng thái trỏ chuột về cho hệ điều hành, tức là cái mũi tên.

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

vòng lặp với điều kiện (grread T 4 0) thì nó chạy theo thời gian thực luôn, bước lặp khi đó tính đơn vị hình như là 1/10000s. (theo biến hệ thống Date thì phải, không nhớ chắc lắm). Vậy mà bác dùng command để test thì nó chớp giật là đúng rồi. Cái mũi tên xuất hiện là thời gian để cad nó xử lệnh command. Giống như lúc cad bị treo, thay vì con trỏ của cad thì cad nó trả lại trạng thái trỏ chuột về cho hệ điều hành, tức là cái mũi tên.

Nhưng khi tôi không dùng command mà dùng cặp grvecs + redraw để ghi text nó cũng bị.

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ậy chắc máy của bác yếu rồi. tôi test trên con laptop HP 8570p, cad 2017 chạy cả 2 lệnh trên đều mượt. không nháy

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

Hỏi về thuật toán:

Trên dwg tôi có rất nhiều (hàng trăm ngàn) tam giác 3D dạng Polyline 3D closed, không cắt nhau.

Bất cứ 1 point nào trên dwg hoặc là không thuộc tam giác nào, hoặc là chỉ thuộc duy nhất 1 tam giác. Nếu point nằm trên 1 cạnh/đỉnh thì thuộc nhiều tam giác.

Nếu pịck 1 point bất kỳ, làm sao chọn được 1 tam giác bao quanh point đó?

Thuật toán phải quan tâm tốc độ xử lý nhé!

 

 

Hoi_CV.dwg

Hoi_CV.png

 

Cháu dùng cách này cho bài toán nội suy theo điểm. Thay vì duyệt qua các tam giác cháu dùng kiểu chọn theo đường thẳng. Tùy theo độ rộng tam giác mà cháu đặt khoảng cách sao cho phù hợp. Và để biết được điểm nào nằm trong tam giác nào thì cháu chỉ duyệt qua các tam giác qua kiểu dưới, tất nhiên mình sử dụng cả chế độ Zoom khi lựa chọn: 

     (progn
       (setq P_Z1 (Polar3 Pnt 0.0 500.0))
       (setq P_Z2 (Polar3 Pnt 0.0 -500.0))
       (setq ss1
          (ssget
        "C"
        P_Z1
        P_Z2
        '((0 . "POLYLINE") (100 . "AcDb3dPolyline") (8 . "TIN"))
          )
       )

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

Hàm nentsel không chấp nhận biến osmode đã được đặt trước khi gọi nó.

Vậy có cách gì bằng lisp để khi gọi nentsel thì có osnap luôn không? Ai biết xin chỉ giùm! 

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

Bạn dùng lệnh UCS với tham số View, là mặt phẳng chữ sẽ song song với mặt phẳng màn hình. Lúc đó viết chữ sẽ như viết chữ trên mặt giấy (sau khi in hình 3d)

 

Cách dùng:

UCS <enter>

V <enter>

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ì lý do nào đó, bạn đã làm chưa đúng, bạn thử làm lại xem.

Bạn xem ACAD báo gì?

 

Nếu đúng thì sau khi dùng lệnh, trục tọa độ (chữ XYZ) sẽ trở thành 2 chữ là X và Y mà thôi, không có Z và cũng không có hình vuông ở gốc tọa độ.

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

Sao tôi dùng UCS >> V thì vẫn như nguyên (Text vẫn nghiêng)

+ Em hỏi dại tí: Vậy làm thế nào mà bác vẽ được cái hình chữ nhật vuông vắn như thế trong file cad "A" :))))

+ Bác dùng UCS---> View , rồi mới bắt đầu tạo text thì nó mới không nghiêng ạ.

+ Nhìn ảnh bác gửi: Hiện rõ ràng cả 3 trục: XYZ thế kia thì không đúng rồi, đáng lẽ chỉ còn XY thôi.

Cadviet.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

@Danh Cong: Tôi có vẽ HCN nào đâu? Trên bản vẽ chỉ có chữ ABC được viết trong hệ 3D. Sau đó dùng UCS > V thì hệ trục thay đổi thành XY nhưng chữ vẫn nghiêng.

@All: bản vẽ ban đầu 3D, sau đó viết text, sau đó mới UCS/V thì text vẫn nghiêng (không phải UCS/V xong mới viết Text 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

Câu hỏi ban đầu của tôi là: trong screen 3D làm sao viết Text để nhìn vào screen như Text 2D?

Còn nếu UCS/V trước viết Text sau thì không phải là điều tôi mong muốn. Cám ơn mọi người đã cmt.
P/S: tôi có cảm giác như có thể dùng hàm trans?

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 7/6/2018 tại 14:52, Doan Van Ha đã nói:

Câu hỏi ban đầu của tôi là: trong screen 3D làm sao viết Text để nhìn vào screen như Text 2D?

Còn nếu UCS/V trước viết Text sau thì không phải là điều tôi mong muốn. Cám ơn mọi người đã cmt.
P/S: tôi có cảm giác như có thể dùng hàm trans?

 

3dt-3d text.lsp

  • Vote tăng 2

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

×