Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
duy782006

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

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

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!

  • 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

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?

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

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

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 xong cũng không hiểu gì luôn, bó tay...

 

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


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

  • 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
Đâ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….

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

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

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

  • 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
Đăng nhập để thực hiện theo  

×