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

#2281 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 05 December 2014 - 09:59 AM

Đưa

(while
  (null c_do)

)

ra ngoài cùng, kiểm tra nội dung text hoặc giá trị nhập hh là số

 Vẫn chưa hiểu nên chưa làm được

hh là ok rồi nếu không phải số là không được 

chỉ còn lại text thôi


  • 0

#2282 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 05 December 2014 - 10:41 AM

Cái này cũng tàm tạm nè!

 

(defun C:HA(/ ent cd)
 (if (setq ent (car (entsel "\nChon hoac nhap cao do: ")))
  (while (not (setq cd (distof (cdr (assoc 1 (entget ent))))))
   (if (setq ent (car (entsel "\nChon hoac nhap cao do: ")))
    (setq cd (distof (cdr (assoc 1 (entget ent)))))))
  (setq cd (distof (substr (getvar "lastprompt") (strlen "Chon hoac nhap cao do: ")))))
 cd) 
 

Chưa ổn:

1. Nếu chọn đối tượng không có dxf 1

2. Nếu INPUTHISTORYMODE > 7 và nhập số nguyên


  • 0

#2283 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 05 December 2014 - 11:06 AM

1). Thậm chí còn ràng buộc thêm vài điều kiện nữa, ví dụ chừng nào chọn được số, hoặc chừng nào nhập đúng số, không cho enter .v.v...

Tuy nhiên do chủ topic y/c ngắn gọn quá nên cứ để tự bổ sung cho họ sướng.

2). Nhập 23 >> 23.0. Chủ topic có nói gì thêm nữa đâu, nên không hiểu ý.


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


#2284 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 05 December 2014 - 11:37 AM

1). Thậm chí còn ràng buộc thêm vài điều kiện nữa, ví dụ chừng nào chọn được số, hoặc chừng nào nhập đúng số, không cho enter .v.v...

Tuy nhiên do chủ topic y/c ngắn gọn quá nên cứ để tự bổ sung cho họ sướng.

2). Nhập 23 >> 23.0. Chủ topic có nói gì thêm nữa đâu, nên không hiểu ý.

Đã sửa ở bài #2278 nhưng khổ nổi khi lở chọn đối tượng rồi thì không nhập được số 

Không thoát được (while)

còn nhập số ko đúng vẫn được nhập lại nhập khi đúng thì thôi hoặc quay lại phép chọn vẫn được


  • 0

#2285 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 05 December 2014 - 12:17 PM

Đã sửa ở bài #2278 nhưng khổ nổi khi lở chọn đối tượng rồi thì không nhập được số

Không thoát được (while)

còn nhập số ko đúng vẫn được nhập lại nhập khi đúng thì thôi hoặc quay lại phép chọn vẫn được

Tôi chỉ hiểu được dòng màu xanh. Dòng màu tím thì không hiểu vì tôi dùng OK. Dòng màu đỏ thì mâu thuẫn quá: sao đã chọn đối tượng mà còn nhập số?

Nếu bạn cứ trình bày vấn đề khó hiểu thế này thì chịu thôi.

@ndtnv: ý của bạn là khi biến "INPUT..." >> 7 thì sao nhỉ, tôi không hiểu?


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


#2286 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 05 December 2014 - 01:20 PM

Sorry là test chưa kỹ nên hiểu sai nguyên nhân, nhưng lisp của bạn nếu chọn text không phải là số, sau đó nhập số thì kq = nil

@ huunhantvxdts: Đã gợi ý và pm chi tiết hơn nhưng bạn không đọc.

 

(while (null c_do)
(acet-ss-clear-prev)
    (if    (setq chon (car (entsel "\nCao do chuan chon hoac nhap so:")))
        (if (= "TEXT" (cdr (assoc 0 (entget chon))))
            (setq c_do (distof (cdr (assoc 1 (entget chon))))))
        (setq c_do (distof (substr (getvar "lastprompt") (strlen "Cao do chuan chon hoac nhap so: "))))
    )
)

Ps: đang tìm nguyên nhân vì sao nếu chọn text không phải là số thì entsel luôn khác nil

Ps2:  Đã tìm ra nguyên nhân là nếu không chọn gì, entsel trả về đối tượng previous

@Ha: tôi chưa rãnh để thử nhưng nếu dùng grread thì có thể được, nhưng viết thì dài mà xuất hiện 2 dòng thì cũng không ảnh hưởng gi lớn


  • 2

#2287 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 05 December 2014 - 02:02 PM

