Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

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


  • Please log in to reply
2851 replies to this topic

#1161 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 30 April 2012 - 04:36 PM

1). Cám ơn bác Tue_NV. Lisp tạm ổn nhưng chưa triệt để, vì có 1 số sys_var read_only đặc biệt như "area", "lenslength"... thì báo lỗi.
2). Theo tôi hiểu default là giá trị mặc định khi cài đặt acad, tức là giá trị initial trong 3 giá trị new, current, initial của dialoge lệnh sysvdlg. Không biết có đúng không?
Có thể lấy các giá trị mặc định từ file "defaults.scr", tuy nhiên file này không cung cấp đầy đủ các giá trị.

1.) Bác thử code sau: (chỉ có biến lenslength là biến "ngoại lai"), còn lại thì OK. Bác thử nhé


(defun svr (sv)
(vl-load-com)
(setvar "cmdecho" 1)
(command "setvar" sv)
(while (= (getvar "cmdactive") 1) (command ""))
(if (or (vl-string-search "read only" (getvar "lastprompt"))
(= (strcase sv) "LENSLENGTH")
)
T nil)
)
2.) Cái này theo Tue_NV hiểu là initial Value.
Cái này có thể là liệt kê ra thôi, không có cách lấy, nếu lấy chỉ là lấy giá trị đã Set cho biến thôi bác ạ
  • 2

#1162 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 30 April 2012 - 04:51 PM

1.) Bác thử code sau: (chỉ có biến lenslength là biến "ngoại lai"), còn lại thì OK. Bác thử nhé
...
2.) Cái này theo Tue_NV hiểu là initial Value.
Cái này có thể là liệt kê ra thôi, không có cách lấy, nếu lấy chỉ là lấy giá trị đã Set cho biến thôi bác ạ

1). OK rồi.
2). File "defaults.scr" có thể lấy được initial value bằng lisp mà bác, nhưng tiếc là không đủ.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1163 duy267

duy267

    biết vẽ point

  • Members
  • PipPip
  • 96 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 30 April 2012 - 10:39 PM

Không bao giờ biến mất! Có thể nó quá nhỏ nên bạn không thấy mà thôi. Thông thường là do trên bản vẽ có nhiều layer bị off. Nếu bạn làm chưa được thì post bản vẽ lên.

Đây là bản vẽ, bác hãy kiểm tra dùm em. Thanks.
http://www.cadviet.c...103999_vd_1.dwg

Em đã up lại. Lần đầu up File nên hơi lúng túng :D

Bài viết đã được chỉnh sửa nội dung bởi Tue_NV: 01 May 2012 - 05:40 AM

  • 0

#1164 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 01 May 2012 - 07:05 AM

Đây là bản vẽ, bác hãy kiểm tra dùm em. Thanks.
http://www.cadviet.c...103999_vd_1.dwg
Em đã up lại. Lần đầu up File nên hơi lúng túng :D

Sau khi zoom "E" bạn nhìn kỹ trên màn hình sẽ thấy:
- Phía dưới ở giữa có 1 chấm nhỏ: đó chính là hình của bạn (492 đối tượng).
- Phía trên ở giữa có 1 chấm nhỏ: đó chính là 4 đối tượng arc mà có lẽ bạn không mong muốn có, và là trở ngại chính khiến bạn zoom "E" bất thành.
Bây giờ bạn xoá tất cả cái trên đi và zoom "E" lại 1 lần nữa là OK ngay thôi.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1165 duy267

duy267

    biết vẽ point

  • Members
  • PipPip
  • 96 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 01 May 2012 - 08:43 AM

Sau khi zoom "E" bạn nhìn kỹ trên màn hình sẽ thấy:
- Phía dưới ở giữa có 1 chấm nhỏ: đó chính là hình của bạn (492 đối tượng).
- Phía trên ở giữa có 1 chấm nhỏ: đó chính là 4 đối tượng arc mà có lẽ bạn không mong muốn có, và là trở ngại chính khiến bạn zoom "E" bất thành.
Bây giờ bạn xoá tất cả cái trên đi và zoom "E" lại 1 lần nữa là OK ngay thôi.

OK. Em đã thử và đã thành công. Thanks bác rất nhiều. Nhưng em vẫn chưa hiểu những Arc này tạo ra từ đâu?
  • 0

