Đến nội dung


Hình ảnh
- - - - -

Chỉnh sửa lisp ghi kich thước text


  • Please log in to reply
12 replies to this topic

#1 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 09 May 2014 - 12:39 AM

Mình có 1 cái lisp cop trên diễn đàn nay nhờ các bạn chỉnh sửa hộ mình tăng thêm 1 số yêu cầu của mình , để mình sư dụng thuận lợi hơn

1. Làm tròn số ( chẳng hạn như 1922 thành 1900 hay 2354 thanh 2400 ..)

2. Lisp có nhập chiều cao text nhưng không ghi nhớ cho những lần sử dụng lệnh tiếp theo rất bất tiện khi nhập lại , các bạn có thể tăng thêm cái nhớ chiều cao text cho mình

3. Chọn được font text

4 Ghi text ra song song với đường thẳng mình chọn ( làm được tùy biện chọn song song càng hay nhé )

5. Trong lisp có đoạn Chọn phương án nhập kết quả minh k hiểu nó là gì nữa

Yêu cầu hơi nhiều mong các bạn giúp đỡ vì nhu cầu công việc của mình càn nó

Thanks


  • 0

#2 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 09 May 2014 - 12:41 AM

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.c...tyle-hien-thoi/
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TL( / ss L e)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
k (getvar "dimlfac")
)

(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (* k (length1 e)))
(setq ans (getstring "\n Ban hay chon phuong an nhap ket qua "))
(if (= ans "1")
(progn
(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)
)
(progn
(setq p (getpoint "\n Chon diem nhap ket qua" ))
(setq h (getreal "\n Nhap chieu cao text ket qua "))
(command "text" p h "0" (rtos L 2 2))
)
)
(ssdel e ss)
)
(princ)
)
;;;--------------------------------------------------------------------


  • 0

#3 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 09 May 2014 - 12:42 AM

file dinh kem

http://www.cadviet.c...n_thangtl_1.lsp


  • 0

#4 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 09 May 2014 - 09:42 PM