Làm sao hủy được 2 dòng xuất hiện khi nhập string không phải là số đi thì đã hơn 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.


#2288 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 05 December 2014 - 02:14 PM

Tôi chỉ hiểu được dòng màu xanh. Dòng màu tím thì không hiểu vì tôi dùng OK. Dòng màu đỏ thì mâu thuẫn quá: sao đã chọn đối tượng mà còn nhập số?

Nếu bạn cứ trình bày vấn đề khó hiểu thế này thì chịu thôi.

@ndtnv: ý của bạn là khi biến "INPUT..." >> 7 thì sao nhỉ, tôi không hiểu?

Ở đây tôi dùng lở là vì

Text đó đang nằm trong Block và Block thuộc tính hay đại loại không phải là text. Bây giờ muốn nhập lại số thì không được nữa.

Cám ơn bạn nhiều


  • 0

#2289 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 05 December 2014 - 02:30 PM

Sorry là test chưa kỹ nên hiểu sai nguyên nhân, nhưng lisp của bạn nếu chọn text không phải là số, sau đó nhập số thì kq = nil

@ huunhantvxdts: Đã gợi ý và pm chi tiết hơn nhưng bạn không đọc.

 

(while (null c_do)
(acet-ss-clear-prev)
    (if    (setq chon (car (entsel "\nCao do chuan chon hoac nhap so:")))
        (if (= "TEXT" (cdr (assoc 0 (entget chon))))
            (setq c_do (distof (cdr (assoc 1 (entget chon))))))
        (setq c_do (distof (substr (getvar "lastprompt") (strlen "Cao do chuan chon hoac nhap so: "))))
    )
)

Ps: đang tìm nguyên nhân vì sao nếu chọn text không phải là số thì entsel luôn khác nil

Ps2:  Đã tìm ra nguyên nhân là nếu không chọn gì, entsel trả về đối tượng previous

Đã đọc rồi nhưng không hiểu để làm 

Cám ơn bạn nhiều

Bây giờ thì quá là đúng luôn


  • 0

#2290 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 05 December 2014 - 02:40 PM

- hi mấy anh trợ giúp nhoc với, bài toán text né line, nhoc mót nhặt từ nhiều nơi tới đc đây mà vẫn còn xíu gì đó nhoc vẫn chưa hiểu ^^, chạy vẫn chưa đc như ý.

- vd: vẽ 1 rectang sau đó viết text trên các đỉnh, justy là middle, mã 11 trùng với đỉnh. khi chạy quét từng text thì nó chạy đúng ý nhoc là 45 độ là góc đầu tiên, còn quét 1 lần để duyệt thì mỗi text lại chạy khác nhau đúng ra đều 45 độ hết, mặc dù xung quanh đang trống chưa có vật cản nào ^^

