Đế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

#2141 luhaivinh

luhaivinh

    Edu level: li10

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

Đã gửi 12 November 2014 - 05:33 PM

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. :)


  • 0

#2142 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 12 November 2014 - 05:39 PM

điểm chuẩn !!!


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#2143 luhaivinh

luhaivinh

    Edu level: li10

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

Đã gửi 12 November 2014 - 06:12 PM

là sao vậy bác Hiệp? :)


  • 0

#2144 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 12 November 2014 - 07:00 PM

Nghĩa là thiếu điểm chuẩn (base point)
  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#2145 luhaivinh

luhaivinh

    Edu level: li10

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

Đã gửi 12 November 2014 - 07:07 PM

ok.thanks bác. :D


  • 0

#2146 luhaivinh

luhaivinh

    Edu level: li10

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

Đã gửi 13 November 2014 - 01:38 PM

Mọi người cho em hỏi muốn chọn 5 đối tượng cuối cùng trong bản vẽ thì code sao vậy mọi người.Căng quá :)


  • 0

#2147 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 13 November 2014 - 01:57 PM

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)
)

  • 1

#2148 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 13 November 2014 - 03:29 PM

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ẽ

 

 


  • 2

#2149 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 13 November 2014 - 08:36 PM

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.


  • 0

#2150 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 13 November 2014 - 08:42 PM

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 ^^


  • 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


#2151 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 13 November 2014 - 08:45 PM

Giả sử p là điểm có tọa độ (x y)

1).

(setq x (car p))

(setq y (cadr p))

2).

(setq p (list x y))


  • 2

* 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.


#2152 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 13 November 2014 - 09:01 PM

Cảm ơn bác @Doan Van Ha


  • 0

#2153 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 13 November 2014 - 09:02 PM

- đọc code anh Tue nhoc còn hiểu mang máng, qua code anh Ket ngủm lun  :P


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2154 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 13 November 2014 - 10:19 PM

- đọc code anh Tue nhoc còn hiểu mang máng, qua code anh Ket ngủm lun  :P

 

Nhóc tự viết thử dựa trên gợi ý của Ket thử xem.

Tham khảo : http://www.cadviet.c...-coding/page-25


  • 1

#2155 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 14 November 2014 - 07:24 AM

- hi về công năng thì code anh Tue với anh Ket thì nhoc nắm đc rùi ^^, nhoc chỉ ngán thuật toán của anh Ket chỗ hàm h<->d, nhoc vẫn chưa rành về thằng đó, khi nào có cơ hội nhoc sẽ nghiên cứu , gần cuối năm mí sếp dí tuột quần  :P

- tạm thời mót về để dành khi nào xài tính tiếp hehe

- câu hỏi này của Vinh chắc để viết gì đó, để Vinh nghiên cứu chờ xem Vinh mún làm gì ^^


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2156 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 14 November 2014 - 10:05 AM

Hàm h<->d k phải a viết nhé nhoclangbat

Toàn bộ code trong defun đó bỏ qua. Vấn đề a nói tới ở đây là code của a và của bác Tue_NV sẽ trả về kết quả khác nhau tùy trường hợp


  • 0

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


#2157 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 14 November 2014 - 10:31 AM

Hàm h<->d k phải a viết nhé nhoclangbat

Toàn bộ code trong defun đó bỏ qua. Vấn đề a nói tới ở đây là code của a và của bác Tue_NV sẽ trả về kết quả khác nhau tùy trường hợp


  • 0

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


#2158 luhaivinh

luhaivinh

    Edu level: li10

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

Đã gửi 15 November 2014 - 09:15 AM

Thanks mọi người đã giúp đỡ. Đã mở mang thêm  mắt mũi và đầu óc rồi :)

Vinh đang viết vài cái lisp dùng ở công ty đó Nhoclangbac . :P


  • 0

#2159 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 15 November 2014 - 09:32 AM

các bác ơi cho em hỏi cái, em có 2 điểm M (a, b ) , N (c,d). Làm thế nào để trả về giá trị góc của đoạn thẳng M, N này thế các bác (góc trả về giá trị từ 0 đến 360 độ ấy). 2 điểm này được lấy giá trị trong quá trình tính toán chứ không phải nhập từ màn hình nha các bác. Em đã viết code như này nhưng có vẻ không ổn:

(defun testgoc( a b c d )
( setq m (list a b)
       n (list c d)
       goc (* (/ (getangle m n) pi) 180.0) 
)
)

  • 0

#2160 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 15 November 2014 - 09:43 AM

- Bạn dùng hàm angle để lấy goc của 2 điểm , còn getangle là phải nhập
  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^