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

Thaistreetz

Nhà quảng cáo
  • Số lượng nội dung

    905
  • Đã tham gia

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

  • Ngày trúng

    29

Bài đăng được đăng bởi Thaistreetz


  1. Không chỉ trong vòng lặp nó mới nhảy mà ở ngoài nó cũng nhảy, hàm này mỗi lần chạy sẽ print ra command line 1 ký tự xuống dòng. Kiểu như đó là 1 trong các nhiệm vụ của nó. Với zoom thì command lại nhanh hơn VLA nhiều. Trừ khi bác cần zoom callback của 1 reactor thì hãy dùng VLA, còn trong mọi trường hợp khác hãy dùng commmand.


  2. đối tượng mình chọn là text, mình dùng ssget để chọn, nhưng khi ở ngoài màn hình thì lại không chọn được,bạn có cao kiến gì không?  :)

    Bạn sử dụng method "X" nhưng kết hợp filter gồm các toán tử AND, OR, <,<,< và >,>,> cho mã dxf 10 để lọc các đối tượng trong khu vực muốn chọn. Mình gợi ý ban vậy thôi vì vao cadviet bằng đt ko code đc. Nhiều lisp của mình từng post lên cadviet có sử dụng cách này. Bạn có thể tìm để tham khảo

    • Vote tăng 1

  3. Cad nó thế thì đành chịu thế. Hàm ssget còn không cho chọn quá 128 tập chọn nữa cơ. Không biết cad mới thì có sửa số 128 chưa (?).

    Zoom nó cà giựt nếu bản vẽ nặng. Với bản vẽ nhẹ thì nó lướt êm hơn. Và bạn có thể zoom bằng hàm vla thì nhanh hơn dùng command.

    Ví dụ zoom window bằng vla:

    (defun c:zoom1 ()

    (setq acadapplic (vlax-get-acad-object))

    (setq util (vla-get-utility (vla-get-activedocument acadapplic)))

    (setq PT1 (vla-getpoint util nil "\nFirst Point : "))

    (setq PT2 (vla-getcorner util PT1 "\nSecond Point : "))

    (vla-ZoomWindow acadapplic PT1 PT2)

    (princ))

     

    )

    Zoom bằng VLA theo tôi nhớ thì không hề nhanh hơn command. và còn bị nhảy dòng tại command screen nữa.


  4. các bác cho em hỏi, khi chọn đối tượng trong bản vẽ cad bằng hàm lisp, nếu em không zoom phần đối tượng được chọn lên màn hình thì không chọn được đối tượng đó, vậy làm sao đối tượng đó nằm ngoài giao diện màn hình đồ họa mà mình vẫn chọn được đối tượng đó (đã biết trước vị trí và vị trí chứa đối tượng này cố định trong bản vẽ)  :)

    Đối tượng mà bạn chọn là gì? Các đối tượng có điểm chèn: point, text, insert... hoàn toàn có thể chọn được tại mọi điểm ngoài phạm vi màn hình


  5. Lười vậy?

    nghĩa là hàm trên không có tác dụng với reactor chứ sao. Chỉ thao tác undo không thôi thì không thể xóa được 1 reactor khi nó đã được tạo ra. Kể cả khi không thiết lập nó ở trạng thái bền vững.

    em cứ thử nhét 1 hàm tạo reactor vào giữa 2 hàm trên của em. sau khi tao xong reactor, nhấn esc để thoát rồi dùng lệnh RRA của anh kiểm tra mà xem nó có được gỡ khỏi bản vẽ không.

    • Vote tăng 1

  6. @Linh: Hộp thoại chương trình chính, thanh header (gọi nó là header chư không ai gọi là menu nhé) đúng là không phải image. Còn hộp thoại tra thép, đó không fải là slide mà chính xác là 1 image. Hoàn toàn có thể dùng text trong image, nhưng đó là text đồ họa 8bit hoặc text vector. Cái này thì em rành quá rồi. Image không sử dụng chung font chữ với text của các tile bình thường khác,là font đồ họa 16 và 32bit

    Tối về check email nhé.

    @Tue_nv: Chương trình thống kê thép này em viết chưa hoàn thiện, gần xong thì nghỉ việc nên vứt xó nó hơn 1 năm qua, giờ cũng không có ý định fát triển tiếp nữa. Lúc nào rảnh em sẽ làm cái tut giới thiệu toàn bộ để bác coi.

    @ĐVH: hình tôi post đúng là win8 đấy. Chiều rộng các tile không chỉ fụ thuộc vào tham số width mà còn fụ thuộc vào các yếu tố khác: chiều rộng tổng thể của hộp thoại, tỷ lệ chiều rộng giữa các tile trong cùng hàng....


  7. Ngoài ra nếu bác không tiếc công sức đã bỏ ra để viết hộp thoại trên thì có thể viết lại theo hướng khác, đảm bảo đẹp hơn, chạy nhanh hơn (tôi có thể chắc chắn rằng hộp thoại trên của bác khi chạy luôn có độ trễ) và không cần phải giải quyết vấn đề mà bác đang đề cập.

    Tổ chức dữ liệu của bác khá đơn giản. Có thể dùng dấu tab để phân cách dữ liệu trên 1 dòng listbox. Qua đó tạo các hàng và cột như trên chỉ với một listbox duy nhất.


  8. Việc này chỉ để làm đẹp hộp thoại chứ không tạo thêm hiệu quả sử dụng. Mình từng viết 1 ứng dụng thiết kế taluy trắc ngang cho nova có sử dụng hộp thoại song song 2 listbox thế này.

    Theo mình nhớ thì: Nếu trong quá trình sử dụng, dùng chuột để pick chọn trong 1 bên list box thì các listbox còn lại sẽ tự nhảy và tự cuộn cho ngang hàng thì phải. Nếu đúng thì bác có thể lợi dụng nó găn vào action của các thanh cuộn.

    trong trường hợp danh sách của bác không quá dài thì có thể làm như mình từng làm: viết hộp thoại để listbox có thể tự động thay đổi kích thước theo chiều dài của dach sách phần tử, khi đó sẽ không cần phải cuộn nữa. Cần một chút sáng tạo và khéo léo khi code để làm việc này.


  9. Nếu pick từng đối tượng kèm điều kiện rẽ nhánh thì sử dụng initget cũng được rồi mà bác. Em nhớ có lần chính bác trả lời cho em vấn đề này trong topic "undo trong quá trình chạy lisp.

    về hàm grread, hoàn toàn có thể viết để chọn được nhiều đối tượng. Em đã làm trong lisp chuyển nhanh các text vào trọng tâm miền kín gần nhất đã post trong forum. Cách này dùng để chữa cháy, khi tập hợp đối tượng chọn đơn giản,không cần áp dụng các điều kiện lọc fức tạp thì tạm chấp nhận được.

     

    Em Linh cần cái này chắc để áp dụng vào lisp chọn nhanh đối tượng thì fải. A nghĩ là không làm được đâu, bởi trước đây anh đã thử làm rồi nhưng không thành công.


  10. P/s a Thái và TLinh : có nhiều người theo dõi topic

    @Ketxu: có chuyện gì thế hả ketxu?

    @TL: không có cad để test nhưng đọc qua code thì anh chắc chắn là code trên của em không thể áp dụng cho Rtext. Lệnh ddedit không có hỗ trợ rtext đâu. Anh nhớ không nhầm thì autodesk phải viết riêng một lệnh để sửa rtext được tích hợp vào express.

    bộ gõ Tiếng Việt của tác giả Kỳ Nam giải quyết rất tốt các chế độ gõ cho từng chương trình, từng cửa sổ con trong các chương trình sao em không dùng mà cứ phải là unikey nhi? Kết hợp với lisp này nữa là giải quyết được rất nhiều vấn đề đấy.


  11. Trích dẫn dưới đây được lấy ra từ topic, mình tách ra topic này vì nội dung thảo luận không còn liên quan đến topic đó nữa

     

    Bạn cũng có thể sd cái lisp của người Nga do bạn thanhduan2407 đưa lên, mình thấy nó chạy cũng tương tự nhau, kể cả thời gian

     

    Qua test thử thì Em thấy file của bạn lethaonguyen post trên chạy nhanh hơn code của bác Elpanov đáng kể. Cụ thể với 7436 điểm cao độ kết quả lần lượt là 6giây và 9giây.

    Em quyết định chuyển code của bác Elpanov thành .fas chứ không để .lsp nữa và test lại thì kết quả hoàn toàn bằng nhau.

    Tiếp, do có chút nghi ngờ nên em thử Decomplie file fas của lethaonguyen thì hóa ra 2 code trên gần như giống nhau hoàn toàn cả về thuật toán lẫn cách thức triển khai code.

     

    Kết luận:

    - Code của lethaonguyen cũng chính là code của bác Elpanov (nghĩa là giống nhau về thuật toán và cách viết thôi nhé, mình không có ý bảo tác giả code đó copy code của Elpanov rồi make thành fas lòe anh em)

     

    - Fas chạy nhanh hơn Lsp. kết quả trên cho thấy fas nhanh hơn 1.5 lần. Tuy nhiên thực tế còn có thể nhanh hơn nữa tùy vào cấu trúc của code và loại dữ liệu mà nó xử lý. con số này thậm chí có thể lên đến cả chục lần.

     

    - Việc tải 1 file fas vào bản vẽ cũng nhanh hơn rất rất nhiều so với lsp. Cụ thể: mình tải 1 file lsp dung lượng 953KB mất khoảng 40s. Make file lsp đó + khoảng 50 file lsp lằng nhằng khác, tổng dung lượng là 4120KB thành 1 file fas dung lượng 2059KB - tải vào bản vẽ mất 0.3s. (lưu ý là với cùng nội dung thì fas nhẹ hơn lsp khoảng 1 nửa)

     

    - Như vậy có thể thấy rằng: *.lsp có thể chậm hơn VBA hay VB nhưng *.fas thì chưa chắc. Còn *.vlx mình chưa bao giờ dùng nên chưa có kết luận gì.

    • Vote tăng 1
×