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.
0983329677

Giúp tôi: Ghi tên file vào bản vẽ

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

Xin chào các bạn.

 

Tôi có một thắc mắc mong các bạn giúp tôi.

 

Tôi đang dùng lệnh RText để ghi đường dẫn của bản vẽ

 

Tôi muốn nhờ ai viết cho 1 auto lisp để đơn giản công việc này.

 

Giúp tôi nhé.

 

Thank.

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

lệnh FNAME dưới đây sẽ giúp bạn:

 

(defun c:fname (/ sty d h)
 (setq
   sty	(getvar "textstyle")
   d	(tblsearch "style" sty)
   h	(cdr (assoc 40 d))
 )
 (entmake (list (cons 0 "TEXT")
	 (cons 7 sty)
	 (cons 1
	       "%<\\AcVar Filename \\f \"%fn7\">%"
	 )
	 (cons 10 (getpoint "\nVi tri text: "))
	 (if (> h 0)
	   (cons 40 h)
	   (assoc 40 d)
	 )
	 (assoc 41 d)
   )
 )
 (command ".updatefield" (entlast) "")
 (princ)
)

  • Vote tăng 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
Mình ko biết bạn dùng CAD???? chứ CAD2004 mình đâu thấy Fielf-FileName như bạn chỉ nhỉ.

Cad2004 trở về trước không có tính năng này.

Về lisp cũng vậy, có lẽ anh Hoành quên không để ý, lisp trên không dùng được cho Cad đời cũ.

Bạn có thể dùng lisp sau, lệnh FN, không phân biệt version:

 

;;;-------------------------------------------------------
(defun wtxt (txt p ) ;;;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 C:FN () ;;;Write full filename on graphic screen
(wtxt (findfile (getvar "dwgname")) (getpoint "\nVi tri ghi FileName:"))
(princ)
)
;;;-------------------------------------------------------

  • Vote tăng 2

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
Tuyệt cú mèo. Cảm ơn bạn nhé. Nhưng bạn có thể giúp thêm đường dẫn có dạng thế này ko:

Time - date - Path (Tức là: Giờ lưu BV sau cùng - Ngày lưu bản vẽ - Đường dẫn)

Đây bạn, tên lệnh MTF (Modified Time and Filename). Nhưng bạn nên rút kinh nghiệm, lần sau có nêu yêu cầu thì nêu luôn 1 thể, từ nội dung đến hình thức trình bày.

;;;-------------------------------------------------------
(defun wtxt (txt p ) ;;;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 C:MTF ( / fn mt txt)
;;;Write last Modified Time and full Filename on graphic screen
(setq
   fn (findfile (getvar "dwgname"))
   mt (menucmd "M=$(edtime,$(getvar,tdupdate),HH:MM - DD/MO/YYYY)")
   txt (strcat mt " - " fn)
)
(wtxt txt (getpoint "\nBase point:"))
(princ)
)
;;;-------------------------------------------------------

  • Vote tăng 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
Lâu quá ko thấy bác nào giúp cả, diễn đàn minhg thiếu nhiệt tình nhỉ. Tự mò mẫm với Lisp FN trên diễn đàn được thế này mong các bác chỉnh sửa lại cho hay nhất

