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

namtrantt206xd

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

    36
  • Đã tham gia

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

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


  1. Không ai phản hồi nhỉ <_< !!!

    Em có File CAD này bị lỗi như sau:

    - Bên Layout có 3 khung nhìn 1,2,3

    - Khi chọn lệnh in, Preview tại khung 2 và 3 thì thấy kết quả tại khung 2 và 3. Nhưng Plot in ra giấy thì lại đều là kết quả khung nhìn số 1.http://www.cadviet.com/upfiles/6/89361_khung_ten.dwg

    File CAD http://www.cadviet.com/upfiles/6/89361_nhap.dwg

    Bác có sửa được lỗi này không?


  2. Đọc đến cuối đoạn lisp của bác mà em tí thì sặc nước  :D  :D

    Bác copy đoạn lisp ở đâu thêm vào thế này ko chạy được đâu.

    Đây, gửi lại lisp cho bác.

     

    http://www.cadviet.com/upfiles/6/124641_tgtext_1.lsp

    Cảm ơn bạn nhiều nhé. tại không hiểu bản chất nên mới copy dán lung tung xem nó có được không.

    Lisp bạn sửa giúp mình được rồi nhưng nhờ bạn sửa thêm cho 1 tí nữa là:

    1. sau khi chọn Text là gán kết quả luôn không cần phải ấn enter thêm.

    2. Text luôn trả về 2 số sau dấu phẩy. ví dụ kết quả là 0.80 thay vì như hiện tại là 0.8

    Thanks bạn nhiều nhé!

    • Vote tăng 1
    • Vote giảm 1

  3. Thay (getvar "PERIMETER") bằng (atof (rtos (getvar "PERIMETER") 2 2))

     

    Còn đổi màu chữ thì có câu lệnh nào chèn text đâu mà đổi ?

    Thanks bác nhiều nhé. Nhân tiện bác sửa giúp em cách đổi màu TEXT trong đoạn code sau luôn:

    ;; free lisp from cadviet.com

    ;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/3778-lisp-tinh-tong-chieu-dai-cac-line-hay-pline/

    (defun add_mline ()

    (foreach e_record_sub e_record

    (cond ((= 10 (car e_record_sub))

    (setq pt1 (cdr e_record_sub)

    mline_len 0.0

    )

    )

    ((= 11 (car e_record_sub))

    (setq pt2 (cdr e_record_sub)

    mline_len (+ mline_len (distance pt2 pt1))

    pt1 pt2

    )

    )

    )

    )

    (setq tot_len (+ tot_len mline_len))

    (ssdel e_name ss)

    )

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

     

     

     

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    (defun C:tg (/ tot_len ss e_name e_record e_type)

    (princ "\nCADViet.com © 2007")

    (setq tot_len 0.0)

    (setq ss (ssget))

    (if (null ss)

    (exit)

    )

    (while (> (sslength ss) 0)

    (setq e_name (ssname ss 0))

    (setq e_record (entget e_name))

    (setq e_type (cdr (assoc '0 e_record)))

    (cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")

    (command "lengthen" e_name "")

    (setq tot_len (+ tot_len (atof (rtos (getvar "PERIMETER") 2 2))))

    (ssdel e_name ss)

    )

    ((wcmatch e_type "MLINE") (add_mline))

    (e_type (ssdel e_name ss))

    )

    )

    (prompt (strcat "\nTotal length is: " (rtos tot_len 2 2)))

    (setq te (entget(car(entsel"\n Chon Text de gan ket qua :")))   (setq elst (entget en))

      (setq elst (subst (cons 1 (strcat " " (rtos dtl 2 2))) (assoc 1 elst) elst))

      (setq elst (append elst '((62 . 6))))

      (prin1 elst)

      (entmod elst)

    ;  (print)

    ;  (prompt (strcat "\nTotal area : " (rtos dTy_le 2 4)))

    ;  (print)

    ;  (setq pt2 (getpoint "\nPoint to write: "))

    ;  (command "text" pt2 "" "0" (rtos dtl 2 2))

    );defun


  4. Em có download trên diễn đàn lisp tính tổng các đường Line và Polyline:http://www.cadviet.com/upfiles/6/89361_tg.lsp

    Em muốn sửa Lisp này như sau:

    1. Làm tròn 2 số sau dấu phẩy của các đường Line và Polyline trước khi cộng tổng lại

    2. Đổi text sang màu 6

    Nhờ các bác giúp em với.

    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/3778-lisp-tinh-tong-chieu-dai-cac-line-hay-pline/
    (defun add_mline ()
    (foreach e_record_sub e_record
    (cond ((= 10 (car e_record_sub))
    (setq pt1 (cdr e_record_sub)
    mline_len 0.0
    )
    )
    ((= 11 (car e_record_sub))
    (setq pt2 (cdr e_record_sub)
    mline_len (+ mline_len (distance pt2 pt1))
    pt1 pt2
    )
    )
    )
    )
    (setq tot_len (+ tot_len mline_len))
    (ssdel e_name ss)
    )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (defun C:tg (/ tot_len ss e_name e_record e_type)
    (princ "\nCADViet.com © 2007")
    (setq tot_len 0.0)
    (setq ss (ssget))
    (if (null ss)
    (exit)
    )
    (while (> (sslength ss) 0)
    (setq e_name (ssname ss 0))
    (setq e_record (entget e_name))
    (setq e_type (cdr (assoc '0 e_record)))
    (cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
    (command "lengthen" e_name "")
    (setq tot_len (+ tot_len (getvar "PERIMETER")))
    (ssdel e_name ss)
    )
    ((wcmatch e_type "MLINE") (add_mline))
    (e_type (ssdel e_name ss))
    )
    )
    (prompt (strcat "\nTotal length is: " (rtos tot_len 2 2)))
    (princ)
    )
    (princ "\ntg - free lisp from www.cadviet.com")
    (princ)

    • Vote giảm 1

  5. Sửa cho bạn đây :

    
    

    (defun C:f2( / cdd L te p1 p2)

    (setq cdd (atof (cdr(assoc 1 (entget(car(entsel "\n Pick chon Text cao do dau :")))))))

    (setq p1 (getpoint "\n Chon diem da biet cao do:"))

    (while (setq p2 (getpoint p1 "\n Chon diem can tim cao do :"))

    (setq L (+ cdd (- (cadr p2) (cadr p1))))

    (setq te (entget(car(entsel"\n Chon Text de gan ket qua :")))

    te (subst (cons 1 (rtos L 2 2)) (assoc 1 te) te))

    (entmod te))(princ))

    ;---

    (defun C:4( / L te p1 p2)

    (while (and (setq p1 (getpoint "\n Chon diem thu nhat :"))(setq p2 (getpoint p1 "\n Chon diem thu hai :")))

    (setq L (distance p1 p2))

    (setq te (entget(car(entsel"\n Chon Text de gan ket qua :"))) te (subst (cons 1 (rtos L 2 2)) (assoc 1 te) te))

    (entmod te))(princ))

     

    Bác sửa lisp cao độ này rất hay, nhưng em muốn nhờ bác sửa lisp đo khoảng cách ngắn gọn hơn 1 bước nữa được không?

    Nghĩa là: gõ lisp\chọn điểm gốc\chọn điểm còn lại\chọn text (1 điểm gốc tính khoảng cách cho tất cả các điểm còn lại giống như lisp cao độ)

    Thanks bác nhiều nha!


  6.  

    Ý 1 : Quick code :

     

    (defun c:test(/ i adoc daolst )(vl-load-com)
    (defun daolst (lst p / lst1 i a <img src='http://www.cadviet.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.png' class='bbc_emoticon' alt='B)' />
    (setq p (car (vl-sort lst '(lambda(x y)(< (distance p x)(distance p y))))))
    (cond
      ((setq a (member p lst)) (setq i -1)  
      (setq b (append a
       (reverse(repeat (vl-position p lst)
    	(setq lst1 (cons (nth (setq i (1+ i)) lst) lst1))
       ))
      )))
    )
    b
    )
    (command "undo" "be")
    (setq i -1 a (acet-geom-vertex-list (car (entsel "\nChon Pline :"))) a (daolst a (getpoint "\nDiem bat dau danh so :")))
    (mapcar '(lambda(x y)(or (eval x) (set x y))
    (set x (cond ((getreal (strcat "\nNhap " (vl-princ-to-string x) ": <" (rtos (eval x) 2 2) ">")))
    ((eval x))
       )
    ))
    '(1st inc h)'(1 1 1))
    (mapcar
    '(lambda(x)
      (vla-addtext
       (cond  (adoc)
    ((setq adoc (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))))
       )
       (rtos (+ 1st (* (setq i (1+ i)) inc)) 2 0)
       (vlax-3d-point x)
       h
      )
    )
    (if (wcmatch (getstring "\nGiu nguyen chieu ? <y> ") ",[yY]")
      a
      (reverse a)
    )
    )(command "undo" "en")
    )
    

    - Ý 2 của bạn k có cơ sở, vì mình tạo Dtext chứ k tạo Mtext, và mình tạo theo style hiện hành

    Trong lisp này có daolst là gì thế bác nhỉ? vì khi dùng lisp này thì cad báo là  error: no function definition: DAOLST? Bác có cách nào sửa được không?


  7. Em cảm ơn Bác nhiều nhé, nhưng bác có thể sửa giúp em để cho khi mình chọn đường polyline ở đâu thì text hiện ra ở đó được không? và sửa lại sao cho lisp có thể đánh bắt đầu từ điểm mình pick.

    Thanks!

    e

    K có file miêu tả => Chịu

    em vừa up nhưng chưa được.http://www.cadviet.com/upfiles/3/89361_drawing1.dwg


  8. Quick code. Lần sau bạn nhớ chú ý cách đặt vấn đề và nội quy box này :

     

    (defun c:test(/ i adoc)(vl-load-com)(command "undo" "be")
    (setq i -1 a (acet-geom-vertex-list (car (entsel "\nChon Pline :"))))
    (mapcar '(lambda(x y)(or (eval x) (set x y))
    (set x (cond ((getreal (strcat "\nNhap " (vl-princ-to-string x) ": <" (rtos (eval x) 2 2) ">")))
    ((eval x))
      )
    ))
    '(1st inc h)'(1 1 1))
    (mapcar
    '(lambda(x)
     (vla-addtext
      (cond  (adoc)
    ((setq adoc (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))))
      )
      (rtos (+ 1st (* (setq i (1+ i)) inc)) 2 0)  
      (vlax-3d-point x)
      h
     )
    )
    (if (wcmatch (getstring "\nGiu nguyen chieu ? <y> ") ",[yY]")
     a
     (reverse a)
    )
    )(command "undo" "en")
    )
    

    Em cảm ơn Bác nhiều nhé, nhưng bác có thể sửa giúp em để cho khi mình chọn đường polyline ở đâu thì text hiện ra ở đó được không? và sửa lại sao cho lisp có thể đánh bắt đầu từ điểm mình pick.

    Thanks!


  9. Bạn post bản vẽ lên và thể hiện y/c trên bản vẽ. Nếu chiều nay không ai viết thì tôi sẽ giúp bạn.

    ví dụ em có 1 đường pollyline, có 10 điểm chẳng hạn, từ điểm 1 đến điểm 10. giờ em muốn có lisp kiểu như thế này anh ah:

    gõ lệnh\ pick vào đường polyline\ chọn điểm bắt đầu đánh số\ chọn số đầu tiên\ chọn bước nhảy.

    Bác hiểu ý em không ạ? ví dụ em muốn đánh số cho 10 điểm của đường polyline là từ 1 đến 10, em gõ lệnh, pick vào được polyline\ chọn điểm đầu đường polyline\ nhập 1\ bước nhảy 1. kiểu như thế đấy.

    Mong bác giúp được em.hi

×