Hic không có bạn nào giúp mình àh :(


  • 0

#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 09 May 2014 - 09:57 PM

Lisp down ở đâu thì hỏi ở đấy, dễ được tác giả trả lời.

Đường link trong file lisp vẫn còn, bạn nên trở lại đó để hỏi sẽ hiệu quả hơn.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#6 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 09 May 2014 - 10:10 PM

Lisp này lâu lắm rùi bạn àh, mình biết có bác Tuệ hình như có viết cái này và 1 người nữa là Phạm Thanh Bình thì phải

Help me


  • 0

#7 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 10 May 2014 - 08:31 AM

Với yêu cầu của bạn thì cái lisp trên xem như đổi gần hết.

Chọn phương án nhập kết quả là nếu bạn nhập "1" nó sẽ ghi vào text có sẵn, còn không thì tạo text mới.

Lisp dưới đây bạn không cần nhập chiều cao chữ, font, nhưng phải có text mẫu trước, nó căn cứ trên text mẫu để tạo text mới giống y.

Sau khi chọn text mẫu, bạn nhấp vào từng đối tượng, vị trí text mới ở ngay điểm bạn nhấp, chiều thì theo hướng bạn chọn.

 
(defun C:TL (/ ss L e)
  (defun Length1 (e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
  (defun tronso(a B) (* b (if (< (rem a B) (* 0.5 B)) (fix (/ a b 1.)) (1+ (fix (/ a b 1.))))))
  (defun dxf(id v) (cdr (assoc id (entget v))))
  
  ;;==============================================;;
  
  (setq k (getvar "dimlfac")
chumau (car (entsel "Chon chu mau:"))
os (getvar 'osmode))
  
  (command "undo" "be")
  (setvar 'osmode 512)
  (vl-load-com)
  (while (setq e0 (entsel "\nChon LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE:"))  
 
    (if (vl-string-search (dxf 0 (setq e (car e0))) "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
      (progn
(setq pt (vlax-curve-getClosestPointTo (vlax-ename->vla-object e) (last e0))
     pt1 (getpoint pt "Theo huong:"))
        (entmake (list '(0 . "TEXT") (cons 10 pt) (cons 7 (dxf 7 chumau))
      (cons 72 0) (cons 50 (angle pt pt1))
      (cons 40 (dxf 40 chumau)) (cons 1 (rtos (tronso (* k (length1 e)) 100))))))
      (alert "Khong the do chieu dai doi tuong nay!!")
    )
  )
  (setvar 'osmode os)
  (command "undo" "e")
  (princ)

 

)

 

Bạn bỏ cái dòng <span...>  ở dưới đi


  • 1

#8 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 10 May 2014 - 08:39 PM

Tuyệt vời bạn ơi, cảm ơn bạn rất nhiều

Bạn có thể chỉnh thêm cho mình 1 chút nữa được không

1. Text có tới 3 chữ số 0 đằng sau mình không cần chĩnh xác đến đó ( minh chỉ cần tròn số thôi ( chẳng hạn như 1922 thành 1900 hay 2354 thanh 2400 ..)

2. Text và đường thẳng sát nhau quá có thể điều chỉnh khoảng cách giữa text và đường thẳng được k bạn bởi sát nhau quá khi in nó bị trung nét

mà tại sao bỏ cái dòng <span...> vậy bạn

Thanks bạn


  • 0

#9 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 May 2014 - 02:13 AM

Lisp này lâu lắm rùi bạn àh, mình biết có bác Tuệ hình như có viết cái này và 1 người nữa là Phạm Thanh Bình thì phải

Help me

Hề hề hề,

Ai kiu tui đó, có tui đây.

Thú thực là cai lisp này chẳng biết có phải do mình viết không nữa. Nhưng cứ theo những gì thể hiện trong lisp thì việc sửa nó theo yêu cầu của bạn không phải là không thể. Tuy nhiên bác Tot77 đã cho bạn cái lisp mới nên chẳng chắc là bạn còn cần sửa nữa hay không.

Nếu vẫn còn muốn sửa thì hãy thử tự sửa như sau xem có đạt yêu cầu không nhé:

1/- Thêm đoạn code sau đây vào ngay dưới dòng code : (setq L (* k (length1 e)))

(setq L (atof (rtos L 2 0)))

(if (<= (rem L 100) 50)

   (setq L (* (fix (/ L 100)) 100))

   (setq L (* (+ (fix (/ L 100)) 1) 100))

)

Đồng thời sửa các đoạn code (rtos L 2 2) thành

(rtos L 2 0)

 

2/- Thêm đoạn code sau đây vào phía trên dòng code: (setq h (getreal "\n Nhap chieu cao text ket qua "))

(if (not h)

và thêm một dấu ngoặc đóng   )  vào cuối dòng code (setq h (getreal "\n Nhap chieu cao text ket qua ")) này để thành 

(setq h (getreal "\n Nhap chieu cao text ket qua ")))

 

3/- Sau khi đã có text trên bản vẽ bạn có thể đổi font tùy ý bằng cách sử dụng lệnh style. bởi vì font sử dụng tùy thuộc vào style mà bạn muốn dùng. Việc đổi font trong style hiện hành có thể dẫn tới các text khác trên bản vẽ sẽ bị thay đổi theo. Vì vậy tốt nhất bạn nên tạo một style mới và đặt nó làm style hiện hành trước khi dùng lisp. Nếu bạn vẫn muốn đổi font của style hiện hành thì làm như sau:

- Thêm đoạn code sau đây vào phía dưới dòng code: (vl-load-com)

(setq fnt (getstring "\n Hay nhap ten day du cua file font muon dung: "))

(if (and fnt (/= fnt "") (/= fnt " "))

    (command "style" (getvar "Textstyle" ) fnt 0.0 1 0 N N )

)

Nên lưu ý rằng bạn phải nhập chính xác tên đầy đủ của file font bởi nếu nhập sai lisp sẽ không hoạt động. Mà các tên file này không hề dễ nhớ đâu . Do vậy nếu đã không nhớ chính xác thì bạn nên nhấn enter khi lisp yêu cầu nhập ten file font. Khi đó lisp sẽ sử dụng font của style hiện hành.

 

4/- Để text song song với đoạn thẳng chọn bạn cần sửa lisp như sau:

Thêm đoạn code dưới đây vào dưới dòng code: (setq p (getpoint "\n Chon diem nhap ket qua" ))

(setq p1 (vlax-curve-getclosestpointto (vlax-ename->vla-object e) p)

         p2 (vlax-curve-getpointatparam (vlax-ename->vla-object e) (+ (fix (vlax-curve-getparamatpoint (vlax-ename->vla-object e) p)) 1))

        a (angle p1 p2)

)

Đồng thời sửa dòng code: (command "text" p h "0" (rtos L 2 2)) thành

(command "text" p h a (rtos L 2 0))

 

5/- Bác Tot77 đã trả lời. Và như vậy việc đặt text xa hay gần, trên hay dưới đoạn thẳng bạn chọn hoàn toàn do bạn chớ không phải do lisp nữa.

 

Hy vọnng bạn thành công với việc sửa lisp này.


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#10 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 11 May 2014 - 08:09 AM

Tuyệt vời bạn ơi, cảm ơn bạn rất nhiều

Bạn có thể chỉnh thêm cho mình 1 chút nữa được không

1. Text có tới 3 chữ số 0 đằng sau mình không cần chĩnh xác đến đó ( minh chỉ cần tròn số thôi ( chẳng hạn như 1922 thành 1900 hay 2354 thanh 2400 ..)

2. Text và đường thẳng sát nhau quá có thể điều chỉnh khoảng cách giữa text và đường thẳng được k bạn bởi sát nhau quá khi in nó bị trung nét

mà tại sao bỏ cái dòng <span...> vậy bạn

Thanks bạn

Sửa lại theo ý bạn, ở lisp này nếu bạn đã chon chữ mẫu 1 lần rồi thì nếu không muốn chọn lại thì cứ enter .

Sở dĩ bảo bạn xóa dòng span là vì dơn theo dạng giống mục #7 dễ phát sinh những ký tự lạ mà mình không muốn có, nó có thể làm lisp không chạy được.

(defun C:TL (/ k os e0 e pt pt1 chumau1)
  (defun Length1 (e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
  (defun tronso(a b) (* b (if (< (rem a b) (* 0.5 b)) (fix (/ a b 1.)) (1+ (fix (/ a b 1.))))))
  (defun dxf(id v) (cdr (assoc id (entget v))))
  
   (setq k (getvar "dimlfac")
os (getvar 'osmode))
  (setq chumau1 (car (entsel "\nChon chu mau <Enter neu khong chon lai>:")))
  (if chumau1 (setq chumau chumau1))
  
  (command "undo" "be")
  (setvar 'osmode 512)
  (vl-load-com)
  (while (setq e0 (entsel "\nChon LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE:"))  
 
    (if (vl-string-search (dxf 0 (setq e (car e0))) "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
      (progn
(setq pt (vlax-curve-getClosestPointTo (vlax-ename->vla-object e) (last e0))
     pt1 (getpoint pt "Theo huong:"))
        (entmake (list '(0 . "TEXT") (cons 10 (polar pt (+ (angle pt pt1) (* 0.5 pi)) (* 0.2 (dxf 40 chumau))))
      (cons 7 (dxf 7 chumau))  (cons 72 0) (cons 50 (angle pt pt1))
      (cons 40 (dxf 40 chumau)) (cons 1 (rtos (tronso (* k (length1 e)) 100) 2 0)))))
      (alert "Khong the do chieu dai doi tuong nay!!")
    )
  )
  (setvar 'osmode os)
  (command "undo" "e")
  (princ)
)


  • 1

#11 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 11 May 2014 - 03:34 PM

Cảm ơn bạn Tot77, Phạm Thanh Bình

Tot77 , bạn có thể cho mình hỏi cách thay đổi khoảng cách của text và đường thẳng ở đâu trong lisp được không vì mỗi bản vẽ khoảng cách của chúng nó là không giống nhau cần mình điều chỉnh


  • 0

#12 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 11 May 2014 - 04:27 PM

Tôi lấy kc = 0.2 x chiều cao chữ.

Bạn muốn sửa thì tìm chỗ  (* 0.2 (dxf 40 chumau))


  • 1

#13 hung1608

hung1608

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 11 May 2014 - 04:28 PM

Thanks bạn rất nhiều :)


  • 0