#1166 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 May 2012 - 08:23 AM

1). OK rồi.
2). File "defaults.scr" có thể lấy được initial value bằng lisp mà bác, nhưng tiếc là không đủ.

2.) File "defaults.scr" bản chất là sự liệt kê mà bác
  • 0

#1167 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 May 2012 - 09:23 AM

2.) File "defaults.scr" bản chất là sự liệt kê mà bác

Không biết bác và tôi có hiểu nhầm nhau trong cách diễn đạt hay không? Ý tôi là dựa vào file "defaults.scr" thì có thể lấy được giá trị default để gán cho tất cả sysvar ấy mà. Ý định này nãy sinh từ 1 số câu hỏi của bạn đọc, đại ý là "không biết em đã tick nhầm cái gì mà tự nhiên bây giờ em không làm được chuyện này chuyện nọ...". Do đó tôi muốn chuyển các sysvar về default cho họ.
Bác đọc code này sẽ hiểu rõ hơn ý tưởng của tôi.

(defun C:HA1( / scr)
(setq scr (findfile "Defaults.scr"))
(command "SCRIPT" scr)
(princ))
(defun C:HA2( / scr pr dong)
(vl-load-com)
(setq scr (findfile "Defaults.scr"))
(setq pr (open scr "r"))
(while (setq dong (read-line pr))
(vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) (strcat dong " ")))
(close pr)
(princ))

  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1168 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 May 2012 - 09:42 AM

Không biết bác và tôi có hiểu nhầm nhau trong cách diễn đạt hay không? Ý tôi là dựa vào file "defaults.scr" thì có thể lấy được giá trị default để gán cho tất cả sysvar ấy mà. Ý định này nãy sinh từ 1 số câu hỏi của bạn đọc, đại ý là "không biết em đã tick nhầm cái gì mà tự nhiên bây giờ em không làm được chuyện này chuyện nọ...". Do đó tôi muốn chuyển các sysvar về default cho họ.
Bác đọc code này sẽ hiểu rõ hơn ý tưởng của tôi.


(defun C:HA1( / scr)
(setq scr (findfile "Defaults.scr"))
(command "SCRIPT" scr)
(princ))
(defun C:HA2( / scr pr dong)
(vl-load-com)
(setq scr (findfile "Defaults.scr"))
(setq pr (open scr "r"))
(while (setq dong (read-line pr))
(vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) (strcat dong " ")))
(close pr)
(princ))

