Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Jin Yong

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

Các bài được khuyến nghị

pphung183    425

Mỗi khi cài đặt mới Window của bác Bill Gates, bạn phải cài driver thiết lập độ phân giải màn hình cho phù hợp, OK?

Screen Resolution (1366x768) là thiết lập theo Widow, OK?

Tất cả phần mềm chạy trên nền Window dù có phóng to cửa sổ Maximum cũng đều có tầm nhìn Screen Resolution (1366x768)

tính từ mép trong cùa khung viền Window

Code lisp Cad nếu bạn không trừ thanh Taskbar thì chắc chắn cửa sổ Window Cad của bạn là (1382 x 784), nếu trừ bề rộng khung viền là 8 pixels thì Screen Resolution vẫn là (1366x768).

Đó là lí do của từ same same khi người ta muốn tính ành điểm từ đâu.

Trong Window bạn có thể phóng to chà bá khỏi tầm kiểm soát cái Screen Resolution hay thu nhỏ nó lại.

Height của Taskbar có thể thay đổi trong Window. Nếu Code lisp có thể lấy Height của Taskbar thì chắc phải có sự đồng ý của bác Bill :)

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
Doan Van Ha    2.678

Mỗi khi cài đặt mới Window của bác Bill Gates, bạn phải cài driver thiết lập độ phân giải màn hình cho phù hợp, OK?

Screen Resolution (1366x768) là thiết lập theo Widow, OK?

Tất cả phần mềm chạy trên nền Window dù có phóng to cửa sổ Maximum cũng đều có tầm nhìn Screen Resolution (1366x768)

tính từ mép trong cùa khung viền Window

Code lisp Cad nếu bạn không trừ thanh Taskbar thì chắc chắn cửa sổ Window Cad của bạn là (1382 x 784), nếu trừ bề rộng khung viền là 8 pixels thì Screen Resolution vẫn là (1366x768).

Đó là lí do của từ same same khi người ta muốn tính ành điểm từ đâu.

Trong Window bạn có thể phóng to chà bá khỏi tầm kiểm soát cái Screen Resolution hay thu nhỏ nó lại.

Height của Taskbar có thể thay đổi trong Window. Nếu Code lisp có thể lấy Height của Taskbar thì chắc phải có sự đồng ý của bác Bill :)

Màu xanh: mọi sự đã rõ ràng rồi.

Màu đỏ: Lisp có thể lấy được Screen Resolution thì rất có thể nó cũng lấy được height của Taskbar (dù chúng có thể thay đổi). Hỏi là có lý do chỗ đó.

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
ThuyLinh313    146

Kích thước lớn hơn 2 lần border : 8 x 2 = 16

Code bằng MFC thì dễ, bằng lisp thì chưa biết được hay không

19626_frameborder.jpg

http://www.cadviet.com/upfiles/4/19626_frameborder.jpg

 

Bạn dùng phần mềm gì để chụp cái hình này thế. Mình đang tìm 1 chương trình như thế này. nếu đọc được mã màu của từng điểm ảnh thì càng hay  :D

 

@ĐVH: Chú thử tìm trong registry xem. Nếu có cách nào đó thì chắc chắn chỉ có thể lấy ở đó. bạn pphung183 nói đúng đó chú. lisp chỉ lấy được những gì thuộc về cad. Cửa sổ cad cũng là 1 đối tượng của cad. Còn taskbar là của windows, nếu bác bill cho thì mới 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
Doan Van Ha    2.678

Bạn dùng phần mềm gì để chụp cái hình này thế. Mình đang tìm 1 chương trình như thế này. nếu đọc được mã màu của từng điểm ảnh thì càng hay  :D

 

@ĐVH: Chú thử tìm trong registry xem. Nếu có cách nào đó thì chắc chắn chỉ có thể lấy ở đó. bạn pphung183 nói đúng đó chú. lisp chỉ lấy được những gì thuộc về cad. Cửa sổ cad cũng là 1 đối tượng của cad. Còn taskbar là của windows, nếu bác bill cho thì mới có.

 

Bạn dùng phần mềm gì để chụp cái hình này thế. Mình đang tìm 1 chương trình như thế này. nếu đọc được mã màu của từng điểm ảnh thì càng hay  :D

 

@ĐVH: Chú thử tìm trong registry xem. Nếu có cách nào đó thì chắc chắn chỉ có thể lấy ở đó. bạn pphung183 nói đúng đó chú. lisp chỉ lấy được những gì thuộc về cad. Cửa sổ cad cũng là 1 đối tượng của cad. Còn taskbar là của windows, nếu bác bill cho thì mới có.

