Đến nội dung


Hình ảnh
- - - - -

[Hỏi] Cấu trúc rẽ nhánh trong AutoLisp


  • Please log in to reply
8 replies to this topic

#1 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 25 May 2007 - 11:06 AM

Em muốn bác giúp em một đoạn líp đại khái như sau:
Em có một tập hợp chon tên "cacduongkinh"
và các công việc "cv1" "cv2" "cv3"
nếu trong "cacduongkinh" có a thì thực hiện công việc 1, có b thì thực hiện công việc 2 .v.v vấn đề là nếu có đủ a và b thì nó chạy được nhưng không có a thi nó không chạy tới b được.
bác có cách nào giúp em với.
Đại khái là em đang làm con tổng hợp thép nhưng cấu trúc và mã líp cua em củ chuối quá hông giám pót lên trên này sợ pà con cười. bác giúp em bộ khung em cảm ơn nhiều!
  • 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


#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 25 May 2007 - 11:25 AM

Bạn khiêm tốn như thế thì chẳng ai biết mà góp ý cho bạn được. Bởi về lý thuyết thì trường hợp trên rất đơn giản. Nhưng không biết cụ thể "tập hợp chon" của bạn là gì, có phải là một list không?
  • 0

#3 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 25 May 2007 - 04:53 PM

Bạn khiêm tốn như thế thì chẳng ai biết mà góp ý cho bạn được. Bởi về lý thuyết thì trường hợp trên rất đơn giản. Nhưng không biết cụ thể "tập hợp chon" của bạn là gì, có phải là một list không?



Đây là em nói thật bác Hoành ạ. Tập hợp chọn của em hình thành từ việc chọn 1 vùng và đã lọc lấy ra các số không biết có phải là lit không nhưng ví dụ thế này nó có nhiều số 8, nhiều số 10, nhiều số 12, nhưng có thề chỉ có số 8 và số 12. Cái líp cua em no chay trình tự : Đối với số 8 thì tìm các số nằm ở vị trí tương ứng và cọng lại, rồi tiếp tục tìm số 10 và cũng làm như thế, số 12 củng vậy. Nhưng nếu không có số 10 thì nó chạy đến 8 xong là nghỉ luôn không thèm chạy đến 12. Nói thật vè cấu trúc là em không biết em đang dùng hàm if (nếu như mà là thì). Cái lisp do không co dây em để ở nhà. Nếu em noi rối rắm quá thì tuần sau em gửi bác xem hộ. nhưng bác dừng cười nghen em nói trước rồi đấy
  • 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


#4 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 25 May 2007 - 05:04 PM

Đây là em nói thật bác Hoành ạ. Tập hợp chọn của em hình thành từ việc chọn 1 vùng và đã lọc lấy ra các số không biết có phải là lit không nhưng ví dụ thế này nó có nhiều số 8, nhiều số 10, nhiều số 12, nhưng có thề chỉ có số 8 và số 12. Cái líp cua em no chay trình tự : Đối với số 8 thì tìm các số nằm ở vị trí tương ứng và cọng lại, rồi tiếp tục tìm số 10 và cũng làm như thế, số 12 củng vậy. Nhưng nếu không có số 10 thì nó chạy đến 8 xong là nghỉ luôn không thèm chạy đến 12. Nói thật vè cấu trúc là em không biết em đang dùng hàm if (nếu như mà là thì). Cái lisp do không co dây em để ở nhà. Nếu em noi rối rắm quá thì tuần sau em gửi bác xem hộ. nhưng bác dừng cười nghen em nói trước rồi đấy



Đọc xong cũng không hiểu gì luôn, bó tay...
  • 0

#5 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 26 May 2007 - 10:10 AM

[quote name='vndesperados' post='2704' date='May 25 2007, 05:04 PM']Đọc xong cũng không hiểu gì luôn, bó tay...[/quote]

Đây em gửi bác xem thử. Do chưa xong nên các kết quả tẽt em để ơ lung tung lắm. Em cám ơn bác nhiều.


