Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
Tue_NV

Nhân 2 cột số (kết quả lthay thế là cột số thứ 3)

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

Tue_NV    3.841

Mình có 2 cột số : Cột số 1 và cột số 2.

Đoạn lệnh Autolisp tính tích 2 cột số và cho ra cột số thứ 3.

Và sau khi chạy Lisp dưới đây, ta chọn cột 1 và chọn cột 2, nhập điểm chèn ở cột số 3, sẽ cho ra kết quả ở cột 3(là tích của cột 1 và cột 2)

Ý của mình ở đây là : giả sử cột thứ 3 đã có dãy số. Sau khi ta chọn cột 1, cột 2 và ta chọn giá trị thay thế là cột 3 thì các giá trị tích của cột 1 và cột 2 sẽ được thay thế ở cột 3.

Mong các anh em CADVIET giúp đỡ.

Xin chân thành cảm ơn.

http://www.cadviet.com/upfiles/Tich2cotso.zip


;.........................................................................
(defun C:Bkl (/ l1 l2 Elist2 Elist1 n n1 n2 k m fp1 fp1
                         fp P3 l1 l2 yy1 yy2 y1 y2 y tyle )
(setvar "CMDECHO" 0)
(princ "\nChon cot 1")
(princ)
(setq Elist1 (ssget '((0 . "TEXT"))))
(princ "\nChon cot 2")
(princ)
(setq Elist2 (ssget '((0 . "TEXT"))))
(setq tyle (getreal "\n Chia cho bao nhieu  (1000) :  "))
(if (not tyle) (setq tyle 1000.0))
(setq lt (getint "\n Lam tron den may chu so sau dau phay (2) : "))  
(if (not lt) (setq lt 2))
(setq P3 (getpoint "\n Cho diem chen"))
(setq n1 (sslength Elist1))
(setq n2 (sslength Elist2))
(setq n n1)
;******
;Case 1
(if (= n1 n2) 
(progn
 (repeat  n 
   (setq k (- n1 1))
   (trich k Elist1)
   (setq y1 y)
   (setq fp1 fp)
   (setq l1 (append (list (list  y1 fp1)) l1))
   (setq n1 (- n1 1))
);end repeat
 (repeat  n 
    (setq m (- n2 1))
    (trich m Elist2)
    (setq y2 y)
    (setq fp2 fp)
    (setq l2 (append (list (list  y2 fp2)) l2))
    (setq n2 (- n2 1))
 );end repeat 
 (setq yy1 1)
 (while yy1
  (setq yy1 (car (car l1)))
  (setq yy2 1)
   (repeat n
    (setq yy2 (car (car l2)))
    (if (and yy1 yy2 (< (abs (- yy1 yy2)) 2.0))
     (progn 
        (setq ff1 (cadr (car l1))) 
        (setq ff2 (cadr (car l2))) 
        (setq ff (/ (* ff1 ff2) tyle)) 
        (Command "Text" "j" "c" (list (car P3) yy1)  height "0" (rtos ff 2 lt)) 
     );end progn
   );end if
   (setq l2 (append (cdr l2) (list (car l2))))
   );end repeat
  (setq l1 (cdr l1)) 
 );end while
);end progn
);end if (= n1 n2)
;********
; CAse 2
(if  (= 1 n2)
 (progn
 (repeat  n 
   (setq k (- n1 1))
   (trich k Elist1)
   (setq y1 y)
   (setq fp1 fp)
   (setq l1 (append (list (list  y1 fp1)) l1))
   (setq n1 (- n1 1))
 );end repeat
    (trich 0 Elist2)
    (setq y2 y)
    (setq fp2 fp)
    (setq l2 (list (list  y2 fp2)))
 (setq ff2 (cadr (car l2)))
 (setq yy1 1)
 (while yy1
  (setq yy1 (car (car l1)))
   (repeat n
        (setq ff1 (cadr (car l1))) 
        (setq ff (/ (* ff1 ff2) tyle)) 
        (Command "Text" "j" "c" (list (car P3) yy1)  height "0" (rtos ff 2 lt)) 
   );end repeat
  (setq l1 (cdr l1)) 
 );end while
);end progn  
);end if (= 1 n2)
(princ)
)
;---------------------------------------------------------------------------
(defun trich ( k Elist / stpoint ename infor)
   (setq ename (ssname Elist k))
   (setq infor (entget  ename))
   (if (= (cdr (assoc 0 infor)) "TEXT" )
    (progn
     (setq fp (read (cdr (assoc 1 infor)))) ;Gia tri cua text
     (setq stpoint (cdr (assoc 10 infor)))  ;Diem chen cua text 
     (setq y (cadr stpoint))                ;Tung do cua text
    )
   )
   (setq height (cdr (assoc 40 infor)))     ;Chieu cao cua text
)
;---------------------------------------------------------------------------

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

mình có đoạn code này viết đã lâu bạn xem có giúp được gì ko, cái này mình để tính hoặc sửa bảng thống kê thép đã có sẵn trên bản vẽ

(DEFUN FINDSTR (STR SEARCH / INDEX FIND)
 (SETQ INDEX 0)
 (WHILE (AND (/= FIND SEARCH) (<= INDEX (- (STRLEN STR) (STRLEN SEARCH))))
   (SETQ INDEX (+ 1 INDEX))
   (SETQ FIND (SUBSTR STR INDEX (STRLEN SEARCH)))
   )
 (IF (= FIND SEARCH) INDEX "NOT FOUND" )
 )
;FIND AND REPLACE A GROUP CHAR
(DEFUN FIRE(STR FIND REPLACE / N A B C)
 (SETQ N (FINDSTR STR FIND))
 (IF (/= N "NOT FOUND")
   (PROGN
     (SETQ A (SUBSTR STR 1 (- N 1)))
     (SETQ B REPLACE)
     (SETQ L (STRLEN FIND))
     (SETQ C (SUBSTR STR (+ N L)))
     (SETQ STR (STRCAT A B C))
     )
   STR
   )
 )
(defun UINT (bit kwd msg def / inp) (if def (setq msg (strcat "\n" msg "<" (itoa def) ">: ")   bit (* 2 (fix (/ bit 2))) ) (if (= " " (substr msg (strlen msg) 1)) (setq msg (strcat "\n" (substr msg 1 (1- (strlen msg))) ": ")) (setq msg (strcat "\n" msg ": ")) ) ) (initget bit kwd) (setq inp (getint msg)) (if inp inp def) )(defun UREAL (bit kwd msg def / inp) (if def (setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")   bit (* 2 (fix (/ bit 2))) ) (if (= " " (substr msg (strlen msg) 1)) (setq msg (strcat "\n" (substr msg 1 (1- (strlen msg))) ": ")) (setq msg (strcat "\n" msg ": ")) ) ) (initget bit kwd) (setq inp (getreal msg)) (if inp inp def) )
(DEFUN C:MM(/ kg)  (setvar "cmdecho" 0)
 (initget "K S")
 (setq kw_choose(getkword "\nnhan So hoc / tinh Khoi luong thep tron <S>: "))
 (if kw_choose kw_choose (setq kw_choose "S"))

 (if heso1 heso1(setq heso1 0.001))
 (if sole1 sole1(setq sole1 2))
 (setq #osmode (getvar "osmode")
)
 (princ "\nChon cac so nhan (duong kinh)")
 (SETQ SSPV1 (SSGET '((-4 . "<OR")(0 . "text")(0 . "mtext")(-4 . "OR>"))))
 (princ "\nChon cac so duoc nhan (tong chieu dai)")
 (SETQ SSPV2 (SSGET '((-4 . "<OR")(0 . "text")(0 . "mtext")(-4 . "OR>"))))
 (princ "\nChon cac ket qua duoc dieu chinh (khoi luong)")
 (SETQ SSPV3 (SSGET '((-4 . "<OR")(0 . "text")(0 . "mtext")(-4 . "OR>")))
STT 0
l1 '()
l2 '()
l3 '()
heso1 (UREAL 0 "" "He so nhan " heso1)
sole1 (UINT 4 "" "Lay bao nhieu so thap phan " sole1)
)
 (if (or (/= (sslength SSPV1) (sslength SSPV2))(/= (sslength SSPV1)(sslength SSPV3)))
   (progn
     (alert "Ba chuoi khong bang nhau")
     (exit)
     )
   )  
 (setvar "OSMODE" 0 )
 (setvar "dimzin" 0)
 (repeat (sslength SSPV1) 
   (setq ALIST1 (entget (ssname sspv1 stt))
  ALIST2 (entget (ssname sspv2 stt))
  ALIST3 (entget (ssname sspv3 stt))
  y1 (list(car(CddR (ASSOC 10 ALIST1))))
  y2 (list(car(CddR (ASSOC 10 ALIST2))))
  y3 (list(car(CddR (ASSOC 10 ALIST3))))
  l1 (append l1 y1)
  l2 (append l2 y2)
  l3 (append l3 y3)
  stt (1+ stt)
  )
   )
 ;tltb (* 7850 SO2 heso1 (/ (* pi SO1 SO1) 4000000))
 (setq l1 (vl-sort-i  l1 '>))
 (setq l2 (vl-sort-i  l2 '>))
 (setq l3 (vl-sort-i  l3 '>))
 (repeat (sslength SSPV1) 
   (setq id1 (car l1)
  id2 (car l2)
  id3 (car l3)
  l1 (cdr l1)
  l2 (cdr l2)
  l3 (cdr l3)
  e1 (entget (ssname sspv1 id1))
  e2 (entget (ssname sspv2 id2))
  e3 (entget (ssname sspv3 id3))
  SO1 (float(atof(fire (CDR (ASSOC 1 e1)) "," ".")))
  SO2 (float(atof(fire (CDR (ASSOC 1 e2)) "," ".")))
  )
   (if (equal kw_choose "S")
     (setq kq (* SO1 SO2 heso1))
     (setq kq (* 7850 SO2 heso1 (/ (* pi SO1 SO1) 4000000)))
     )
   (setq kq (rtos kq 2 sole1)
  e3(SUBST (CONS 1 kq) (ASSOC 1 e3) e3)
  )
   (ENTMOD e3)
   )
 (setvar "OSMODE" #OSMODE )
 (princ)
)

 

tên lệnh là MM, he so = 0.001 là để đổi mm ra m. Còn khi tính khối lượng thép tròn thì để he so = 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
Tue_NV    3.841

Đoạn Code trên tính tích 2 cột số và cho kết quả sẽ thay thế là cột số thứ ba tương ứng.

Và để hỗ trợ thống kê thép thì tuyệt vời. Đúng là cái mà mình đang cần.

Cám ơn bạn nhé.

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  

×