;;; ====== Ghi duong dan File vao ban ve CAD =======
;;;-------------------------------------------------------
(defun wtxt (txt p )
(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 C:FN ( / logn fname mt txt)
(setq
logn (getvar "loginname")
fname (findfile (getvar "dwgname"))
mt (menucmd "M=$(edtime,$(getvar,tdupdate),HH:MM_DD/MO/YY)")
txt (strcat "[" logn "_" mt "] " fname)
)
(command ".layer" "n" "TEXTfn" "c" "8" "TEXTfn" "s" "TEXTfn" "")
(command ".style" "TEXTfn" "vnsimple" "2" "0.7" "" "" "")

(wtxt txt (getpoint "\nChon diem dat:"))

(command ".rotate" "l" "" (getpoint "\nChon diem xoay:") "r" "0" )
(princ)
(prompt "\nBan da hoan thanh_Chuc thanh cong")
(princ)
)
;;;-------------------------------------------------------

Chào bạn philipdn,

Có vài điều góp ý với bạn như sau:

1/- Bạn đã chứng tỏ rằng bạn có một kiến thức về lisp không tồi. Hơn nữa bạn cũng đã là thành viên khá lâu của diễn đàn này. Chắc bạn cũng đã hiểu khá rõ về mục đích của diễn đàn này. Đó là giúp nhau cùng tiến bộ chứ không phải là làm hộ nhau hay là để ỷ lại vào nhau.

Việc bạn trách móc như vậy chưa hẳn đúng đâu. Rõ ràng là bạn có khả năng chỉnh sửa lisp và có thể làm được cái điều không quá khó mà bạn đã post. Vậy mà bạn vẫn yêu cầu người khác giúp. Không những thế bạn lại hơi quá đáng khi chỉ một yêu cầu của bạn mà bạn không nói rõ ràng đầy đủ ngay từ đầu, lại post lắt nhắt, mỗi lần một tí như kiểu trẻ con vậy. Bác SSG đã từng nói trên diễn đàn yêu cầu mọi ngừoi có yêu cầu viết lisp cần phải suy nghĩ đầy đủ và nghiêm túc để chỉ post yêu cầu một lần. Khi đã viết lisp đúng với yêu cầu đặt ra thì bác ấy sẽ không chấp nhận viết thêm các yêu cầu phụ mà người yêu cầu viết muốn thêm nữa vì điều đó chứng tỏ người yêu cầu không tôn trọng người viết. Với bạn bác ấy đã cảnh báo một lần rồi mà. Bạn nên tự rút kinh nghiệm thì hơn là trách móc mọi người.

2/- Thực ra mình thấy cách suy luận của bạn chưa hay lắm khi làm lisp. Rõ ràng trong bộ mã DXF của một text đã có đầy đủ các mã tương ứng với yêu cầu của bạn. Vì thế bạn chỉ cần bổ sung hay thay thế các mã tương ứng với các yêu cầu của bạn trong hàm entmake là được không cần phải sử dụng phức tạp như bạn là dùng hàm lệnh style, lệnh rotate. Cụ thể:

mã 62 chỉ thị màu của text, mã 50 chỉ thị góc xoay text, mã 8 chỉ thị lớp của text, mã 1 chỉ nội dung text, mã 40 chỉ chiều cao text, mã 41 chỉ hệ số chiều rông text, .......

Do đó, với cái líp của bác SSG, bạn chỉ cần bổ sung biến logn như bạn đã làm, bổ sung hàm đặt tên lớp mà bạn muốn chọn, bổ sung hàm lệnh layer để tạo lớp có tên như bạn chọn và cuối cùng là bổ sung và thay thế các bộ mã tương ứng với yêu cầu của bạn vào trong list các mã của hàm enmake là OK.

Như vậy lisp sẽ gọn và mạch lạc hơn bạn ạ.

Bạn hãy thử làm như mình gợi ý xem nhé. Nếu gặp khó khăn thì bạn hãy post lên mình sẽ giúp.

Chúc bạn vui.

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

Mình không biết các bạn dùng CAD nào còn nếu dùng CAD 2008 trở lên thì vấn đề này rất đơn giản cũng không cần phải viết lip bởi trong CAD đã có sẵn tính năng này rùi. bạn chi cần làm theo các hình sau la oke luôn có đầy đủ thông tin cho bạn lựa chọn, từ đường dẫn, tên người dùng, ngày chỉnh sửa, font chữ, cỡ chữ, góc xoay...

Bạn xem các hình vẽ ở đây nhé!

( nhân tiện các cho hỏi luôn: mình thấy mọi ngouwì gắn ảnh trực tiếp vào bài viết được, không biết các bạn làm cách nào hay vậy)

http://www.cadviet.com/upfiles/h1_1.jpg

http://www.cadviet.com/upfiles/h2_1.jpg

http://www.cadviet.com/upfiles/h3_1.jpg

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


×