Cái màu đỏ thì chú không đồng ý. Lisp nó lấy hoặc làm được nhiều thứ không thuộc về cad.

Chẳng hạn nó lấy được screen resolution là của bác Bill chứ chẳng phải của bác Desk, thì taskbar cũng có thể lấy được height lắm chứ.

Nó có thể lấy được là user đang cài đặt dấu thập phân là chấm hay phẩy, cái này cũng thuộc window chứ không phải cad...

Thậm chí nó có thể gởi mail...

Không hiểu sao TL đã nói đến registry mà lại nói chỉ lấy được những thứ thuộc cad?

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
ThuyLinh313    146

screen resolution lấy được bằng các hàm của Gia_bach gợi ý cho chú chính xác là của acadobject chứ không phải của windows chú ạ. Cài đặt của user cũng là đọc từ registry hoặc 1 wap nào đó mà ra, còn gửi mail là chức năng chứ mà chú. Không liên quan gì đến cơ sở dữ liệu của cad hay lisp.

 

Ý cháu muốn nói ở đây là gợi ý của pphung183 cho chú đó. Ý bạn ấy muốn nói là để tìm chiều cao của taskbar thì chỉ có tìm trong registry xem bác Bill có khai báo vào registry hay không, bác ấy mà không cho thì chịu. Tất nhiên là lisp có thể đọc registry và chỉ có cách đó chứ bản thân cad nó không lưu giữ thông tin đó.

 

Có thể chú sẽ lăn tăn về câu bôi đỏ đó. "Lấy" ở đây được hiểu là việc truy cập trực tiếp vào đối tượng và đọc thông tin của nó. giống như hàm lấy screen resolution của Gia_bach :)

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
Doan Van Ha    2.678

screen resolution lấy được bằng các hàm của Gia_bach gợi ý cho chú chính xác là của acadobject chứ không phải của windows chú ạCài đặt của user cũng là đọc từ registry hoặc 1 wap nào đó mà ra, còn gửi mail là chức năng chứ mà chú. Không liên quan gì đến cơ sở dữ liệu của cad hay lisp.

 

Ý cháu muốn nói ở đây là gợi ý của pphung183 cho chú đó. Ý bạn ấy muốn nói là để tìm chiều cao của taskbar thì chỉ có tìm trong registry xem bác Bill có khai báo vào registry hay không, bác ấy mà không cho thì chịu. Tất nhiên là lisp có thể đọc registry và chỉ có cách đó chứ bản thân cad nó không lưu giữ thông tin đó.

Xanh: nếu lúc đầu TL viết rõ như vậy thì đã không ý kiến gì.

Đỏ: cái của Gia_bach là cad rặc (lấy màn hình cad), còn screen resolution là win rặc (lấy màn hình win: chuột phải vào màn hình win sẽ thấy). Chú đang nói tới cái win rặc là screen resolution vẫn có thể lấy được bằng lisp, thậm chí không dùng Vl-registry-read.

Hy vọng là trong reg sẽ có, nhưng nếu nó không có thì cũng chưa thể khẳng định được gì, ví dụ như screen resolution ở trê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
ndtnv    397

Bạn dùng phần mềm gì để chụp cái hình này thế. Mình đang tìm 1 chương trình như thế này. nếu đọc được mã màu của từng điểm ảnh thì càng hay  :D

 

@ĐVH: Chú thử tìm trong registry xem. Nếu có cách nào đó thì chắc chắn chỉ có thể lấy ở đó. bạn pphung183 nói đúng đó chú. lisp chỉ lấy được những gì thuộc về cad. Cửa sổ cad cũng là 1 đối tượng của cad. Còn taskbar là của windows, nếu bác bill cho thì mới có.

Chỉ dùng Alt+PrintScreen, sau đó paste qua paintbrush của win. Đọc mã màu thì save as bitmap 24 là định dạng không compress,  trước đây mình dùng C++ để đọc mã màu, còn chương trình khác thì mình chưa dùng. ThuyLinh thử search color RGB xem.

  • 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
luhaivinh    9

Mọi người cho e hỏi muốn chuyển từ trục tọa độ bình thường (Rectanggular snap) sang trục tọa độ (Isometric snap) thì code sao mọi người.thanks mọi ngườ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
Tue_NV    3.841

còn muốn chuyển các kiểu  <Isoplane Top>  <Isoplane Left>  <Isoplane Right>  qua lại thì sao mọi người :)

 

