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ị

Ai biết xin chỉ giùm: làm sao lấy được màu của màn hình acad (screen). Tìm mãi trong biến hệ thống mà không ra mới oải.

Thân thương!

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

Ai biết xin chỉ giùm: làm sao lấy được màu của màn hình acad (screen). Tìm mãi trong biến hệ thống mà không ra mới oải.

Thân thương!

Nếu bác để ý thì ketxu đã làm 1 cái về cái này rồi

http://www.cadviet.com/forum/index.php?showtopic=56029

Nó thuộc vlaObj (vla-get-display(vla-get-preferences (vlax-get-acad-object))), bác dump ra để biết thêm nhé :)

  • 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

Nếu bác để ý thì ketxu đã làm 1 cái về cái này rồi

http://www.cadviet.c...showtopic=56029

Nó thuộc vlaObj (vla-get-display(vla-get-preferences (vlax-get-acad-object))), bác dump ra để biết thêm nhé :)

 

Thanks cái đã, mọi chuyện tối về ngâm cứu sau. Nếu Ket biết câu lệnh để lấy màu của screen và gán 1 màu cho screen liền liền thì chỉ giùm, bằng không thì tối dump ngâm cứ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

Nếu bác để ý thì ketxu đã làm 1 cái về cái này rồi

http://www.cadviet.c...showtopic=56029

Nó thuộc vlaObj (vla-get-display(vla-get-preferences (vlax-get-acad-object))), bác dump ra để biết thêm nhé :)

Hề hề hề,

Bác Ketxu cho hỏi chút xíu về cái thằng 'GraphicsWinModelBackgrndColor nhé: Khi mình xài nó thì hình như nó lấy cái mã màu khác với mà trong CAD bác ạ. Tỷ như màu green trong Cad là 3 thì thằng 'GraphicsWinModelBackgrndColor lại trả về là 65280.

Vậy có cách chi để biết được các mã màu của nó tương ứng với mã màu của CAD hay không???

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ác ĐVH : Nó không liền liền được đâu ạ. Vì khi lấy mã màu của thằng này nó đang ở dạng variant, type 19, lại không hỗ trợ vlax-variant-value nữa

@bác Bình : số 3 bác nhìn thấy là của hệ màu 256, tương đương với (0 255 0) của hệ màu RGB và 65280 của hệ Olecolor bác ạ.

