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ị

Cảm ơn Doan Van Ha và TUE_NV đã quan tâm giúp đỡ.

Mình xin lỗi vì mình dốt quá nên đặt vấn đề không rõ. Nên phải hỏi lại lần thứ 2.

Vấn đề của mình không phải là lấy tên của Dimstyle hiện hành. Mà mình muốn các thông tin của Dimstyle đó,

Chẳng hạn bản vẽ của mình có 5 Dimstyle. Trong đó mình muốn có các thông tin về Dimstyle hiện hành chẳng hạn. Ví dụ Dimstyle hiện hành là tên là TKCG-D1_50 chẳng hạn. Mình muốn các thông tin của Dimstyle này như là :

+ Dim này đã được người dùng tạo ra có Color của Dimension line là màu gì

+ Dim này đã được người dùng tạo ra có Baseline Spacing của Dimension line là bao nhiêu?

+ Trong mục Symbols and Arrows thì Leader của Arrowheads là gì, là mũi tên hay gì gì...

+ Trong mục Text thì Dim này được người dùng tạo ra thiết lập TextStyle gì, Text Color màu gì, Text height là bao nhiêu

+ Scale factor được người dùng thiết lập là bao nhiêu

+ ..................................................

Nói chung là tấc cả các thông số của Dimstyle.

Ủa, bạn dùng lệnh SETVAR là biết hết tất cả thông tin của Dimension mà!

Hay rõ hơn, bạn dùng lệnh SYSVDLG vậ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

Cảm ơn Doan Van Ha và TUE_NV đã quan tâm giúp đỡ.

Mình xin lỗi vì mình dốt quá nên đặt vấn đề không rõ. Nên phải hỏi lại lần thứ 2.

Vấn đề của mình không phải là lấy tên của Dimstyle hiện hành. Mà mình muốn các thông tin của Dimstyle đó,

Chẳng hạn bản vẽ của mình có 5 Dimstyle. Trong đó mình muốn có các thông tin về Dimstyle hiện hành chẳng hạn. Ví dụ Dimstyle hiện hành là tên là TKCG-D1_50 chẳng hạn. Mình muốn các thông tin của Dimstyle này như là :

+ Dim này đã được người dùng tạo ra có Color của Dimension line là màu gì

+ Dim này đã được người dùng tạo ra có Baseline Spacing của Dimension line là bao nhiêu?

+ Trong mục Symbols and Arrows thì Leader của Arrowheads là gì, là mũi tên hay gì gì...

+ Trong mục Text thì Dim này được người dùng tạo ra thiết lập TextStyle gì, Text Color màu gì, Text height là bao nhiêu

+ Scale factor được người dùng thiết lập là bao nhiêu

+ ..................................................

Nói chung là tấc cả các thông số của Dimstyle.

Cái này, bạn xử lý được

Dùng hàm TblNext duyệt qua từng anh DIMSTYLE

Qua từng phần tử DIMSTYLE

Thiết lập cho nó thành DIMSTYLE hiện hành

Lấy giá trị các biến hệ thống của DIMENSION (theo gợi ý của Tue_NV và hàm getvar) -> đưa vào kết quả (có thể là 1 List) chẳng hạn

Cứ thế cho đến DIMSTYLE cuối cùng

.....

Có thể xuất kết quả thu được trong 1 Dialog cho trực quan và sinh động

OK

Chúc bạn thành công.

  • 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ổ sung thêm cách dùng lệnh -dimstyle -> V (variables) -> đánh tên 1 dimstyle -> THu được 1 list giá trị các biến liên quan của dimstyle kèm giải thích, bác cứ cóp sang chỗ khác rồi dùng thôi, giải thích cũng ngắn gọn dễ hiểu. Các biến liên quan đến DIm hầu hếtg có tiền tố DIM đằng trước, có thể nhảy vào Help để xào thê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

Cái này, bạn xử lý được

Dùng hàm TblNext duyệt qua từng anh DIMSTYLE

Qua từng phần tử DIMSTYLE

Thiết lập cho nó thành DIMSTYLE hiện hành

Lấy giá trị các biến hệ thống của DIMENSION (theo gợi ý của Tue_NV và hàm getvar) -> đưa vào kết quả (có thể là 1 List) chẳng hạn

Cứ thế cho đến DIMSTYLE cuối cùng

.....

Có thể xuất kết quả thu được trong 1 Dialog cho trực quan và sinh động

OK

Chúc bạn thành công.

 

 

Em hiểu rồi anh TUE_NV ạ. Hì. Do không đọc kỹ bài viết của anh bên topic mỗi ngày một biến hệ thống.