Thì đúng là sự liệt kê. File "Defaults.scr" là những dòng (setvar .... biến chứ không lấy ra giá trị initial Value của biến hệ thống

Liệt kê tất cả biến hệ thống đầy đủ hơn file "Defaults.scr" và setvar Trong Lisp không phải suy nghĩ gì cả bác ạ!
  • 0

#1169 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 May 2012 - 09:58 AM

Thì đúng là sự liệt kê. File "Defaults.scr" là những dòng (setvar .... biến chứ không lấy ra giá trị initial Value của biến hệ thống
Liệt kê tất cả biến hệ thống đầy đủ hơn file "Defaults.scr" và setvar Trong Lisp không phải suy nghĩ gì cả bác ạ!

Ái dà! Sao tôi vẫn chưa "thông" được nhỉ!
LIệt kê tất cả sysvar thì được rồi. Nhưng tôi muốn đặt tất cả giá trị sysvar về giá trị ban đầu như khi mới cài cad ấy. Vậy làm sao biết được tất cả giá trị ban đầu đó để set nó về? Có thể được không hả bác?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1170 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 02 May 2012 - 04:36 PM

OK. Em đã thử và đã thành công. Thanks bác rất nhiều. Nhưng em vẫn chưa hiểu những Arc này tạo ra từ đâu?

Chỉ có người tạo ra bản vẽ của bạn mới biết được câu hỏi của bạn thôi. Như bác Hà đã nói khi zoom e mà bạn ko nhìn thấy không có nghĩa là các đối tượng biến mất mà nó quá nhỏ và nằm cách nhau quá xa. Còn bản vẽ của bạn mà hỏi bác Hà tại sao thì chắc bác Hà cũng trả lời như tôi vậy thôi.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1171 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 May 2012 - 04:40 PM

Chỉ có người tạo ra bản vẽ của bạn mới biết được câu hỏi của bạn thôi. Như bác Hà đã nói khi zoom e mà bạn ko nhìn thấy không có nghĩa là các đối tượng biến mất mà nó quá nhỏ và nằm cách nhau quá xa. Còn bản vẽ của bạn mà hỏi bác Hà tại sao thì chắc bác Hà cũng trả lời như tôi vậy thôi.

Hì hì! Tôi trả lời khác bác, là: "Bạn hỏi tôi thì tôi biết hỏi ai?"
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1172 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 10 May 2012 - 02:40 PM

Các bác cho hỏi khi em xài hàm (command "ZOM" "E") thì có một vài trường hợp bản vẽ bị biến mất hoàn toàn. Bác nào biết được nguyên nhân và cách khắc phục xin chỉ giúp. Thanks.

Để khắc phục các bản vẽ kiểu này thì có 1 mẹo rất đơn giản:
- Khi đánh lệnh:
Command: e
ERASE
Select objects: all
- Sau đó Bạn unselect các đối tượng mà Bạn muốn giữ lại (dùng phím Shift + Click chuột)
- Enter để loại bỏ các đối tượng thừa
  • 0

#1173 Cuong Nguyen

Cuong Nguyen

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 10 May 2012 - 03:40 PM

em đang dùng win7 , với cad 2007, ở công ty thì ap dc lisp cad, nhưng về nhà dùng lap lại ko dc. đang làm đồ án mà ức chế quá, dù tìm mọi diễn đàn mà ko có câu trả lời, xin các pro chỉ giáo giúp em với, khi em load lisp thì nó hiện lên cái dòng này " :excl: unknown command "CD" . Press F1 to help"
  • 0

#1174 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 10 May 2012 - 03:43 PM

em đang dùng win7 , với cad 2007, ở công ty thì ap dc lisp cad, nhưng về nhà dùng lap lại ko dc. đang làm đồ án mà ức chế quá, dù tìm mọi diễn đàn mà ko có câu trả lời, xin các pro chỉ giáo giúp em với, khi em load lisp thì nó hiện lên cái dòng này " :excl: unknown command "CD" . Press F1 to help"

Up cái lisp đó lên xem nhé!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1175 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 03 June 2012 - 11:47 AM

Có cách nào để thay đổi tính chất "Text view direction" của dimension không các bác: left to right <-> right to left.
Mình có lệnh đổi chiều tất cả các đối tượng có thể fải thực hiện đổi chiều. trừ thằng dimension này thì chưa làm được.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#1176 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 03 June 2012 - 12:14 PM

Có cách nào để thay đổi tính chất "Text view direction" của dimension không các bác: left to right <-> right to left.
Mình có lệnh đổi chiều tất cả các đối tượng có thể fải thực hiện đổi chiều. trừ thằng dimension này thì chưa làm được.

Có phải ý bác là muốn dịch chuyển vị trí text dọc theo đ­ường kích thước không?
Nếu đúng thì dùng:
(command "dim" "te" (entlast) "R") ; "L" ; "C"
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1177 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 03 June 2012 - 12:50 PM

không. Mình muốn đảo chiều text kích thước của 1 dimension. Bác chọn 1 dim bất kì. bật hộp thoại properties tìm tính chất trên sẽ hiểu điều mình muốn.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#1178 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 03 June 2012 - 01:12 PM

Có thuộc tính ở trên bảng Properties thì dùng VL thay đổi thôi anh :

(vla-put-DimTxtDirection (setq a (vlax-ename->vla-object (car(entsel)))) (~ (vlax-get a 'DimTxtDirection)))
@testers : đây là thuộc tính mới, CAD đời cũ không có ^^
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#1179 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 03 June 2012 - 01:37 PM

cảm ơn ketxu. mình dump properties của dim ra rồi nhưng cứ đi tìm "TextDirection" ở dưới. ai ngờ nó lại là "DimTxtDirection" tít bên trên :D
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#1180 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 06 June 2012 - 11:35 AM

Các bác có cái hàm con nào lấy tọa độ ucs (điểm chèn) của đối tượng không cho mình xin. dạo này mình mắc bệnh lười, ngại viết quá, hề!:
nếu đối tượng thuộc đối tượng khối (block, xref, dim...) thì cũng quy nó về ucs luôn. Mục đích của mình là để tìm vị trí của đối tượng trong bản vẽ thôi :D
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD