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

quickandfine

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

    99
  • Đã tham gia

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

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


  1. Hề hề hề,

    Bạn quá ỷ lại đấy. Những việc đơn giản này mà bạn không muốn làm, chỉ muốn có sẵn là sao nhỉ??? Đọc kỹ những bài mình đã post và sửa đi. Có vậy bạn mới mong có thể hiểu chút chút về lisp mà ứng dụng, chứ còn ngồi chờ như vậy không phải cách của người cần lisp đâu.

    Mình đã làm và việc cho bạn chả khó khăn gì, nhưng mình không thích cái sự ỷ lại này. Bạn đã sửa được như bài post số 37 thì không có lý gì không hiểu cái bài post 38 của mình mà chỉ là bạn lười và ỷ lại thôi.

    Nếu bạn đã sửa như bài post số 38 của mình mà chưa được thì mới có chuyện để nói, còn nếu bạn không sửa thì mình chịu, không giúp bạn được.

    Chúc bạn thành công.

    Chào bác phamthanhbinh.

    Trước tiên em cảm ơn bác đã nhiệt tình chỉ bảo, giúp đỡ và trả lời từng thắc mắc của em. Nhưng em có ý kiến thế này.

    Em không ỷ lại bác ạ,Oan cho em quá. Em đã thử thay rất nhiều lần mà vẫn không được nên em mới "chai mặt" lên để hỏi lại các bác như thế. Em thử thay bằng Note Pad, Text Pad cả một buổi chiều chưa được nên mới thế thôi ạ. Mỗi lần đọc gợi ý của bác em lại xem lại một lần rồi mới thay nhưng kết quả đều vô vọng.

    Đến lúc đọc bài Post số #40 của bác em lại thử thay lại một lần nữa mà vân chưa được (hi). Nhưng thôi,trong khi chờ đợi đến lúc em thay thành công theo gợi ý của bác thì em dùng đoạn lisp cũ (OC_OC_OCA) down trên diễn đàn cũng tốt rồi ạ. Chỉ là em muốn array cho nhanh hơn chút thôi ạ.

    Một lần nữa cảm ơn các bác ạ!

    Ps: Em chỉ thấy bài post số 36 là bác gợi ý em thay chứ nhỉ. Bài Post số 38 là em Reply lại mà???


  2. Hề hề hề,

    Bạn đã làm như mình nói ở bài post số 38 chưa???

    Mình sửa như vầy là thấy OK rồi.

    Nếu bạn vân chưa thấy Ok thì mình không biết là lỗi chỗ nào nữa. Đành chớ bác DoanVanHa thôi.

    Chào bác phamthanhbinh:

    Xấu hổ quá.Em thay mãi mà nó vẫn chưa được bác ạ. Lần thành công nhất mà em thay được là em post ở bài số #37 rồi bác ạ. Nếu tiện bác có thể post đoạn bác thay lên và thử thành công cho em xin được không ạ. Em xin cảm ơn bác nhiều ạ!


  3. Hề hề hề,

    Bạn đã sửa như mình nói chưa???

    nều vậy mà chưa được thì đành chờ bác đoàn van Ha vậy vì mình hết võ rồi.

    Chào bác phamthanhbinh.

    Em sửa theo cách anh nói thì gặp phải trường hợp là các text sau cứ nằm trùng vị trí của nhau,và số gia chỉ tăng đúng một lần thôi ạ. Ví dụ mình CA một text là A0-0010, khoảng cách là 420, số gia là 10, số lần array là 5 thì 4 text sau chỉ là A0-0020 và nằm trùng nhau hết ở vị trí cách text đầu 420. Em nhờ các bác xem đoạn code em thay nó bị lỗi ở chỗ nào ạ.(Đoạn code em thay ở phía trên ạ)

    Em xin cảm ơn nhiều ạ


  4. Của bạn đây. Bạn thử xem nhé :

    (defun c:ctd(/ ss ename i dxf11 dxf13 vt)
     (if (setq ss (ssget '((0 . "DIMENSION"))))
       (progn
         (setq i -1 vt (getreal "\n Text cua dim cach mep trai 1 doan :"))
         (while (setq ename (ssname ss (setq i (1+ i))))
    (command "dimtedit" ename "L")
    (setq dxf11 (cdr(assoc 11 (entget ename)))
         dxf13 (cdr(assoc 13 (entget ename)))  )
    (command "dimtedit" ename (list (+ (car dxf13) vt) (cadr dxf11) 0.0) )
         )
       )
     )
    )
    

    Em thấy đoạn lisp này cũng tiện lợi. Nhưng bác có thể sửa thành click chuột vào một điểm mới nằm trên đường dim đó thì text sẽ chuyển tương ứng về vị trí mới đó thì tiện hơn ạ.


  5. Rất cảm ơn Ketxu đã có 1 số góp ý để Lisp được hoàn thiện hơn.

    Lệnh này Copy_Array các đối tượng, kể cả Text (Mtext). Riêng Text chứa số thì có thể tăng/giảm theo gia số, nó chấp nhận cả số có tiền và/hoặc hậu tố.

    Nếu có nhiều Text số được chọn thì chỉ 1 Text số chọn sau cùng được tăng/giảm. Số chữ số thập phân (nếu có) sẽ lấy theo Text chọn.

    ; Doan Van Ha CADViet.com
    ; Copy-Array cac doi tuong ke ca Text (Mtext), rieng Text co chua so thi tang giam theo gia so, chap nhan so co tien to va hau to.
    ; Neu co nhieu Text chua so duoc chon thi chi 1 Text chon sau cung duoc tang/giam. So chu so thap phan (neu co) lay theo Text chon.
    ; P/S (01-03-2012): bo sung them so chu so 0 dau num de phu hop voi text mau. VD: "CN: 01" tang thanh "CN: 02"...
    (defun C:CA (/ dsdt dt dt1 dt2 p1 p2 sl x kwrd strt strp num sym ds daup giaso)
    (vl-load-com)
    (command "undo" "be")
    (setq osm (getvar "osmode") cmd (getvar "cmdecho"))
    (princ "\nChon cac doi tuong can Copy-Array...")
    (setq dsdt (vl-remove-if 'listp (mapcar 'cadr (ssnamex (setq dt (ssget)))))
      		dt1 dt p1 (getpoint "\nDiem goc: ") p2 (getpoint p1 "\nDiem den: ") sl (getint "\nSo lan: ") x 1)
    (setvar "osmode" 0) (setvar "cmdecho" 0)
    (foreach n dsdt
     (if (or (= "TEXT" (cdr (assoc 0 (entget n)))) (= "MTEXT" (cdr (assoc 0 (entget n)))))
      (if (KT_NUM (cdr (assoc 1 (entget n))))
    (setq dt2 n))))
    (if dt2 (setq dt1 (ssdel dt2 dt)))
    (if dt2
     (progn
      (initget "Y N")
      (setq kwrd (getkword "\nBan muon Text tang dan ? [Y/<N>]  ") giaso (getreal "\nGia so: "))
      (setq x 1)
      (repeat (1- sl)
    (command ".copy" dt2 "" p1 (polar p1 (angle p1 p2) (* (distance p1 p2) x)))
    (if (eq kwrd "Y")
    (progn
     	(CHIA3 (cdr (assoc 1 (entget dt2))))
     	(setq daup (if (not (vl-string-search "." (cadr ds))) 0 (- (strlen (cadr ds)) (vl-string-search "." (cadr ds)) 1)))
     	(entmod (subst (cons 1 (strcat (car ds) (THEM0 (cadr ds) (rtos (+ (atof (cadr ds)) (* x giaso)) 2 daup)) (caddr ds))) (assoc 1 (entget (entlast))) (entget (entlast))))
     	(entupd (entlast))))
    (setq x (1+ x)))))
    (if dt1
     (progn
      (setq x 1)
      (repeat (1- sl)
    (command ".copy" dt1 "" p1 (polar p1 (angle p1 p2) (* (distance p1 p2) x)))
    (setq x (1+ x)))))
    (command "undo" "e")
    (setvar "osmode" osm) (setvar "cmdecho" cmd)
    (princ))
    ;----- Chia text ra tiento_num_hauto.
    (defun CHIA3 (str / trai phai lstt lstn)
    (setq lstt (vl-string->list str) lstn (reverse lstt))
    (while lstt
     (cond ((or (< (car lstt) 48) (> (car lstt) 57)) (setq trai (cons (car lstt) trai) lstt (cdr lstt)))
        		(T (setq lstt nil))))
    (while lstn
     (cond ((or (< (car lstn) 48) (> (car lstn) 57)) (setq phai (cons (car lstn) phai) lstn (cdr lstn)))
        		(T (setq lstn nil))))
    (setq ds (list (vl-list->string (reverse trai))
                       	(if (= (strlen str) (strlen (vl-list->string (reverse trai)))) "" (vl-string-right-trim (vl-list->string phai) (vl-string-left-trim (vl-list->string trai) str)))
                       	(if (= (strlen str) (strlen (vl-list->string (reverse trai)))) "" (vl-list->string phai)))))
    ;----- Kiem tra 1 text co chua num hay khong?
    (defun KT_NUM(str / ds kt)
    (foreach n (vl-string->list str)
     (if (and (>= n 48) (<= n 57)) (setq kt T)))
    kt)
    ;----- Thong ke so chu so truoc dau thap phan.
    (defun KT_FIX(str / m)
    (setq m 0)
    (while (and (> (strlen str) 0) (/= (substr str 1 1) "."))
     (setq m (1+ m) str (substr str 2)))
    m)
    ;----- Them so chu so 0 vao dau text cho phu hop.
    (defun THEM0(strt strs)
    (while (> (- (KT_FIX strt) (KT_FIX strs)) 0)
     (setq strs (strcat "0" strs)))
    strs)
    

    P/S: sửa 07/02/2012 để không còn dùng các hàm Acet.

    P/S: sửa 01/03/2012 để thêm số chữ số 0 vào đầu Num của Text để phù hợp với Text gốc.

    Em chào bác DoanVanHa.

    Em down đoạn lisp của bác về sử dụng nhưng lại có một vấn đề là text tăng dần không đúng theo mong muốn của em. Em Post bản vẽ lên mong bác chỉnh sửa lại một chút giúp em cho phù hợp với ạ. Khi sửa bác có thể để mặc định là sẽ copy tăng dần giúp em (không cần hỏi "bạn có muốn copy text tăng dần? nữa). Chi tiết cụ thể em có trình bày trong bản vẽ đính kèm. Mong bác giúp đỡ, Chúc bác cũng như toàn thể anh em Cadviet khỏe mạnh!

    http://www.cadviet.com/upfiles/3/110072_reinf_1.dwg


  6. Trong lúc chờ đợi bạn thử tìm cái lisp Dynamic L Array mình viết xem sao ? CÓ chức năng giống ý 2. Bác Hạ cũng viết 1 cái để array với tiền tố - hậu tố

     

    Trong lúc chờ đợi bạn thử tìm cái lisp Dynamic L Array mình viết xem sao ? CÓ chức năng giống ý 2. Bác Hạ cũng viết 1 cái để array với tiền tố - hậu tố

     

    Trong lúc chờ đợi bạn thử tìm cái lisp Dynamic L Array mình viết xem sao ? CÓ chức năng giống ý 2. Bác Hạ cũng viết 1 cái để array với tiền tố - hậu tố

    Em tìm thấy đoạn lisp anh nói rồi nhưng không hiểu sao khi em load lên nó lại báo lỗi nên em chưa dùng được. Anh xem nó báo lỗi thế này là lỗi gì ạ

     

    Command: aq APPLOAD dar.lsp successfully loaded.

     

     

    Command: ; error: syntax error

     

    Command:

    Command: dar ; error: too many arguments

    Cảm ơn anh nhiều!

    (Em đang để lệnh đo chiều dài cung là DAR không biết thế có ảnh hưởng gì đến chuyện này không ạ?)


  7. Hề hề hề,

    Yêu cầu 1 bạn đã thử sửa chưa và có đạt yêu cầu không???

    Yêu cầu 2 bạn vẫn chưa nói rõ là Array thì sẽ tăng text theo phương nào trước, vì khi array sẽ xuất hiện các text kết quả được sắp xếp theo hàng, cột hay vòng tròn, vậy thì các text sẽ tăng dần theo kiểu chi theo cột trước hay theo hàng trước, theo chiều kim đồng hồ hay ngược chiều kim đồng hồ???

    Vậy thì sao làm lisp được????

    Chào bác phamthanhbinh.

    1- Yêu cầu 1: Em đã thay đoạn code theo cách bác gợi ý nhưng mỗi lần pick base point lại cần nhập lại chiều cao chữ. Em chỉ muốn là nhập chiều cao chữ một lần đầu tiên thôi. Còn các lần pick base point tiếp theo thì lấy theo chiều cao chữ của lần nhập đầu tiên ấy.

    2- Yêu cầu 2: Em chỉ muốn text thay đổi theo phương ngang, từ trái sang phải bác ạ, Số lần array do mình nhập hoặc theo kiều pick 2 điểm (Lisp sẽ chia khoảng cách 2 điểm đó cho khoảng cách các text - do mình nhập, các text cách đều nhau theo một khoảng cách nhập vào hoặc pick 2 điểm (Đoạn này em thấy giống như kiểu lisp Copy array mà em tìm được trên diễn đàn) và tăng theo "số gia". Bác xem xem giúp em với nhé. Cảm ơn bác nhiều ạ.

    Đây là đoạn lisp copy array mà em nói ạ!

    http://www.cadviet.com/upfiles/3/110072_05copy_array_ca.lsp


  8. Hề hề hề,

    1/- Bạn thử làm như sau:

    Thay đoạn code

    (setq sty (getvar "textstyle")

    d (tblsearch "style" sty)

    h (cdr (assoc 40 d))

    )

    (if (= h 0) (setq h (cdr (assoc 42 d))))

    trong hàm con wtxt thành

    (setq sty (getvar "textstyle")

    d (tblsearch "style" sty)

    )

    (setq h (getreal "\n nhap chieu cao text: "))

    (if (= h nil)

    (progn

    (setq h (cdr (assoc 40 d)))

    (if (= h 0) (setq h (cdr (assoc 42 d))))

    )

    )

    Hy vọng đúng ý bạn.

    2/- Khi array như vậy thì text sẽ thay đổi kiểu gì?????

    Cảm ơn bác phamthanhbinh nhiều ạ. Em nhờ bác thế này:

    1- Khi em thay đoạn lisp trên vào thì mỗi lần lại phải nhập lại chiều cao chữ. Em muốn chỉ cần nhập chiều cao chữ một lần thôi ạ, các text sau cũng lấy chiều cao chữ ấy, mình chỉ cần chọn tiếp base point cho lần thứ 2,3.. thôi ạ.

    2- Khi Array thì text cũng sẽ thay đổi theo "số gia" mà mình nhập vào, ví dụ ban đầu Text là "A3-04-Sub-0010", gõ OC, chọn số gia là 10, chọn khoảng cách array là 420, chọn số lần Array là 3 thì ta được các text tiếp theo lần lượt là "A3-04-Sub-0020", "A3-04-Sub-0030"... Các text đó cách nhau theo phương ngang một khoảng đều nhau là 420.kiểu như vậy ạ. Em nói thế không biết đã rõ chưa ạ


  9. ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=51710
    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=34029
    ;; free lisp from cadviet.com
    ;;;**********************************************
    ;;;CHUONG TRINH DANH SO THU TU VA COPY TANG DAN
    ;;;1. Lenh OD: danh so thu tu, tuy chon so bat dau (begin) va so gia (increment) tuy y
    ;;;2. Lenh OC: copy tang dan tu mot so thu tu co san
    ;;;3. Lenh oCA: copy tang dan voi doi tuong Attribute Block
    ;;;Chuong trinh chap nhan cac dinh dang bang so, chu, so va chu ket hop:
    ;;;1, 2... A, B..., A1, A2..., AB-01, AB-02..., AB-01-C1, AB-01-C2...
    ;;;Cac chu gioi han trong khoang tu A den Z. Cac so khong han che
    ;;;Copyright by ssg - www.cadviet.com - December 2008
    ;;;**********************************************
    
    ;;;-------------------------------------------------
    (defun etype (e) ;;;Entity Type
    (cdr (assoc 0 (entget e)))
    )
    ;;;-------------------------------------------------
    (defun wtxt (txt p / sty d h) ;;;Write txt on graphic screen, defaul setting
    (setq
    sty (getvar "textstyle")
    d (tblsearch "style" sty)
    h (cdr (assoc 40 d))
    )
    (if (= h 0) (setq h (cdr (assoc 42 d))))
    (entmake
    (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 40 h) (assoc 41 d))
    )
    )
    ;;;-------------------------------------------------
    (defun incN (n dn / n2 i n1) ;;;Increase number n
    (setq
    n2 (itoa (+ dn (atoi n)))
    i (- (strlen n) (strlen n2))
    )
    (if (> i 0) (setq n1 (substr n 1 i)) (setq n1 ""))
    (strcat n1 n2)
    )
    ;;;-------------------------------------------------
    (defun incC (c / i c1 c2) ;;;Increase character c
    (setq
    i (strlen c)
    c1 (substr c 1 (- i 1))
    c2 (chr (1+ (ascii (substr c i 1))))
    )
    (if (or (= c2 "{") (= c2 "["))
    (progn (command "erase" (entlast) "") (alert "Over character!") (exit))
    (strcat c1 c2)
    )
    )
    ;;;============================
    (defun C:OD( / cn dn c n p) ;;;Make OrDinal number with any format
    (setq
    cn (getstring "\nBegin at <1>: " T)
    dn (getint "\nIncrement <1>: ")
    )
    (if (not dn) (setq dn 1))
    (if (= cn "") (setq cn "1"))
    (setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn))
    (setq n (vl-string-subst "" c cn))
    (if (/= n "") (setq mode 1) (setq mode 0))
    (while (setq p (getpoint "\nBase point <exit>: "))
    (wtxt cn p)
    (if (= n "")
       	(setq cn (incC cn))
       	(setq cn (strcat c (incN (vl-string-subst "" c cn) dn)))      
    )
    )
    (princ)
    )
    ;;;============================
    (defun C:OC( / e dn p1 cn c n p2 dat) ;;;Make Ordinal number. Copy from template
    (command "undo" "be")
    (setq
    e (car (entsel "\nSelect template text:"))
    dn (getint "\nIncrement <1>: ")
    p1 (getpoint "\nBase point:")
    cn (cdr (assoc 1 (entget e)))
    k (strlen cn)
    i (getint "\n Nhap so ky tu can giu trong suffix: ")
    cn0 (substr cn 1 (- k i))
    cn1 (substr cn (1+ (- k i)))
    )
    (if (not dn) (setq dn 1))
    (if (= cn "") (setq cn "1"))
    (setq
    c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn0)
    n (vl-string-subst "" c cn0)
    )
    (while (setq p2 (getpoint p1 "\nNew point <exit>: "))
    (command "copy" e "" p1 p2)
    (if (= n "")
       	(setq cn0 (incC cn0))
       	(setq cn0 (strcat c (incN (vl-string-subst "" c cn0) dn)))      
    )
    (setq
       	dat (entget (entlast))
       	dat (subst (cons 1 (strcat cn0 cn1)) (assoc 1 dat) dat)
    )
    (entmod dat)  
    )
    (command "undo" "e")
    (princ)
    )
    ;;;============================
    (defun C:oCA( / e e0 dn p1 cn c n p2 dat) ;;;Make Ordinal number. Copy from Atttribute block
    (setq
    e0 (car (entsel "\nSelect attribute block:"))
    e (entnext e0)
    )
    (if (/= (etype e) "ATTRIB") (progn (alert "Object is not a Attribute Block!") (exit)))
    (setq
    dn (getint "\nIncrement <1>: ")
    p1 (getpoint "\nBase point:")
    cn (cdr (assoc 1 (entget e)))
    )
    (if (not dn) (setq dn 1))
    (if (= cn "") (setq cn "1"))
    (setq
    c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn)
    n (vl-string-subst "" c cn)
    )
    (while (setq p2 (getpoint p1 "\nNew point <exit>: "))
    (command "copy" e0 "" p1 p2)
    (if (= n "")
       	(setq cn (incC cn))
       	(setq cn (strcat c (incN (vl-string-subst "" c cn) dn)))      
    )
    (setq
       	dat (entget (entnext (entlast)))
       	dat (subst (cons 1 cn) (assoc 1 dat) dat)
    )
    (entmod dat)
    (command "regen")
    )
    (princ)
    )
    ;;;============================
    
    

    Mình góp vui tí nhé. Trên diễn đàn đã có lisp này có thể đáp ứng được yêu cầu copy tăng dần của bạn nè.

    Lệnh: OC

     

    Chào các bác: Em thấy đoạn lisp này rất phù hợp với việc đánh số bản vẽ của em. Nhưng em muốn nhờ bác sửa thêm theo một số ý sau với ạ:

    1- Đoạn lisp OD:

    - Có thêm phần hỏi nhập chiều cao chữ là bao nhiêu nữa ạ.

    2- Đoạn lisp OC:

    - Chọn Template text xong, Lisp sẽ hỏi số hàng cần array, khoảng cách Array (gõ số hoặc click 2 điểm)

    Em Upload File cã kiểu đánh số thứ tự mà em hay phải đánh. Mong các bác giúp đỡ.

    Em xin cám ơn nhiều ạ!

    http://www.cadviet.com/upfiles/3/110072_reinf.dwg


  10. Hề hề hề,

    Sorry, bạn sửa (setq ans (strcat "\n Buoc thep hien tai là " (itoa BT) ". Ban co muon thay doi hay khong <Y or N>: ")) thành

    (setq ans (getstring (strcat "\n Buoc thep hien tai là " (itoa BT) ". Ban co muon thay doi hay khong <Y or N>: "))) hoặc sửa cả đoạn code trên thành:

    (if (not BT)

    (setq BT (getint "\n Buoc @:") )

    (progn

    (setq ans (getint (strcat "\n < " (itoa BT) ">: ")))

    (if (/= ans nil)

    (setq BT ans)

    )

    )

    )

    Bác xem file ảnh em gửi kèm sau đây xem ý em như thế thì phải viết lệnh thế nào nhé. chỉ cần gõ bước mới hoặc Enter thôi chứ không cần hỏi thêm gì nữa ạ. 110072_bt.jpgCảm ơn bác nhiều!


  11. Hề hề hề,

    Bạn hãy tự chỉnh như sau, thay dòng code (setq BT (getint "\n Buoc @:") ) thành doạn code sau:

     

    (if (not BT)

    (setq BT (getint "\n Buoc @:") )

    (progn

    (setq ans (strcat "\n Buoc thep hien tai là " (itoa BT) ". Ban co muon thay doi hay khong <Y or N>: "))

    (if (= (strcase ans) "Y")

    (setq BT (getint "\n Buoc @:") )

    )

    )

    )

     

    Chúc bạn thành công.

    Cảm ơn bác Phamthanhbinh.Em làm được theo cách bác gợi ý rồi nhưng ý em muốn là thế này ạ: Lần một mình gõ BU, lisp hỏi bước @: và mình gõ 150 (ví dụ bước 150). Lần 2 mình gõ Bu, Lisp hỏi bước@: nhưng trong "cái ô trắng trắng" để mình gõ bước thép mới vào ấy, nó hiện lên cái số 150 của lần lệnh trước. Nếu lần 2 mình vẫn ghi bước 150 thì mình Enter là xong, nếu bước khác thì mình gõ bước mới vào thay chỗ đó. bác giúp em với nhé. Cảm ơn bác một lần nữa ạ.


  12. bước thép: http://www.cadviet.c...pic=205&st=1940

    color: http://www.cadviet.c...32649_color.lsp

    Bạn tìm đi, chứ có sẵn thì dùng, đủ yêu cầu của bạn đó, lisp kia bỏ đi!!!

    Em chào các bác. Sau khi download và thử các đoạn lisp mà các bác giúp đỡ. Em thấy đoạn lisp sau đây của bác Tue_NV (đã viết từ lâu mà nhờ ý kiến của bác Amatuerday em mới tìm ra) là phù hợp với em nhất. Có điều là cứ thi thoảng em lại phải dùng lại lệnh này một lần, và bước thép thì cũng rất hay giống nhau. Vậy nên em nhờ các bác bổ sung giúp em thành có lưu bước thép của lần lệnh trước để lần sau nếu giống thì chỉ cần Enter tiếp là xong, đỡ phải mất công gõ lại lần nữa ạ. Em xin cảm ơn các bác nhiều!

    Đây là đoạn lisp của bác Tue_NV:

    http://www.cadviet.com/upfiles/3/110072_bu.lsp


  13. Thêm 1 phương án :

    (defun C:bt(/ ctc ss)
     (or *ctc* (setq *ctc* 200))
     (initget 6)
     (setq ctc (getint (strcat"\nNhap buoc thep <" (itoa *ctc*) ">:")) )
     (if ctc (setq *ctc* ctc))
     (if (setq ss (ssget"_:L" (list (cons 0 "DIMENSION")) ))
    (progn
     	(command "_.undo" "_begin")    
     	(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (vla-put-TextOverride (vlax-ename->vla-object ent)
      (strcat (itoa (fix(/ (cdr (assoc 42 (entget ent))) *ctc*)))
    "x" (itoa *ctc*) "=<>"))	)
     	(command "_.undo" "_end") (princ)  )))
    (defun C:10(/ num ss)
     (if (setq ss (ssget"_:L"))
    (progn
     	(command "_.undo" "_begin")
     	(or *num* (setq *num* 15))
     	(initget 4)
     	(setq num (getint (strcat"\nNhap color <" (itoa *num*) ">:")) )
     	(while (not (if num (<= num 256)T) )
    (princ "\nGia tri <=256.")
    (setq num (getint (strcat"\nNhap color <" (itoa *num*) ">:")) ))
     	(if num (setq *num* num))
     	(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (vla-put-Color (vlax-ename->vla-object ent)*num* )	)
     	(command "_.undo" "_end") (princ)  )))
    

    Bác gia_bach ơi bác có thể xem giúp em đoạn lisp trên với. Em mới cài Cad 2008 và khi ghi bước thép cũng như khi đổi màu đối tượng thì nó báo lỗi. Kiểu như sau:

     

    Command: bt

     

    Nhap buoc thep <200>:

     

    Select objects: 1 found

     

    Select objects: _.undo Current settings: Auto = On, Control = All, Combine =

    Yes

    Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]

    <1>: _begin

    Command: ; error: no function definition: VLAX-ENAME->VLA-OBJECT

    Em không biết nó là lỗi gì. Bác xem giúp em với nhé.

    Thanks bác nhiều.


  14. Không hề như nhau đâu Detailing ạ.

    - Cách 1: không quan tâm đến scalelist. với bất kỳ tỷ lệ nào nhập vào ta vẫn zoom được. bản chất việc làm này không liên quan gì đến annotation scale, nó đã được hỗ trợ từ lâu trong các bản cad cũ có hỗ trợ layout.

    - Cách 2: Cái này bao gồm 2 lệnh. Đầu tiên nó thực hiện lệnh zoom scale viewport (cách 1) với tỷ lệ đúng bằng tỷ lệ mà bạn muốn thay đổi. sau đó nó mới thiết lập annotation scale của viewport đó.

    Vậy bạn phải hiểu việc làm này như thế nào? Bản chất việc làm này là bạn thay đổi tỷ lệ vẽ của các đối tượng annotative trong viewport đó. tuy nhiên chính vì đang trong viewport chứ không phải model nên để đảm bảo tính đúng đắn của kích thước các đối tượng vẽ ra cad thực hiện bước thiết lập tỷ lệ zoom của viewport cho bạn luôn. Nghĩa là cách 1 chỉ là 1 phần công việc của cách 2.

    Minh họa vui 1 chút cho dễ hiểu: Bạn chủ topic bảo, tôi muốn học để lấy bằng cấp 3. Và bạn khuyên bạn ấy: "Vậy mày học để lấy bằng đại học đi, mày sẽ có bằng cấp 3" :D

     

    Việc thiết lập theo cách này sẽ bị giới hạn bởi chính danh sách tỷ lệ (scalelist). nếu bạn muốn thiết lập tỷ lệ không có trong scalelist thì bắt buộc bạn phải thực hiện thêm 1 bước là "add scale to scalelist" bởi vậy nó không phải là thứ mà chủ topic cần. (do không sử dụng annotative object và annotation scale)

     

    Lisp mình post bên trên chính là việc thực hiện tuần tự theo cách 2 này. nhưng đảm bảo có thể thiết lập được bất kỳ tỷ lệ nào mình muốn mà không cần thủ công "add scale to scalelist". Tất nhiên nó chỉ phục vụ cho những ai sử dụng annotation scale, cad cũ thì nghỉ khỏe.

    Chào các bác.

    Em xin cảm ơn các bác đã quan tâm giúp đỡ em.

    Vì em chưa hiểu gì về Anotation scale và object scale. Mà trước mắt em chỉ muốn tạo tỷ lệ cho một viewport bằng cách gõ lệnh từ bàn phím nhanh hơn, Yêu cầu này thì đoạn lisp ngắn phía trên của bác Thái đã đáp ứng được rồi. Em sẽ tìm hiểu thêm theo ý kiến của bác Detailing.

    Không biết các bác thế nào chứ em thì em muốn các việc được gõ lệnh từ bàn phím cho tiện hơn (với em). Như đoạn lisp thứ 2 em xin giúp đỡ chẳng hạn, đoạn lisp Update dimension ấy, việc đó có thể không cần dùng lisp nhưng em muốn vì em thích dùng lệnh hơn thôi ạ

    Một lần nữa cảm ơn các bác nhiều!


  15. bên layout em có 2 viewport, 1 view port tỉ lệ 1:1 thì nét hidden nhìn thấy được, còn viewport tỉ lệ 1:10 thì không nhìn thấy nét hidden, giờ làm sao cho cả 2 vewport đều nhìn thấy nét hidden được đây mấy anh chị ơi ? help em vớihttp://www.cadviet.c...55_drawing1.dwg

    Bình thường thì mình làm như thế này:

    Bên Model để toàn bộ Linetype scale là 1, sang bên Layout chỉnh thông số LTS cho phù hợp. Trường hợp ở cùng một Viewport mà cũng nét nhìn thấy nét không thì mới chỉnh tiếp thông số này bên Model nữa. Bạn xem có được không nhé.

    http://www.cadviet.com/upfiles/3/110072_110055_drawing1.dwg


  16. 3. Cái này đâu nhất thiết phải dùng Lisp:

    C1: Set dim hiện hành D50 chẳng hạn. Dùng lệnh : -dimstyle

    Command: -DIMSTYLE

     

    Current dimension style: KTDMCAT1-25 Annotative: No

    Enter a dimension style option

    [ANnotative/Save/Restore/STatus/Variables/Apply/?] <Restore>: a -> Gõ a

    Select objects: Specify opposite corner: 15 found -> Quét chọn đối tượng

    Select objects:

     

    C2: Quét chọn toàn bộ đối tượng -> Thò chuột lên thanh Toolbar (thanh style) -> Chọn Dim cần thiết lập -> Xong

    Cảm ơn các bác.

    Nhưng sao không thấy bác nào nhắc đến đoạn lisp đầu tiên em nói nhỉ. Có bác nào giúp em với!


  17. 1 - Bạn có sử dụng annotative object và annotation scale khi vẽ không? nếu có thì mình sẽ cho bạn cái của mình. nếu không thì bạn tiếp tục chờ sẽ có người có hứng viết cho bạn. yêu cầu của bạn sao lại "1/50" mà không "50" đi cho gọn? đã mất công thu gọn nó thì làm tới bến luôn đi chứ.

     

    2 - Mình thấy đổi tên lệnh thế cũng chẳng nhanh hơn mà.

    (defun c:cb (command "_copybase") (princ))

     

    3 - Cái này mình không hiểu ý bạn lắm nên thôi không ý kiến.

    Cảm ơn bac Thaistreetz đã giúp đỡ.

    1-Về đoạn lisp đầu tiên, nếu mà chỉ cần gõ là 50 thôi thì càng tốt. Em thì cứ nghĩ là phải có 1/50 mới được. Em cũng không biết annotative object và annotation scale là gì cả. Em mới biết cách tạo tỷ lệ bên layout cho viewport như cách em nói thôi.Nếu có đoạn lisp giống như em đang làm thì tốt. Nhưng em sẽ tìm hiểu thêm về annotative object và annotation scale mà bác gợi ý.

    3-Đoạn lisp thứ 3 thì em không biết em nói thế có rõ không nữa. Nhưng bác xem hộ em trong File Cad em gửi sau đây xem có dễ hiểu hơn không thì bác giúp em với nhé

    .http://www.cadviet.com/upfiles/3/110072_dim_update.dwg


  18. Chào các anh.

    Em nhờ các anh viết hộ 3 đoạn lisp như sau:

    1- Lisp tạo tỉ lệ cho khung Viewport.

    Em mới biết tạo một viewport bên layout sau khi đã vẽ với tỉ lệ 1:1 (kích thước thật) của đối tượng bên model. Sau đó chuyển sang Layout dùng lệnh Mv tạo một khung viewpot.Để tạo tỉ lệ cho khung nhìn đó, giả sử là 1:50 em click đúp vào trong khung nhìn, gõ lệnh zoom chọn Scale rồi gõ tiếp 1/50xp. Nhưng như thế thì dài quá, em muốn nhờ các anh viết hộ em một đoạn lisp mà khi em tạo khung nhìn xong, click đúp vào trong khung đó, gõ lệnh tắt là VV, sau đó mình chỉ cần gõ tiếp 1/50 là xong, không cần zoom-Scale-1/50xp nữa.

    2- Khi em muốn copy một đối tương từ bản vẽ này sang một bản vẽ khác, em copy base point bằng lệnh Clt+Shift+C, nay em muốn nó chỉ là CB thôi. Mong các anh giúp đỡ.

    3-Giả sử em đang có một đối tượng được vẽ với giá trị Fit trong Dimension là 100 (Giả sử tên là D100), giờ em muốn chuyển sang tỷ lệ Fit là 200. (Giả sử tên là D200) thì em chọn cái D200 làm hiện hành và vào Dimension chọn Update rồi quét hết đối tượng đó. Em nhờ các anh làm giúp em đoạn lisp có chức năng như vậy với ạ. Lệnh tắt có thể là Du chẳng hạn. Vì em cũng hay phải thay đổi kiểu đó nên làm như kia cũng hơi mất thời gian.

    Em xin cảm ơn ạ!

    http://www.cadviet.c...2_view_port.dwg

×