Chuyển đến nội dung
Diễn đàn CADViet

duyhung

Thành viên
  • Số lượng nội dung

    87
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi duyhung


  1. Hi mình thấy list congT rất hay xong nếu có thêm phần 2 là update nếu copy text thì hay hơn nữa, vì khi tính toán có thể vì một lúc đãng trí sẽ không lặp lại lisp congT nên kq sẽ không update được.

    Ah khi xuất kết quả có thể thêm 3 lựa chọn giống như lisp Tcal đã up lên diễn đàn thì hay.

    Thanks.


  2. Mình muốn mọi người giúp một chút việc thế này?

    Mình muốn tạo một block att VD hình vuông tag có giá trị 10.

    Lisp được tạo sẽ chọn các block trên bản vẽ, tính tổng và xuất kết quả ra text.

    VD chọn được 6block att thì kết quả 10+10+10+10+10+10=60.

    Code của bác Hoành trên diễn đàn post khá hay nhưng nó là visual lisp thì phải,mình chỉ biết 1 tẹo về lisp nên cái này mù mờ quá.

    http://www.cadviet.com/forum/index.php?showtopic=9553

    Mong mọi người chỉ giáo.

    Thanks


  3. Tình hình là mình muốn viết 1 lisp tính toán số lượng bóng đèn có thể bố trí theo trục x và trục y, với 2 điều kiện đặt ra:

    - Khoảng cách đó phải cách nhau = kc trần giả

    - Tổng Số lượng bóng phải > số bóng đã tính toán.

    Cái giải thuật mình đưa ra chưa hay lắm vì đang lẫn lộn, mình up lên mong mọi người cho ý kiến và giải quyết.

    Ý tưởng của mình:

     

    (defun c:test ()
    (setvar "CMDECHO" 0)
    (setq cskc (list 1200 1800 2400 3000 3600 4200 4800 5400); Khoang cach giua cac den tuy vao tran gia
    p1 (getpoint "\nChon diem thu nhat: ")
    p2 (getcorner p1 "\nChon diem thu hai: ")
    )
    (setq	vx (abs (- (car p1) (car p2)))
    	vy (abs (- (cadr p1) (cadr p2)))
    	i 0 j 0
    	sl (length cskc)
    	list1 '()
    )
    (setq a (getreal "\nCho so bong can de tinh: "))
    (while (< i sl)
    (setq kc (nth i cskc))
    (setq x (fix (/ vx kc)))
    		(while (< j sl)
    				(setq kc1 (nth j cskc))
    				(setq y (fix (/ vy kc1)))
    				(setq tich (* x y))
    				(if (> tich a) 
    					(setq list1 (append list1 (list tich)))
    				)
    				(setq j (1+ j))
    		)
    )
    (kiem)
    (defun kiem ()
    (while (< i sl)
    (setq kc (nth i cskc))
    (progn (setq x (fix (/ vx kc)))
    		(while (setq kc1 (nth j cskc))
    				(setq y (fix (/ vy kc1)))
    				(setq tich (* x y))
    				(if (= tich (min list1) )
    					(princ "Pro")
    				)
    				(setq j (1+ j))
    		)
    )
    )
    (princ (strcat "\nTruc x co the bo tri: " (rtos x 2 0) "Bong"))
    (princ (strcat "\nTruc y co the bo tri: " (rtos y 2 0) "Bong"))
    (princ (strcat "\nSo bong tren mat bang: " (rtos (apply 'min list1) 2 0) "Bong"))
    (setvar "CMDECHO" 1)
    (princ)
    )
    
    


  4. Mình dùng cái strca thì lại bị lỗi :wacko: hj mò mẫm mà chưa tìm ra lỗi này

    Mình up code mình viết lên đây:

     

    (defun c:cali ()

    (setvar "CMDECHO" 0)

    (setq csdl (list 1 2 3 4 6 10 16 20 25 32 40 50 63 80 100 125 160 200 250 300 400 500 630 800 1000 1250))

    (setq csd (list 1 2 3 4 6 10 16 20 25 32 40 50 63))

    (setq s (atof (vl-list->string (vl-remove-if '(lambda(x) (or (< x 46) (> x 57))) (vl-string->list (cdr(assoc 1 (entget(car(entsel "\n Chon text : "))))))))))

    (setq cosfi (getreal "\nCho cosfi cua lo dien (0.7): "))

    (if (null cosfi)(setq cosfi 0.7))

    (initget 1 "3 1")

    (setq as(getkword "\nTinh toan cong suat <3 1>"))

    (if (= as "3")

    (progn

    (setq i (/ s (* 1.732 0.38 cosfi 1000)))

    (setq a i)

    (setq kq (mapcar '(lambda (x) (if (< (- a x) 0) x)) csdl))

    (setq kq (vl-remove nil kq))

    )

    (setq k (rtos a 2 3))

    (princ (strcat "\n Dong dien tinh toan cua lo: " k "A"))

    (setq k1 (car kq))

    (setq k2 (cadr kq))

    (setq kq1 (rtos k1 2 3))

    (setq kq2 (rtos k2 2 3))

    (princ (strcat "\nMCCB tinh toan cua lo: " kq1 "A" kq2 "A"))

    )

    (if (= as "1")

    (progn

    (setq i (/ s (* 0.22 cosfi 1000)))

    (setq a i)

    (setq kq (mapcar '(lambda (x) (if (< (- a x) 0) x)) csdl))

    (setq kq (vl-remove nil kq))

    )

    (princ (strcat "\n Dong dien tinh toan cua lo: " (rtos a 2 3) "A"))

    (setq kq1 (rtos (car kq) 2 0))

    (setq kq2 (rtos (cadr kq) 2 0))

    (princ "A")

    (princ (strcat "\n MCB tinh toan cua lo: " kq1 "A" "OR" kq2 "A"))

    (princ)

    )

    )

    Kiểm tra hộ mình với, mình muốn nó hiện lên giá trị của kết quả 1 và 2

    VD: MCB tinh toan cua lo 20A OR 30A

    mình đang còn vấn đề nữa là khoảng trắng giữa "20A" và "OR" và "30A" làm thế nào đây.

    Thanks


  5. Thanks ketxu và bác tú đã giải quyết xong.

    @bác tú lisp của bác có lỗi là khi chọn text thì vd: 220=> ra kq:22 và 0.8=> 0. và chọn text kết quả "Chiếu sáng lộ 10" ra kq "0051" chắc là do text có tiếng việt.

    Cái nữa em muốn hỏi là hàm in kết quả ra ấy, mình muốn thay vì mặc định in một kết quả thì in 2 or 3 kết quả trên 1 dòng lệnh được không ạ.

    VD:

    Chieu dai cua doi tuong lan luot la xm ym (với x, y là biến)

    Bình thường em chỉ in được 1 hàng em dùng lệnh như sau:

    (princ "\n Chieu dai cua doi tuong la: ")

    (princ x)

    (princ "m")

    Nhưng in thêm ym vào dòng đó thì chưa biết ntn?

    Mong mọi người chỉ giáo?


  6. Cảm ơn bác tú và bạn ketxu đã reply.

    Lisp của bác tú và bạn ketxu gặp lỗi cho em khi text có dấu (.) ngăn cách

    VD: Kết quả là 15.2

    Thì lisp locso của bác tú chỉ lọc khi các số là nguyên và gặp lỗi khi có dấu chấm ngăn cách

    Của bạn ketxu thì nó lại nhận là 152.

    Hj vẫn lỗi với mình.

    Mọi người xem hộ mình nhé

    Thanks

×