(defun move_text (position height / r ang found pt1 pt2 ssobj newpos)

  (setq	r (* 1.2 height)
	ang   (/ pi 4)
	found nil
  )

  (while (and (not found) (<= ang (* 2 pi)))

    (setq newpos (polar position ang r)
	  pt1	 (list (- (car newpos) (/ height 2.0)) (- (cadr newpos) (/ height 2.0)) 0.0)
	  pt2	 (list (+ (car newpos) (/ height 2.0)) (+ (cadr newpos) (/ height 2.0)) 0.0)
    )

    (setq ssobj (ssget "_C" pt1 pt2))

    (if	(= ssobj nil)
      (setq found T)
    )


    (setq ang (+ ang (/ pi 9)))
  )

  (if found
    newpos
    nil
  )

)
;--------------------------------------------------------------------------------------------------
(defun c:test (/ sstext ssl ent enx newvt pos)
(setq sstext (ssget '((0 . "TEXT"))))
(if sstext
(progn
;---------------------------------
(setq	ssl (sslength sstext))
	  
  (repeat ssl
    (setq ent  (ssname sstext 0)
	  enx  (entget ent)
	  pos  (cdr (assoc 11 enx))
	 )
     
    (setq newvt (move_text pos 3.5))
    (if	newvt
    (entmod (subst (cons 11 newvt) (assoc 11 enx) enx))
	(princ "Ko ne dc\n")
    )

    (ssdel ent sstext)
  )
  ) ;end progn
 ) ;end if sstext
 (princ)
)

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

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








#2291 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 05 December 2014 - 02:56 PM

Kiểm tra dxf 50 của từng entsel và của 4 (ssname ss i) xem có giống nhau 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.


#2292 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 05 December 2014 - 03:09 PM

- Nhoc vẫn chưa hiểu ^^, dxf50 của text cái nào cũng = 0 mà anh

- nhoc gửi file chạy thử mấy anh xem giúp nhoc ^^

http://www.cadviet.c...473_tesst_1.dwg


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

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








#2293 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 05 December 2014 - 03:17 PM

Nhoc muốn test cái gì trên nó? Lấy cái gì test? 45 độ ở đâu ra?


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


#2294 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 05 December 2014 - 03:26 PM

- lsp test nhoc up ở trên đó anh nhoc set góc đầu tiên mở ra là 45 độ từ đỉnh của rectang rùi dò nếu ko vướn thì lấy tọa độ điểm đó, vướn thì góc sẽ đi tiếp 20 độ


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

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








#2295 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 05 December 2014 - 03:39 PM

Kết quả test:

TEST

Chọn 4 text.

4 text bị move sang 4 vị trí khác.

Đo góc dịch chuyển: cả 4 góc đều bằng 45độ.

???


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


#2296 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 05 December 2014 - 03:58 PM

Xin hỏi có hàm nào trong lisp có thể chọn đối tượng là text hoặc có thể nhập từ bàn phím người dùng không????

Ngày xưa mình thực hiện ý tưởng đó như thế này, xin đưa ra để bạn tham khảo thêm:

(defun C:CHONCHU( / ma name0 name)

(defun diem( name n)
(cdr (assoc n (entget name)))
)

(if (null st_chuhientai) (setq st_chuhientai ""))
(setq ma "")
(while ma
(initget 128)
(setq ma (Getpoint (strcat "\nText: <" st_chuhientai "> :Pick: ")))
(cond
((NULL MA))
((listp ma)
(if (and (setq name0 (nentselp ma)) (setq name (car name0)) (= (diem name 0) "TEXT"))
(setq st_chuhientai (diem name 1))
)
)
(T (setq st_chuhientai ma))
)
)
)
  • 0

#2297 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 05 December 2014 - 04:09 PM

Kết quả test:

TEST

Chọn 4 text.

4 text bị move sang 4 vị trí khác.

Đo góc dịch chuyển: cả 4 góc đều bằng 45độ.

???

- ^^ nhoc quên do cái biến r với height nhoc chạy bên nhoc khác lsp viết , nhoc ngâm thêm 1 ít cảm giác code này chưa ổn ^^


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

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








#2298 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 05 December 2014 - 04:19 PM

Chán như con gián Nhoc ơi!


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


#2299 huunhantvxdts

huunhantvxdts

    biết dimbaseline

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

Đã gửi 05 December 2014 - 04:34 PM

Ngày xưa mình thực hiện ý tưởng đó như thế này, xin đưa ra để bạn tham khảo thêm:

(defun C:CHONCHU( / ma name0 name)

(defun diem( name n)
(cdr (assoc n (entget name)))
)

(if (null st_chuhientai) (setq st_chuhientai ""))
(setq ma "")
(while ma
(initget 128)
(setq ma (Getpoint (strcat "\nText: <" st_chuhientai "> :Pick: ")))
(cond
((NULL MA))
((listp ma)
(if (and (setq name0 (nentselp ma)) (setq name (car name0)) (= (diem name 0) "TEXT"))
(setq st_chuhientai (diem name 1))
)
)
(T (setq st_chuhientai ma))
)
)
)

Đã giải quyết xong rồi 

Nhờ bạn Nhoc và bạn ndtnv và Bác Hà nữa


  • 0

#2300 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 05 December 2014 - 06:18 PM

Xin phép ket spam chút xíu :

 Trong Topic này mong mọi người cố gắng viết ngắn gọn súc tích,

- Hỏi thì trình bày rõ ràng, nghĩ kỹ trước khi hỏi, phải biết mình hỏi cái gì, tránh trường hợp hỏi mỳ ăn liền, đưa 1 câu hỏi lên thì có 10 người hỏi lại "bạn hỏi cái gì"

- Giải thích thì đủ dùng, k lơi quá. Tốt nhất là gợi ý trước, chờ 2 3 ngày bấn lắm thì hãy code giúp (nếu có thể), tránh trường hợp người hỏi k đúc rút được gì ngoài việc chờ người khác code hộ

Ket thấy gần đây toàn nội dung hỏi đi đáp lại, 2 bên chẳng hiểu nhau, cả mấy trang mới học thêm đước xíu

Xin cảm ơn và chào đi ăn cơm ạ 


  • 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