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

#2201 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

Đã gửi 26 November 2014 - 11:41 AM

Nếu nhập trực tiếp chứ k phải setvar sẽ khác đó

Hi, may thầy ketxu nhắc, nhập trực tiếp từ bàn phím là độ, còn setvar thì phải nhập radian. Và hàm (angle  ) tính góc từ 2 điểm không chịu ảnh hưởng của biến này thì phải, nó vẫn trả về theo angbase= 0 mặc định


  • 0

#2202 luhaivinh

luhaivinh

    Edu level: li10

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

Đã gửi 26 November 2014 - 11:42 AM

 Ý tưởng của em là khi ta vừa dim xong kích thước ta edit luôn.

Em chưa biết dòng command sẽ code như thế nào hết. :wacko:

(defun c:doi(/ chon)
  (setq chon (entlast))
  (setq text (getstring "\nNhap kich thuoc moi"))
  (command ".ddedit" chon ??? text  ??))

  • 0

#2203 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 26 November 2014 - 02:43 PM

Một ví dụ:

(defun c:test()
(setq p1 (getpoint "\nChon diem chan dim thu nhat: ")
	  p2 (getpoint "\nChon diem chan dim thu hai: ")
	  p3 (getpoint "\nChon diem dat: ")
	  )
(command ".DIMALIGNED" p1 p2 p3)
(setq info (entget(entlast)))
(entmod (subst (cons 1 "Vinh_hot_boy") (assoc 1 info) info))
)

  • 1

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


#2204 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 26 November 2014 - 03:10 PM

 Ý tưởng của em là khi ta vừa dim xong kích thước ta edit luôn.

Em chưa biết dòng command sẽ code như thế nào hết. :wacko:

(defun c:doi(/ chon)
  (setq chon (entlast))
  (setq text (getstring "\nNhap kich thuoc moi"))
  (command ".ddedit" chon ??? text  ??))

 

Chắc là như vầy (entlast) là cái dim nhé!

(defun c:doi(/ chon text)
  (setq chon (entlast))
  (setq text (getstring "\nNhap kich thuoc moi"))
  (command "._dimedit" "n" text chon "" ".ddedit" chon))

  • 1

#2205 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

Đã gửi 27 November 2014 - 09:05 AM

(defun c:roo(/ doigoc start end dt db dh dg goc tt ent lst px pg)
;====================================================
(defun start()
(setq osmodeold (getvar "osmode")
      cmdechoold (getvar "cmdecho")
	  angdirold (getvar "angdir")
	  angbaseold (getvar "angbase")
	  )
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "angbase" (/ pi 2.0))
(setvar "angdir" 1)

)
;=======================================================
(defun end()
(setvar "osmode" osmodeold)
(setvar "cmdecho" cmdechoold)
(setvar "angdir" angdirold)
(setvar "angbase" angbaseold)
(setq osmodeold nil
      cmdechoold nil
	  angdirold nil
	  angbaseold nil
	  )
)
;=======================================================	  
 (vl-load-com)                                                    
	                         (princ "Chon Doi Tuong Can Quay: ")							 
                             (setq dt (ssget)
							       db (getpoint "\nChon BasePoint:")
							       tt (entsel "\nChon doi duong tam tau: ")
                                  ent (car tt)
                                  lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (or (= (car x) 10) (= (car x) 11))) (entget ent))))
							 (start )
                             (if (< (distance db (setq px (car lst))) (distance db (setq pg (cadr lst))))					 
							 (command ".rotate" dt "" db "r" px pg )  							 
                             (command ".rotate" dt "" db "r" pg px ) 							 
							 );end if			 
(end )
)	  

Các bác ơi em viết lại đoạn code để quay như trên, mục đích của em là đặt biến hệ thống lại để quay theo ý mình (angbase và angdir). Có chút rắc rối ở đây là khi viết hàm con (end ) ngay sau lệnh "rotate"  thì nó thực hiện hàm end này trước khi mình nhập góc vào, làm cho hàm (start ) viết ở trên trở nên công cốc. Em mày mò mãi mà chưa giải quyết được vấn đề này, các bác cho em chút ý kiến được không.


  • 0