Tức là biến hệ thống DIMTXSTY sẽ trả về Text Style của DimStyle hiện hành

Muốn có thông số của Dimstyle nào thì trước hết đặt hắn hiện hành rồi lấy giá trị biến hệ thống tương ứng của thông tin cần.

Cảm ơn Tue_NV vì thông tin bổ ích.

Thank Doan Van Ha đã giú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

Bác ơi, file được load là file gì, và load bằng phương thức nào ạ :o

Loaded: lsp, fas, vlx. Load bằng cách vào "Load Application..."

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

Trong lsp, có hàm nào tìm được đường dẫn thư mục của 1 file vừa được load không hè? Ai biết xin chỉ giùm!

....

Loaded: lsp, fas, vlx. Load bằng cách vào "Load Application..."

Bạn đọc topic này :

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

  • 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

Thank bác Tue_NV!

Sẵn hỏi luôn, không biết có ngớ ngẩn lắm không:

Có hàm lsp nào đặt 1 thư mục vào hàm thư mục hiên hành không 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

Thank bác Tue_NV!

Sẵn hỏi luôn, không biết có ngớ ngẩn lắm không:

Có hàm lsp nào đặt 1 thư mục vào hàm thư mục hiên hành không hè?

đặt ở đây có nghĩa là gì? Là MOVE hay COPY hay là CREAT 1 thư mục mới. Và thư mục hiện hành được chỉ định thế nào? Bạn nói rõ 1 tí....

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 ở đây có nghĩa là gì? Là MOVE hay COPY hay là CREAT 1 thư mục mới. Và thư mục hiện hành được chỉ định thế nào? Bạn nói rõ 1 tí....

Ý là thế này: tôi có 1 thư mục chứa các file lsp, dcl... mà lệnh trong file lsp thì gọi dialoge trong file dcl. Thông thường, để load file dcl thì phải chỉ path cho nó. Vậy, dùng hàm lsp nào để đưa thư mục đó trở thành thư mục hiện hành, để khi load dcl không trở ngại nữa.

Hiện giờ tôi thường phải chép các file đó vào thư mục hiện hành hoặc add thêm thư mục đó làm thư mục hiện hành bằng lệnh Option nên không thích lắ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

Đọc đường dẫn file lisp rồi add toàn bộ đường dẫn full vào Support Path là được chứ hè ^^

Hay ý bác là dùng (setenv "ACAD" path) ?

  • 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 đường dẫn file lisp rồi add toàn bộ đường dẫn full vào Support Path là được chứ hè ^^

Hay ý bác là dùng (setenv "ACAD" path) ?

Có lẽ tôi diễn đạt hơi loằng ngoằng nên khó hiểu, sorry. Ý là thế này: tôi có 1 thư mục "A", bây giờ tôi muốn add "A" vào Support Path, nhưng bằng 1 hàm lsp chứ không phải dùng lệnh Options trong Tool để add. Có hàm lsp đấy 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

Có lẽ tôi diễn đạt hơi loằng ngoằng nên khó hiểu, sorry. Ý là thế này: tôi có 1 thư mục "A", bây giờ tôi muốn add "A" vào Support Path, nhưng bằng 1 hàm lsp chứ không phải dùng lệnh Options trong Tool để add. Có hàm lsp đấy hay không?

Bạn dùng thử xem

 

(if (findfile "C:\\A")
(if (not (vl-string-search "C:\\A" (getenv "ACAD")))
(setenv "ACAD" (strcat (getenv "ACAD") ";" "C:\\A")
);;end if
(prompt "Folder C:\A Not Found!"))
);;end if

  • 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ó lẽ tôi diễn đạt hơi loằng ngoằng nên khó hiểu, sorry. Ý là thế này: tôi có 1 thư mục "A", bây giờ tôi muốn add "A" vào Support Path, nhưng bằng 1 hàm lsp chứ không phải dùng lệnh Options trong Tool để add. Có hàm lsp đấy hay không?

-> Có

(getenv "ACAD")

-> nó sẽ hiện ra - toàn bộ đường dẫn Support path -> Lấy được biến Path

Thêm đường dẫn vào bằng hàm nối chuỗi strcat

(setenv "ACAD" path)

-> Set path mới

Mấy dòng hy vọng bạn giải quyết được

Bận quá :rolleyes:

 

Detailing "giả nhời" nhanh hơn 1 phút rồi.

Nên kiểm tra Path đó có tồn tại đường dẫn mà bạn định Add vào thêm như ý của bạn Detailing ở trên nữa bạn ĐVH

  • 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

