Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
2 replies to this topic

#1 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 09 September 2008 - 03:21 PM

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.c.../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
)
;---------------------------------------------------------------------------


  • 0

#2 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 13 September 2008 - 05:23 PM

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

#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 September 2008 - 08:10 AM

Đ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é.
  • 0