#2206 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 27 November 2014 - 09:40 AM

- chà chà Hieu mò mẫn ghê thật chơi cả vl,lambda ^^, hàm end Hieu thử bỏ mấy thằng nil đi xem , nhoc đoán vậy ^^


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

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








#2207 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

Đã gửi 27 November 2014 - 09:52 AM

- chà chà Hieu mò mẫn ghê thật chơi cả vl,lambda ^^, hàm end Hieu thử bỏ mấy thằng nil đi xem , nhoc đoán vậy ^^

Hi hi, mấy cái đó là tớ "mượn code" của các bro trên diễn đàn thôi nhóc ạ. chỉ xào xáo lại tí ấy mà


  • 0

#2208 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 27 November 2014 - 10:03 AM

thêm pause vào cuối dòng command


  • 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


#2209 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

Đã gửi 27 November 2014 - 10:32 AM

thêm pause vào cuối dòng command

thế thì hàm end lại mất tác dụng hiepttr ạ.


  • 0

#2210 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 27 November 2014 - 10:46 AM

Mình test, trả biến đàng hoàng mà ??? :D


  • 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


#2211 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

Đã gửi 27 November 2014 - 10:53 AM

Mình kiểm tra đi kiểm tra lại mà vẫn thế, nó không trả lại biến angbase và angdir, hiệp post code của hiep lên mình chạy thử được không


  • 0

#2212 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 27 November 2014 - 11:03 AM

:D :D :D

Tất cả là của bạn !

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.c...coding/page-111
(defun c:roo(/ doigoc start end dt db dh dg goc tt ent lst px pg)
;====================================================
(defun start()
(setq osmodeold (getvar "osmode")
      cmdechoold (getvar "cmdecho")
	  angdirold (getvar "angdir")
	  angbaseold (getvar "angbase")
	  )
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setvar "angbase" (/ pi 2.0))
(setvar "angdir" 1)

)
;=======================================================
(defun end()
(setvar "osmode" osmodeold)
(setvar "cmdecho" cmdechoold)
(setvar "angdir" angdirold)
(setvar "angbase" angbaseold)
(setq osmodeold nil
      cmdechoold nil
	  angdirold nil
	  angbaseold nil
	  )
)
;=======================================================	  
 (vl-load-com)                                                    
	                         (princ "Chon Doi Tuong Can Quay: ")							 
                             (setq dt (ssget)
							       db (getpoint "\nChon BasePoint:")
							       tt (entsel "\nChon doi duong tam tau: ")
                                  ent (car tt)
                                  lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (or (= (car x) 10) (= (car x) 11))) (entget ent))))
							 (start )
                             (if (< (distance db (setq px (car lst))) (distance db (setq pg (cadr lst))))					 
							 (command ".rotate" dt "" db "r" px pg pause)  							 
                             (command ".rotate" dt "" db "r" pg px pause) 							 
							 );end if			 
(end)
) 

  • 1

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


#2213 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

Đã gửi 27 November 2014 - 11:30 AM

híc, chỉ khác nhau mỗi Pause"Pause" mà đau đầu cả buổi, thanks hiep nhiều


  • 0

#2214 luhaivinh

luhaivinh

    Edu level: li10

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

Đã gửi 27 November 2014 - 03:33 PM

Quá hay thanks hai bác nhiều..... :D


  • 0

#2215 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 28 November 2014 - 12:31 PM

- Trong lsp xoay của Hieu có dòng lấy nó ra kìa ^^

(setq lst  (mapcar 'cdr (vl-remove-if-not '(lambda(x) (or (= (car x) 10) (= (car x) 11))) (entget ent))))


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

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








#2216 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

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

- Trong lsp xoay của Hieu có dòng lấy nó ra kìa ^^

hi hi, để tớ xoá câu hỏi đi cho bớt spam topic, vì "đi mượn" nên không hiểu đó mà nhóc. thanks nhóc nhiều nha. Lâu lâu cầm đèn chạy trước ô tô bị ô tô đâm. :D


  • 0

#2217 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

Đã gửi 30 November 2014 - 09:46 AM