Và (có thể) nên kiểm tra độ dài tối đa của toàn bộ string nữa ^^

(if (and (< (strlen (strcat (getenv "ACAD") Path)) 800) ....)

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 này hơi buồn cười nhưng mình đang có nhu cầu: Có cách nào để unload 1 lisp đã đuợc load vào bản vẽ không nhể. (không chơi cách tắt bản vẽ đi rồi mở lại nha)

Edit: Vừa mò thấy topic này, không ngờ cũng có người có nhu cầu giống mình. mọi thảo luận xin chuyển qua topic này 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

Bạn nói rõ hơn khái niệm "centered". Nếu nó là "centered" của 2 đường dóng thì bạn dùng 2 đoạn code này:

(setvar "Dimjust" 0)

(setvar "Dimtad" 0)

Còn nếu là "centered" của chính đường kích thước (tức text nằm ngay trên chính đường kích thước) thì lại khác.

Ý của em là dùng lisp thực hiện lệnh giống như lệnh DIMTEDIT của CAD(chọn thuộc tình Center). Nhưng em muốn chọn một lúc nhiều đối tượng DIMENSION và thực hiện. Lệnh DIMTEDIT chỉ chọn một đối tượng DIMENSION một lần. 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

Bạn có thể sử dụng lệnh Lentheng sau đó sử dụng biên hệ thống Perimeter để lấy chiều dài của đối tượng vừa pick

Tham khảo code

(defun c:getLen()
(command "lengthen" (car(entsel "\n Pick vao doi tuong de lay chieu dai :")) "")
(alert (strcat "Chieu dai cua doi tuong la :" (rtos (getvar "Perimeter") 2 3)))
(princ)
)

Cảm ơn các bác nhiều lắm. Nhưng cái khó khăn của em là như thế này: Em muốn chọn một tập hợp nhiều đối tượng một lúc(trong đó có thể là LINE, CIRCLE, SPLINE, RECTANG...) nhưng em muốn loại bỏ những đường LINE nào có độ dài >=50 chẳng hạn. Em không biết dùng hàm SSget đó như thế nào cả. Bác nào biết thì viết hộ em một cái. Em 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

Cảm ơn các bác nhiều lắm. Nhưng cái khó khăn của em là như thế này: Em muốn chọn một tập hợp nhiều đối tượng một lúc(trong đó có thể là LINE, CIRCLE, SPLINE, RECTANG...) nhưng em muốn loại bỏ những đường LINE nào có độ dài >=50 chẳng hạn. Em không biết dùng hàm SSget đó như thế nào cả. Bác nào biết thì viết hộ em một cái. Em cảm ơn.

Sau khi có được tập SS gồm rất nhiều *Line, bạn viết thêm 1 đoạn check chiều dài như mọi người hướng dẫn, nếu thỏa mãn điều kiện của bạn thì thôi, không thỏa mãn thì loại nó khỏi tập SS bằng (ssdel ename ss), chỉ thế thôi mà. Nếu thực sự ưa thích coding, bạn hãy cố gắng tìm giải pháp cho mình trước khi hỏi 1 câu hỏi nào đó, vì như thế sẽ khiến bạn bị lệ thuộc rất nhiều vào lối suy nghĩ của người khsac. Chúc bạn thành cô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 anh cho em hỏi làm sao lấy được màu sắc của 1 layer bất kỳ trong bản vẽ (Ví dụ layer hiện hành). Cảm ơn!

(setq mau (getvar "cecolor"))

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

(setq mau (getvar "cecolor"))

 

Cảm ơn Doan Van Ha đã trả lời giúp.

Nhưng biến cecolor chỉ trả lại màu sắc đang dùng thôi.

Còn em muốn màu sắc của 1 Layer bất kỳ (chẳng hạn Layer hiện hành) Tức là màu sắc của layer đó khi ta tạo Layer.

Không biết bác không hiểu ý em hay em không hiểu ý 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 Doan Van Ha đã trả lời giúp.

Nhưng biến cecolor chỉ trả lại màu sắc đang dùng thôi.

Còn em muốn màu sắc của 1 Layer bất kỳ (chẳng hạn Layer hiện hành) Tức là màu sắc của layer đó khi ta tạo Layer.

Không biết bác không hiểu ý em hay em không hiểu ý bác!

"cecolor" là màu sắc của lớp hiện hành. "bác không hiểu ý em hay em không hiểu ý bác". Nói tóm lại, bạn muốn gì 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

×