;-------------
(Defun C:tht ( )
(setq ps 0)
(setq pt 0)
(setvar "MODEMACRO" "TONG HOP THEP")
(setq a (getpoint "\nChon diem tren ben trai: "))
(setq b (getpoint "\nChon diem duoi ben phai: "))
(setq KHOANGCACH (- (car :s_dead: (CAR a)))
(setq tlc (/ khoangcach 15000))
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
(command "select" "W" (list (+ (* 7800 tlc) (CAR A))(CADR :ph34r:) (list (+ (* 7000 tlc) (CAR A))(CADR A)) "" "")
(setq xx (ssget "p" '((0 . "TEXT")(1 . "6"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname XX L))
(setq DT (entget DT))
(setq TEXT (cdr (assoc 11 DT)))
(luuol)
(setvar "osmode" 0)
(setq x (car TEXT))
(setq y (cadr TEXT))
;oooooooooooooooooooooooooooooooo
(setq cdps 0)
(setq SUM 0)
(command "select" "W" (list (+ x (* 2100 tlc))(- y (* 300 tlc))) (list (+ x (* 400 tlc))(+ y (* 600 tlc))) "" "")
(setq SS (ssget "p" '((0 . "TEXT"))))
(setq i 0)
(setq N (sslength ss))
(while (< i N)
(setq DTt (ssname ss i))
(setq DTt (entget DTt))
(setq TEXT (cdr (assoc 1 DTt)))
(setq SUM1 (atof TEXT))
(setq SUM (+ SUM (* SUM1 1)))
(setq i (1+ i))
)
(setq cdps (* 1 SUM))
;(setq ps (+ ps cdps))
;(command "TEXT" "c" (list (+ x 0)(- y 0)) (* tlc 250) 0 (rtos cdps 2 2))
(setq slps 0)
(setq SUM 0)
(command "select" "W" (list (+ x (* 3600 tlc))(- y (* 300 tlc))) (list (+ x (* 2100 tlc))(+ y (* 600 tlc))) "" "")
(setq SS (ssget "p" '((0 . "TEXT"))))
(setq i 0)
(setq N (sslength ss))
(while (< i N)
(setq DTt (ssname ss i))
(setq DTt (entget DTt))
(setq TEXT (cdr (assoc 1 DTt)))
(setq SUM1 (atof TEXT))
(setq SUM (+ SUM (* SUM1 1)))
(setq i (1+ i))
)
(setq slps (* 1 SUM))
;(setq ps (+ ps slps))
;(command "TEXT" "c" (list (+ x 0)(- y 0)) (* tlc 250) 0 (rtos slps 2 2))
(setq sckps 0)
(setq SUM 0)
(command "select" "W" (list (- x (* 7400 tlc))(- y (* 300 tlc))) (list (- x (* 8200 tlc))(+ y (* 600 tlc))) "" "")
(setq SS (ssget "p" '((0 . "TEXT"))))
(setq i 0)
(setq N (sslength ss))
(while (< i N)
(setq DTt (ssname ss i))
(setq DTt (entget DTt))
(setq TEXT (cdr (assoc 1 DTt)))
(setq SUM1 (atof TEXT))
(setq SUM (+ SUM (* SUM1 1)))
(setq i (1+ i))
)
(setq sckps (* 1 SUM))
;(setq ps (+ ps slps))
;(command "TEXT" "c" (list (+ x 0)(- y 0)) (* tlc 250) 0 (rtos sckps 2 2))

(setq tcdps (* sckps slps cdps))
(setq ps (+ tcdps ps))

;oooooooooooooooooooooooooooooooo
(traol)
(setq L (1+ L))
)
(command "TEXT" "c" (list (+ x 0)(- y 0)) (* tlc 250) 0 (rtos ps 2 2))

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

(command "select" "W" (list (+ (* 7800 tlc) (CAR A))(CADR :D) (list (+ (* 7000 tlc) (CAR A))(CADR A)) "" "")
(setq xx (ssget "p" '((0 . "TEXT")(1 . "8"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname XX L))
(setq DT (entget DT))
(setq TEXT (cdr (assoc 11 DT)))
(luuol)
(setvar "osmode" 0)
(setq x (car TEXT))
(setq y (cadr TEXT))
;oooooooooooooooooooooooooooooooo

(setq SUM 0)
(command "select" "W" (list (+ x (* 2100 tlc))(- y (* 300 tlc))) (list (+ x (* 400 tlc))(+ y (* 600 tlc))) "" "")
(setq SS (ssget "p" '((0 . "TEXT"))))
(setq i 0)
(setq N (sslength ss))
(while (< i N)
(setq DTt (ssname ss i))
(setq DTt (entget DTt))
(setq TEXT (cdr (assoc 1 DTt)))
(setq SUM1 (atof TEXT))
(setq SUM (+ SUM (* SUM1 1)))
(setq i (1+ i))
)
(setq cdpt (* 1 SUM))
;(setq ps (+ ps cdps))
;(command "TEXT" "c" (list (+ x 0)(- y 0)) (* tlc 250) 0 (rtos cdps 2 2))

(setq SUM 0)
(command "select" "W" (list (+ x (* 3600 tlc))(- y (* 300 tlc))) (list (+ x (* 2100 tlc))(+ y (* 600 tlc))) "" "")
(setq SS (ssget "p" '((0 . "TEXT"))))
(setq i 0)
(setq N (sslength ss))
(while (< i N)
(setq DTt (ssname ss i))
(setq DTt (entget DTt))
(setq TEXT (cdr (assoc 1 DTt)))
(setq SUM1 (atof TEXT))
(setq SUM (+ SUM (* SUM1 1)))
(setq i (1+ i))
)
(setq slpt (* 1 SUM))
;(setq pt (+ pt slpt))
;(command "TEXT" "c" (list (+ x 0)(- y 0)) (* tlc 250) 0 (rtos slpt 2 2))

(setq SUM 0)
(command "select" "W" (list (- x (* 7400 tlc))(- y (* 300 tlc))) (list (- x (* 8200 tlc))(+ y (* 600 tlc))) "" "")
(setq SS (ssget "p" '((0 . "TEXT"))))
(setq i 0)
(setq N (sslength ss))
(while (< i N)
(setq DTt (ssname ss i))
(setq DTt (entget DTt))
(setq TEXT (cdr (assoc 1 DTt)))
(setq SUM1 (atof TEXT))
(setq SUM (+ SUM (* SUM1 1)))
(setq i (1+ i))
)
(setq sckpt (* 1 SUM))
;(setq ps (+ ps slps))
;(command "TEXT" "c" (list (+ x 0)(- y 0)) (* tlc 250) 0 (rtos sckps 2 2))

(setq tcdpt (* sckpt slpt cdpt))
(setq pt (+ tcdpt pt))

;oooooooooooooooooooooooooooooooo
(traol)
(setq L (1+ L))
)
(command "TEXT" "c" (list (+ x 0)(- y 0)) (* tlc 250) 0 (rtos pt 2 2))



;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA**")
(Princ)
)

;;----------
(defun luuol ()
(setq
DUY_OSMODE (getvar "OSMODE")
DUY_AUTOSNAP (getvar "AUTOSNAP")
DUY_LAYERHH (getvar "CLAYER")
DUY_THANGXEOHH (getvar "ORTHO")
DUY_filletrad (getvar "FILLETRAD")
DUY_TEXTSTYLE (getvar "TEXTSTYLE")
)
)
(defun traol ()
(if DUY_OSMODE
(setvar "OSMODE" DUY_OSMODE)
)
(if DUY_LAYERHH
(setvar "CLAYER" DUY_LAYERHH)
)
(if DUY_THANGXEOHH
(setvar "ORTHO" DUY_THANGXEOHH)
)
(if DUY_AUTOSNAP
(setvar "AUTOSNAP" DUY_AUTOSNAP)
)
(if DUY_filletrad
(setvar "FILLETRAD" DUY_filletrad)
)
(if DUY_TEXTSTYLE
(setvar "TEXTSTYLE" DUY_TEXTSTYLE)
)


)
;;----------


[/quote]
  • 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


#6 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 08 June 2007 - 11:51 AM

Đây là em nói thật bác Hoành ạ. Tập hợp chọn của em hình thành từ việc chọn 1 vùng và đã lọc lấy ra các số không biết có phải là lit không nhưng ví dụ thế này nó có nhiều số 8, nhiều số 10, nhiều số 12, nhưng có thề chỉ có số 8 và số 12. Cái líp cua em no chay trình tự : Đối với số 8 thì tìm các số nằm ở vị trí tương ứng và cọng lại, rồi tiếp tục tìm số 10 và cũng làm như thế, số 12 củng vậy. Nhưng nếu không có số 10 thì nó chạy đến 8 xong là nghỉ luôn không thèm chạy đến 12. Nói thật vè cấu trúc là em không biết em đang dùng hàm if (nếu như mà là thì). Cái lisp do không co dây em để ở nhà. Nếu em noi rối rắm quá thì tuần sau em gửi bác xem hộ. nhưng bác dừng cười nghen em nói trước rồi đấy




Lần sau chịu khó thêm Comments để người khác đọc còn hiểu.
Sau khi xem qua đọan code (không thử được vì không có ACAD và cũng không hiểu tổ chức data như thế nào), hình như chức năng của đọan code này dùng để tìm xem trong phần được chọn ((command "select" "W"…) có bao nhiêu đối tượng cùng giá trị (???) và sau đó tính tổng của từng phần giá trị giống nhau đó.

Nếu nội dung đúng như mình nghĩ thì bài này dễ thôi….
  • 0

#7 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 08 June 2007 - 04:09 PM

Lần sau chịu khó thêm Comments để người khác đọc còn hiểu.
Sau khi xem qua đọan code (không thử được vì không có ACAD và cũng không hiểu tổ chức data như thế nào), hình như chức năng của đọan code này dùng để tìm xem trong phần được chọn ((command "select" "W"…) có bao nhiêu đối tượng cùng giá trị (???) và sau đó tính tổng của từng phần giá trị giống nhau đó.

Nếu nội dung đúng như mình nghĩ thì bài này dễ thôi….



Chà bác nvdesperodos lại nói đúng rồi: ý em là như vậy nhưng khâu diển đạt không đạt. Tình hình đúng như vậy, bác giúp em đoạn này, vi chua song nên de no tum lum dậy khi được sẽ dọn dẹp lại nhưng để mạch lạc như bác thì hơi khó, học mò mà nhiều khi minh hông hiêủ thi là sao ma chú thích được. Bác củng thấy rồi em mới biết vài hàm mà cơ bản là dùng hàm command nên cái gì cũng khó. Mong bác giúp, cám ơn nhiếu !
  • 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


#8 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 09 June 2007 - 03:03 PM

Chà bác nvdesperodos lại nói đúng rồi: ý em là như vậy nhưng khâu diển đạt không đạt. Tình hình đúng như vậy, bác giúp em đoạn này, vi chua song nên de no tum lum dậy khi được sẽ dọn dẹp lại nhưng để mạch lạc như bác thì hơi khó, học mò mà nhiều khi minh hông hiêủ thi là sao ma chú thích được. Bác củng thấy rồi em mới biết vài hàm mà cơ bản là dùng hàm command nên cái gì cũng khó. Mong bác giúp, cám ơn nhiếu !



;;Vo Kien Cuong
;;FITC - FRESHWIND INFORMATION TECHNOLOGY CORPORATION
;;vokiencuong@freshwind-it.com
;;Thong ke
(DEFUN EXCUTE( / LiValue LinValue i ss n j k dt value)
(setq LiValue (List))
(setq LinValue (List))
(setq ss (ssget '((0 . "TEXT"))))
(setq n (sslength ss))
(setq i 0)
;Phan loai cac gia tri
(while (< i n)
(setq dt (ssname ss i))
(setq value (GIATRI dt))
(if (IsNumeric value)
(if (IsNotExist LiValue value)
(setq LiValue (append LiValue (List value)))
)
)
(setq i (1+ i))
)
(setq j 0)
;Dem thanh phan cac gia tri
(repeat (length LiValue)
(setq i 0)
(setq value (nth j LiValue))
(setq k 0)
(while (< i n)
(setq dt (ssname ss i))
(if (= (GIATRI dt) value)
(setq k (1+ k))
)
(setq i (1+ i))
)
(setq LinValue (append LinValue (List k)))
(setq j (1+ j))
)
;Hien thi
(setq j 0)
(repeat (length LiValue)
(setq str (strcat (nth j LiValue) " --- " (itoa (nth j LinValue)) " " (rtos (* (atof (nth j LiValue)) (nth j LinValue)) 2 2)))
(print str)
(setq j (1+ j))
)
(princ)
)

(DEFUN GIATRI(obj / gt)
(setq gt (CDR (ASSOC 1 (ENTGET obj))))
gt
)
(DEFUN IsNotExist(li va / gt i)
(setq gt T)
(if (= (length li) 0)
(setq gt T)
(progn
(setq i 0)
(while (< i (length li))
(if (= (nth i li) va)
(progn
(setq i (length li))
(setq gt Nil)
)
)
(setq i (1+ i))
)
)
)
gt
)
;Thuc thi
(DEFUN C:THT()
(EXCUTE)
)

  • 0

#9 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 12 June 2007 - 03:53 PM

;;Vo Kien Cuong
;;FITC - FRESHWIND INFORMATION TECHNOLOGY CORPORATION
;;vokiencuong@freshwind-it.com
;;Thong ke
(DEFUN EXCUTE( / LiValue LinValue i ss n j k dt value)
(setq LiValue (List))
(setq LinValue (List))
(setq ss (ssget '((0 . "TEXT"))))
(setq n (sslength ss))
(setq i 0)
;Phan loai cac gia tri
(while (< i n)
(setq dt (ssname ss i))
(setq value (GIATRI dt))
(if (IsNumeric value)
(if (IsNotExist LiValue value)
(setq LiValue (append LiValue (List value)))
)
)
(setq i (1+ i))
)
(setq j 0)
;Dem thanh phan cac gia tri
(repeat (length LiValue)
(setq i 0)
(setq value (nth j LiValue))
(setq k 0)
(while (< i n)
(setq dt (ssname ss i))
(if (= (GIATRI dt) value)
(setq k (1+ k))
)
(setq i (1+ i))
)
(setq LinValue (append LinValue (List k)))
(setq j (1+ j))
)
;Hien thi
(setq j 0)
(repeat (length LiValue)
(setq str (strcat (nth j LiValue) " --- " (itoa (nth j LinValue)) " " (rtos (* (atof (nth j LiValue)) (nth j LinValue)) 2 2)))
(print str)
(setq j (1+ j))
)
(princ)
)

(DEFUN GIATRI(obj / gt)
(setq gt (CDR (ASSOC 1 (ENTGET obj))))
gt
)
(DEFUN IsNotExist(li va / gt i)
(setq gt T)
(if (= (length li) 0)
(setq gt T)
(progn
(setq i 0)
(while (< i (length li))
(if (= (nth i li) va)
(progn
(setq i (length li))
(setq gt Nil)
)
)
(setq i (1+ i))
)
)
)
gt
)
;Thuc thi
(DEFUN C:THT()
(EXCUTE)
)


Em get về rồi đang ngồi dịch thử hiểu hay không vì còn phải thêm 1 số thao tác nửa. Còn cái " --- " là sao vậy bác. Hiện nay chay thử thì chưa được. Có gì bác giải thích thêm. Cám ơn nhìu.
  • 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