Chào các bác. Với hàm bẫy lỗi *error* em đã giải quyết được vấn đề trả biến hệ thống về như ban đầu khi chưa chạy xong chương trình đã bấm Esc. Nhưng còn một vấn đề nữa là khi em bấm ctrol z để trả lại kết quả như ban đầu trước khi chạy lisp thì biến hệ thống cũng bị thay đổi luôn. Các bác tư vấn cho em cái này với.
  • 0

#2218 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 30 November 2014 - 10:34 AM

Bạn đưa lisp đó lên đây mọi người xem thử. Trong hàm bẫy lỗi ngoài việc set lại biến hệ thống đôi khi cần phải thêm các hàm về undo nữa.


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


#2219 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

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

Đã gửi 30 November 2014 - 11:32 AM

Của em đây ạ. Em không ngồi máy tính nên không đưa vào code được:(defun c:roo(/ doigoc start end *error* vars ovars nvars dt db dh dg goc tt ent lst px pg )
;====================================================
(defun doigoc( goc )
( setq goc (- 450.0 goc)
goc (rem goc 360.0 )
)
)
;========================================================================
(defun start()
(setq vars '("osmode" "cmdecho" "angdir" "angbase") )
(setq ovars (mapcar 'getvar vars)
nvars (mapcar 'setvar vars (list 0 0 1 (/ pi 2))))
)
(defun end()
(and ovars (mapcar 'setvar vars ovars))
)
(defun *error* (ABC)
(end)
)
;=======================================================
(vl-load-com)
(princ "Chon Doi Tuong Can Quay: ")
(setq dt (ssget)
db (getpoint "\nChon BasePoint:")
tt (entsel "\nChon doi duong tam tau: ")
ent (car tt)
lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (or (= (car x) 10) (= (car x) 11))) (entget ent))))
(start )

(if (< (distance db (setq px (car lst))) (distance db (setq pg (cadr lst))))
(progn
(princ (strcat "\nNhap Phuong Vi <" (rtos (doigoc (* 180.0 (/ 1 pi) (angle px pg))) 2 2) ">:" ) )
(command ".rotate" dt "" db "r" px pg pause)
) ; End progn
(progn
(princ (strcat "\nNhap Phuong Vi <" (rtos (doigoc (* 180.0 (/ 1 pi) (angle pg px))) 2 2) ">:" ) )
(command ".rotate" dt "" db "r" pg px pause )
) ; End progn
);end if
(end)
)
  • 0

#2220 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 30 November 2014 - 01:03 PM

Chẳng hạn bạn sửa lại như thế này:

(defun c:roo(/ doigoc start end *error* vars ovars nvars dt db dh dg tt ent lst px pg)
 (defun doigoc(goc)
  (rem (- 450.0 goc) 360.0))
 (defun start()
  (setq vars '("osmode" "cmdecho" "angdir" "angbase"))
  (setq ovars (mapcar 'getvar vars)
        nvars (mapcar 'setvar vars (list 0 0 1 (/ pi 2)))))
 (defun end()
  (and ovars (mapcar 'setvar vars ovars)))
 (defun *error* (ABC)
  (end))
 (vl-load-com) 
 (princ "Chon Doi Tuong Can Quay: ") 
 (setq dt (ssget)
       db (getpoint "\nChon BasePoint:")
       tt (entsel "\nChon doi duong tam tau: ")
       ent (car tt)
       lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (or (= (car x) 10) (= (car x) 11))) (entget ent))))
 (command "undo" "be")    
 (start)
 (if (< (distance db (setq px (car lst))) (distance db (setq pg (cadr lst))))
  (progn 
   (princ (strcat "\nNhap Phuong Vi <" (rtos (doigoc (* 180.0 (/ 1 pi) (angle px pg))) 2 2) ">:")) 
   (command ".rotate" dt "" db "r" px pg pause))
  (progn 
   (princ (strcat "\nNhap Phuong Vi <" (rtos (doigoc (* 180.0 (/ 1 pi) (angle pg px))) 2 2) ">:")) 
   (command ".rotate" dt "" db "r" pg px pause)))
 (end)
 (command "undo" "e")) 
 

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