(setvar "SNAPISOPAIR" Flag)

+ Flag = 0 -> <Isoplane Left>

+ Flag = 1 -> <Isoplane Top>

+ Flag = 2 -> <Isoplane Right>

 

 

  • 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
luhaivinh    9

Mọi người cho em hỏi code của lệnh block như thế này có phải không?

(command "-block" "ten" chon "")

Em code thế nhưng không được mọi người chỉ giùm vớ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
Tot77    501

Không biết bên express có hàm nào làm cái này không, cho nên phải tự chế thôi.

 

(defun c:test (/ a lst ss b ss0)
  (setq a (entlast)
      lst (list a)
      ss (vl-remove a (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "X"))))) 
  )
  (repeat 4
    (setq b (car (vl-remove-if-not '(lambda (x) (equal a (entnext x))) ss))
lst (cons b lst) 
ss (vl-remove b ss)
a b
    )
  )
  (setq ss0 (ssadd))
  (mapcar '(lambda(x) (ssadd x ss0)) lst)
  (sssetfirst nil ss0)
)
  • 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
Tue_NV    3.841

 

Không biết bên express có hàm nào làm cái này không, cho nên phải tự chế thôi.

 

(defun c:test (/ a lst ss b ss0)
  (setq a (entlast)
      lst (list a)
      ss (vl-remove a (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "X"))))) 
  )
  (repeat 4
    (setq b (car (vl-remove-if-not '(lambda (x) (equal a (entnext x))) ss))
lst (cons b lst) 
ss (vl-remove b ss)
a b
    )
  )
  (setq ss0 (ssadd))
  (mapcar '(lambda(x) (ssadd x ss0)) lst)
  (sssetfirst nil ss0)
)

 

Chỉ cần lấy 5 đối tượng trong bản vẽ mà bác dùng (ssget "X") thì số lượng duyệt sẽ nhiều quá nếu bản vẽ lớn

Code nhanh

 

(defun gob(n / lst entl)
 (Repeat n
   (if (setq entl (entlast)) (progn
   (setq lst (append lst (list entl)))
   (entdel entl)))
 )
  (mapcar 'entdel lst)
  lst
 )

 

Hàm (gob n) -> trong đó n là số đối tượng cần chọn cuối cùng trong bản vẽ

 

 

  • 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

Các bác ơi cho em hỏi với, có 1 điểm tọa độ  (x,y), các bác tư vấn cho em hàm để lấy giá trị thực x và y ra với, Và ngược lại có 2 giá trị thực x , y làm thế nào để gán cho nó thành một điểm có tọa độ (x, y). Cảm ơn các bác nhiề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
ketxu    2.652

Thanks bác Tuệ về ví dụ nhắc lại việc entdel có thể restore object :)

Ketxu cũng đóng góp thêm 1 ý tưởng khác. Dài hơn chút, dựa vào handle của đối tượng

Cách thức cũng k có gì lạ :

1- Lấy handle của đối tượng entlast (ở dạng hexa)

2- Mỗi lần trừ đi 1 sẽ ra đối tượng kề trước đó

Để nhanh gọn ket search code chuyển đổi hệ cơ số hexa sang decimal (h<->d) để làm phép tính rồi chuyển ngược về handle, sau đó sử dụng handent để lấy ra ename

(defun _gob (n / h<->d l e)
(cond 
	((setq e (entlast))		
		(defun h<->d(q / h) 
			(setq h'("0""1""2""3""4""5""6""7""8""9""A""B""C""D""E""F"))
			(cond ((numberp q) ;;; convert decimal to hex 
			(setq q(fix q)) 
			(strcat
					(if(>(/ q 16)0)(h<->d(/ q 16))"")
					(nth(rem q 16)h)
			) ) 
			((=(type q)'STR) ;;; convert hex to decimal
			(setq q (strcase q))
			(repeat(strlen q)(setq q(strcat(substr q 2)" "(itoa(- 16(length(member(substr q 1 1)h)))))))
			(setq q( read(strcat "("q ")")))
			(apply'+(mapcar'*(reverse q)'(1 16 256 4096 65536 1048576 16777216 268435456)))))
		)
		(setq h (h<->d (cdr (assoc 5 (entget e)))) l (list e))
		(repeat (1- n) (setq l (cons	(handent (h<->d (1- h))) l)))
))
l
)

Tuy nhiên, ở đây có một điểm khác biệt rất lớn về cơ bản ở lisp này với lisp bác Tuệ, để luhavinh tìm hiểu xem ^^

  • 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ạ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


×