Trường hợp này thì kết quả trả về dạng OLECOLOR :(

Từ con số này chuyển sang mã màu RGB thì dể coi hơn. Bác có thể bật bảng màu Autocad lên xem chỉ số tương ứng giữa 256 với RGB ^^

Trong link e đưa có 2 hàm chuyển đổi Ole <-> RGB từ con số này đó ạ.

  • 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

@bác ĐVH : Nó không liền liền được đâu ạ. Vì khi lấy mã màu của thằng này nó đang ở dạng variant, type 19, lại không hỗ trợ vlax-variant-value nữa

@bác Bình : số 3 bác nhìn thấy là của hệ màu 256, tương đương với (0 255 0) của hệ màu RGB và 65280 của hệ Olecolor bác ạ.

Trường hợp này thì kết quả trả về dạng OLECOLOR :(

Từ con số này chuyển sang mã màu RGB thì dể coi hơn. Bác có thể bật bảng màu Autocad lên xem chỉ số tương ứng giữa 256 với RGB ^^

Trong link e đưa có 2 hàm chuyển đổi Ole <-> RGB từ con số này đó ạ.

Hề hề hề,

Cám ơn sự chỉ giáo của bác ketxu, tuy nhiên do trình độ có hạn nên vào đọc trong đường link bác gửi mà chả tìm thấy cái bảng chuyển đổi giữa các hệ màu này ra sao cả, Thôi thì đ2nh cứ hiểu vậy đã, Cứ xài cái bác biều thôi, còn hiểu được thì chắc phải mần mò thêm ít lâu nữa vậy.

Hề hề hề

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

Ai biết xin chỉ giùm: làm sao lấy được màu của màn hình acad (screen). Tìm mãi trong biến hệ thống mà không ra mới oải.

Thân thương!

Ha tham khảo các Lisp của Jimmy Bergmark :

- Background changer

- Display Properties

 

Hề hề hề,

...

bảng chuyển đổi giữa các hệ màu

...

Bác tham khảo : Display Color Properties
  • Vote tăng 3

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ôi có 1 tập hợp chọn ss1 (hoặc 1 list1 các ename, hoặc 1 list1 các vla-object). Tôi muốn copy chúng từ pt1 đến pt2, và sau khi copy tôi muốn lấy được các đối tượng được tạo thành là tập hợp chọn ss2 (hoặc 1 list2 các ename, hoặc 1 list2 các vla-object), điều kiện là không dùng hàm (command "copy"...). Ai biết xin chỉ giùm hàm hoặc phương pháp thực hiện, thanks!

P/S (11:09 PM): Thank Ketxu! Tự nhiên quên mất chức năng tìm kiếm, làm tốn đất CADViet.

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

Phương thức lấy entlast trước khi thực hiện hàm, rồi sau khi thực hiện xong hàm thì làm vòng lặp duyệt entnext đến entity cuối cùng bác ạ. => thu về danh sách ename. Trên diễn đàn đã có mấy bài về vấn đề "chọn lại đối tượng vừa copy" + lisp trong đó r

  • 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

Tôi có 1 tập hợp chọn ss1 (hoặc 1 list1 các ename, hoặc 1 list1 các vla-object). Tôi muốn copy chúng từ pt1 đến pt2, và sau khi copy tôi muốn lấy được các đối tượng được tạo thành là tập hợp chọn ss2 (hoặc 1 list2 các ename, hoặc 1 list2 các vla-object), điều kiện là không dùng hàm (command "copy"...). Ai biết xin chỉ giùm hàm hoặc phương pháp thực hiện, thanks!

Bạn thử entmake tới đâu lưu tớ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

Tôi có 1 tập hợp chọn ss1 (hoặc 1 list1 các ename, hoặc 1 list1 các vla-object). Tôi muốn copy chúng từ pt1 đến pt2, và sau khi copy tôi muốn lấy được các đối tượng được tạo thành là tập hợp chọn ss2 (hoặc 1 list2 các ename, hoặc 1 list2 các vla-object), điều kiện là không dùng hàm (command "copy"...). Ai biết xin chỉ giùm hàm hoặc phương pháp thực hiện, thanks!

Không sử dụng (command "copy"...) thì chỉ thực hiện được với các đối tượng đơn giản. Không thể thực hiện tổng quát được trừ trường hợp bạn viết được 1 lệnh có chức năng như lệnh copy. 1 số đối tượng chúng ta không thể make được hoặc quá khó để make như hatch, mline, dimension, wipeout..

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

Không sử dụng (command "copy"...) thì chỉ thực hiện được với các đối tượng đơn giản. Không thể thực hiện tổng quát được trừ trường hợp bạn viết được 1 lệnh có chức năng như lệnh copy. 1 số đối tượng chúng ta không thể make được hoặc quá khó để make như hatch, mline, dimension, wipeout..

Có thể kết hợp combo này (SUBST + ENTMODE + ENTUPD) thay cho entmake

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

Nhân đây các bạn hay dùng các hàm của express tool vậy có khi nào các bạn muốn viết 1 hàm tương tự như vậy chưa?

bạn ko tạo được Hatch, Mline bằng lisp vậy đã nghĩ là có thể có hàm (CreateHatch) hay (CreateMline) ko?

Mời các bạn cho ý kiến. :P

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

Nhân đây các bạn hay dùng các hàm của express tool vậy có khi nào các bạn muốn viết 1 hàm tương tự như vậy chưa?

bạn ko tạo được Hatch, Mline bằng lisp vậy đã nghĩ là có thể có hàm (CreateHatch) hay (CreateMline) ko?

Mời các bạn cho ý kiến. :P

 

Những hàm hay dùng của ACET mình đã viết lại gần hết, nhằm phục vụ cá nhân, chẳng tội j phụ thuộc quá vào 1 thứ ^^

Tạo Hatch và Mline thì vẫn trung thành với vla method hoặc command (tùy trường hợp)

  • 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. Những hàm hay dùng của ACET mình đã viết lại gần hết, nhằm phục vụ cá nhân, chẳng tội j phụ thuộc quá vào 1 thứ ^^

2. Tạo Hatch và Mline thì vẫn trung thành với vla method hoặc command (tùy trường hợp)

Tue_NV đồng ý với ý kiến của Ketxu ở điểm thứ 2.

Riêng điểm thứ 1 thì mình không đồng ý lắm. Viết hàm acet lập sẵn thì thấy code gọn gàng hơn, dễ đọc hơn (theo ý kiến chủ quan của mình)

 

Các hàm make trong acet thì chỉ có hàm tạo PLINE thôi, còn tạo các đối tượng khác thì không có thấy.

Mình vẫn sử dụng vla method hoặc command để tạo các đối tượng phức tạp Hatch, MLINE

hoặc Block Dynamic (dùng command "insert"...)

 

Còn đối tượng đơn giản thì sử dụng Entmake

Vài dòng chia sẻ

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

 

Những hàm hay dùng của ACET mình đã viết lại gần hết, nhằm phục vụ cá nhân, chẳng tội j phụ thuộc quá vào 1 thứ ^^

Tạo Hatch và Mline thì vẫn trung thành với vla method hoặc command (tùy trường hợp)

Acet có mấy hàm thuộc loại kịch độc mà mình thích sử dụng nhưng không thể viết lại được (hoặc có viết lại được thì cũng không thể ngon bằng nó)

VD: acet-sys-shift-down, acet-sys-lmouse-down, ss-drag..

thêm nữa, mình test thử tốc độ thì thấy các hàm acet cho tốc độ cực nhanh, VL và VLA có 1 số hàm chức năng tương tự acet nhưng tốc độ cũng không bằng. thế nên là mình vẫn cứ thích dựa hơi nó. he he

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

Nhân tiện cho mình hỏi. các bác có cách nào lấy được tọa độ của con trỏ theo hệ tọa độ của màn hình không? gốc tọa độ là 1 trong các góc của màn hình. (thường là topLeft) đơn vị là pixel.

vấn đề này trước đây mình từng hỏi, nhưng chưa có giải đáp, giờ lại vấp fải nó nên bức xúc quá hỏi lạ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

Nhân các bác bàn về việc dùng Acet hay nên viết lại Acet, tôi muốn hỏi điều này vì thực sự là tôi không hiểu: rõ ràng dùng acet nó trực quan và dễ hiểu (nhưng phải cài Express Tool). Nhưng không hiểu sao phần lớn các bô lão lisp ở nước ngoài lại rất hạn chế dùng acet (theo hiểu biết lõm bõm của tôi)?

Thân thương!

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 : trước đấy e cũng rất thích ACET vì sinh code ngắn gọn, nhưng sau khi dịch nghĩa khoảng 170 hàm ACEt, em phát hiện ra rằng, ngoài 1 số hàm kịch độc chưa tìm ra phương thức, đa số còn lại phụ thuộc command rất nhiều. => chỉ sử dụng ACET để viết shop-code lần đầu.

@bác Thái : cái việc đó chắc phải sử dụng các phép tính biến đổi ma trận hay sao ý => e đại dốt về khoản này ^^ Mà trên cái màn hình ngoài màn editor ra còn các menu, toolbar, title nữa. Nên để có được thằng bác muốn chắc phải dùng object ngoài mất :(

(Hay ý bác topleft là topleft của Editor thô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

Bạn detailing và các bác cho Tue_NV hỏi tí :

Khi cài ASD2012 thì có sẵn luôn ACAD2012. Tuy nhiên, ACAD2012 này lại không có ExpressTools.

Có cách nào cài ExpressTools cho CAD2012 trong trường hợp này.

 

Các bạn có biết về vấn đề này xin chỉ giúp. Tue_NV xin cảm ơ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

Bạn detailing và các bác cho Tue_NV hỏi tí :

Khi cài ASD2012 thì có sẵn luôn ACAD2012. Tuy nhiên, ACAD2012 này lại không có ExpressTools.

Có cách nào cài ExpressTools cho CAD2012 trong trường hợp này.

Các bạn có biết về vấn đề này xin chỉ giúp. Tue_NV xin cảm ơn

Tôi thì không biết, nhưng có 1 thông tin thêm để bác Tue_NV tham khảo: hồi trước tôi cài Softdesk thì có luôn CadR14, sau đó cài Cadr14 thì cứ mỗi lần mở cadr14 nó nhảy qua softdesk luô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

@ketxu: nếu lấy gốc tọa độ theo topleft của editor thì mình làm được roài. cái mình cần lấy là tọa độ theo hệ tọa độ của màn hình.

Bởi vì mỗi người thiết lập giao diện cad khác nhau nên việc lấy theo tọa độ màn hình mục đích cũng chính là để tránh sự ảnh hưởng của các thanh menu, toolbar... như bạn nêu hay việc của sổ cad đang ở chế độ maximize hay minimize.

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 thì thuần lisp hình như không có được bác ạ. Bắt buộc phải liên kết với 1 thằng khá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

Bạn detailing và các bác cho Tue_NV hỏi tí :

Khi cài ASD2012 thì có sẵn luôn ACAD2012. Tuy nhiên, ACAD2012 này lại không có ExpressTools.

Có cách nào cài ExpressTools cho CAD2012 trong trường hợp này.

 

Các bạn có biết về vấn đề này xin chỉ giúp. Tue_NV xin cảm ơn

Bạn vào Control Panel -> Add Or Remove Programs -> ASD 2012 -> Modify - The Express Tools

good luck! :D

  • Vote tăng 4

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 ơi, cho hỏi tí: tôi nhớ mang máng là có hàm kiểm tra xem điểm pt có nằm trên curve hay không, mà sao giờ quên mất. Bác nào biết xin chỉ giùm: hoặc là tên hàm, hoặc là phương thức kiểm tra. 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

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


×