Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu]Lisp dãn cách các text đè lên nhau với khoảng cách cho trước


  • Please log in to reply
36 replies to this topic

#21 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 23 November 2011 - 05:12 PM

Các bạn giúp mình với.

Hề hề hề,
Vì topic trôi đi nhanh quá nên mình không kịp xem yêu cầu của bạn. Vấn đề bạn nêu không khó và hoàn toàn có thể làm được. Tuy nhiên như mình đã nói, trong khi chưa có bạn hoàn toàn vẫn có thể xài lisp cũ kèm theo thằng move sau khi chạy lisp mà. Như vậy vừa được việc vừa đỡ sốt suột bạn ạ.
Hãy chờ chút xíu, mình sẽ xem và bổ sung điều bạn cần.

A, đây rồi, lisp nóng......




;;;;;;Sap xep cac text dung theo khoang cach ngang nhap vao. Co hai lua chon: sap xep tu trai qua phai va nguoc lai


(defun c:dkctd (/ oldos p d enlst i ht cn cd ort)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ;;;;; p (getpoint "\n Chon diem chuan ")
d (getreal "\n Nhap khoang cach chuan: ") )
(prompt "\n Chon nhom text can sap xep")
(setq enlst (acet-ss-to-list (ssget (list (cons 0 "text") ))))
(while enlst
(command "undo" "be")
(setq i 0)
(setq enlst (vl-sort enlst '(lambda (x y) (< (caar (acet-ent-geomextents x)) (caar (acet-ent-geomextents y))))))
(setq ort (getstring "\n Chon huong gian text <T or P>: "))
(if (= (strcase ort) "T")
(setq p (if (or (/= (cdr (assoc 72 (entget (car enlst)))) 0) (/= (cdr (assoc 73 (entget (car enlst)))) 0))
(cdr (assoc 11 (entget (car enlst)))) (cdr (assoc 10 (entget (car enlst)))) )
cn (cdr (assoc 72 (entget (car enlst))))
cd (cdr (assoc 73 (entget (car enlst))))
)
(setq p (if (or (/= (cdr (assoc 72 (entget (last enlst)))) 0) (/= (cdr (assoc 73 (entget (last enlst)))) 0))
(cdr (assoc 11 (entget (last enlst)))) (cdr (assoc 10 (entget (last enlst)))) )
cn (cdr (assoc 72 (entget (last enlst))))
cd (cdr (assoc 73 (entget (last enlst))))
enlst (reverse enlst)
)
)
(foreach en enlst
(setq encode (entget en)
ht (cdr (assoc 40 encode))
encode (subst (cons 72 cn) (assoc 72 encode) encode)
encode (subst (cons 73 cd) (assoc 73 encode) encode)
)
(if (= (strcase ort) "T")
(setq encode (subst (cons 11 (list (+ (car p) (* i (+ d ht))) (caddr (assoc 11 encode)))) (assoc 11 encode) encode))
(setq encode (subst (cons 11 (list (- (car p) (* i (+ d ht))) (caddr (assoc 11 encode)))) (assoc 11 encode) encode))
)
(entmod encode)
(setq i (1+ i))
)
;;; (setq ans (getstring "\n Ban muon tiep tuc chinh text <Y or N> : "))
;;; (if (= (strcase ans) "Y")
;;; (progn
(prompt "\n Hay chon nhom text can sap xep tiep theo")
(setq enlst (acet-ss-to-list (ssget (list (cons 0 "text")))))
;;; )
;;; (setq enlst nil)
;;; )
(command "undo" "e")
)
(setvar "osmode" oldos)

(princ)
)

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 24 November 2011 - 11:57 AM
Bổ sung code vào bài post, sửa sai do chủ thớt phát hiệnn

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

#22 dauquangminh

dauquangminh

    biết vẽ arc

  • Members
  • PipPip
  • 41 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 24 November 2011 - 09:57 AM

bác phamthanhbinh ơi!
khi chọn phương án hướng dãn text bên phải (P), đúng ra là text bên phải đứng im, và text còn lại (ở giữa và bên trái) dãn sang trái
nhưng khi dùng lisp thì thứ tự text bị đảo ngược, ví dụ:
ta có text đè lên nhau như thế này:.......................................................................ABC
đúng ra khi dùng lisp với hướng dãn text bên phải sẽ thế này:...................A.....B.....C
nhưng thực tế lisp ra kết quả như thế này:.................................................C.....B.....A
:unsure:
  • 0

#23 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 24 November 2011 - 11:54 AM

bác phamthanhbinh ơi!
khi chọn phương án hướng dãn text bên phải (P), đúng ra là text bên phải đứng im, và text còn lại (ở giữa và bên trái) dãn sang trái
nhưng khi dùng lisp thì thứ tự text bị đảo ngược, ví dụ:
ta có text đè lên nhau như thế này:.......................................................................ABC
đúng ra khi dùng lisp với hướng dãn text bên phải sẽ thế này:...................A.....B.....C
nhưng thực tế lisp ra kết quả như thế này:.................................................C.....B.....A
:unsure:

Hề hề hề,
Lisp nóng quá, phải bỏng rồi hử??? Tại tham ăn đấy mà.
Quả là sơ xuất của mình khi đảo chiều sắp xếp mà không đảo chiều list các point. Cũng tại mình chỉ sửa mà không test lại nên không phát hiện ra lỗi. Lười mà lị......
Sorry, sorry, so.....o ...or...ry nghen.
Chuyện vặt mà, để mình đổi một phát là ngon như ăn ..... bánh đúc ngay. Nhưng mà ăn bánh đúc cũng phải cẩn thận kẻo nghẹn đó nha.
Mình sửa luôn vào bài trước cho đỡ tốn đât nghen.
Hề hề hề,...
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#24 dauquangminh

dauquangminh

    biết vẽ arc

  • Members
  • PipPip
  • 41 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 24 November 2011 - 03:56 PM

Mình chỉ muốn nói với bác phamthanhbinh 2 chữ “Tuyệt vời!”. Thú thật là mình rất muốn hoàn thành cái lisp này để xin phép bác phamthanhbinh cho gửi lên khắp các forum. Vì lisp này rất thiết thực cho những ai làm thiết kế giao thông, những ai đã phải chịu cực hình khi cứ move từng text một với hàng trăm bản vẽ trắc ngang như vậy sẽ như cá gặp nước, hổ về rừng, người bắt được vàng khi có được cái lisp này trong tay.
Một lần nữa xin thay mặt những anh em làm thiết kế giao thông gửi lời cảm ơn chân thành nhất đến bác phamthanhbinh - một trong những con người tuyệt vời nhất của cadviet, và xin phép cho mình gửi lisp này đến với các anh em thiết kế khác trên cả nước nhé. :lol:
  • 0

#25 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 24 November 2011 - 07:58 PM

Mình chỉ muốn nói với bác phamthanhbinh 2 chữ “Tuyệt vời!”. Thú thật là mình rất muốn hoàn thành cái lisp này để xin phép bác phamthanhbinh cho gửi lên khắp các forum. Vì lisp này rất thiết thực cho những ai làm thiết kế giao thông, những ai đã phải chịu cực hình khi cứ move từng text một với hàng trăm bản vẽ trắc ngang như vậy sẽ như cá gặp nước, hổ về rừng, người bắt được vàng khi có được cái lisp này trong tay.
Một lần nữa xin thay mặt những anh em làm thiết kế giao thông gửi lời cảm ơn chân thành nhất đến bác phamthanhbinh - một trong những con người tuyệt vời nhất của cadviet, và xin phép cho mình gửi lisp này đến với các anh em thiết kế khác trên cả nước nhé. :lol:

Hề hề hề,
Chớ có vội kẻo nghẹn đó.
Đây là diễn đàn free nên bạn có quyền chia xẻ với bất cứ ai. Tuy nhiên bạn nên nhớ là lisp này mình viết dựa trên cai bản vẽ của bạn gửi. Bởi vậy rất có khả năng với các bản vẽ của người khác nó sẽ ọc ạch giở chứng do nó không được vẽ kiểu của bạn. Tỷ như họ toàn dùng mtext thay vì text như bạn thì cái lisp này toi cơm bạn ạ.
Hề hề hề,
Rất cám ơn bạn đã sử dụng tốt cái lisp này vào đúng việc bạn cần cũng như tinh thần chia sẻ kiến thức với mọi người của bạn.
Khi bạn chia xẻ lisp này với mọi người cũng nên nói rõ những hạn chế của nó thì người dùng mới yên trí nhớn được bạn ạ.
Hề hề hề.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#26 khanhmytho

khanhmytho

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 18 August 2013 - 01:12 PM

Lisp này hay quá rất là hữu ích góp phần giảm thời gian chỉnh sửa rất nhiều, bên cạnh đó thì còn một điểm nhỏ là trước khi sử dụng thì hộp truy bắt điểm (OSNAP) vẫn ok nhưng khi đánh lệnh thì các truy bắt điểm lại bị "văng" hết, sau khi chỉnh sủa xong thì lại vào OSNAP để chọn lại truy bắt điểm, không biết là tác giả và các anh trên frum có thể khắc phục điều này được không ạh. Xin chân thành cám ơn tác giả về lisp này :D


  • 0

#27 Polyline

Polyline

    biết lệnh mirror

  • Members
  • PipPipPip
  • 159 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 19 August 2013 - 08:39 AM

Về vấn đề truy bắt điểm trong Lisp, để tắt chế độ truy bắt điểm, cách làm thông thường là:

(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(progn ....)
(setvar "osmode" oldos)

 
Tuy nhiên, nếu phần thân chương trình gặp lỗi, dẫn đến lệnh trả về (setvar "osmode" oldos) không được thực hiện, khi đó, toàn bộ chế độ truy bắt điểm trước khi chạy lệnh đều bị xóa sạch.
Mình thì làm theo cách khác

(if (< (getvar "osmode") 16384)
(progn
(setq osmode-old (getvar "osmode"))
(setvar "osmode" (+ (getvar "osmode") 16384)));Turn OSMODE off
(setq osmode-old nil))
(progn ....)
(if osmode-old (setvar "osmode" osmode-old));Restore OSMODE

Tác dụng của nó là tắt chế độ bắt điểm giống hệt như nhấn nút F3 trên bàn phím. Nếu gặp sự cố trong thân chương trình, người dùng dễ dàng phục hồi chế độ bắt điểm cũ bằng cách nhấn phím F3.


  • 1

#28 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 19 August 2013 - 09:58 AM

Lisp này hay quá rất là hữu ích góp phần giảm thời gian chỉnh sửa rất nhiều, bên cạnh đó thì còn một điểm nhỏ là trước khi sử dụng thì hộp truy bắt điểm (OSNAP) vẫn ok nhưng khi đánh lệnh thì các truy bắt điểm lại bị "văng" hết, sau khi chỉnh sủa xong thì lại vào OSNAP để chọn lại truy bắt điểm, không biết là tác giả và các anh trên frum có thể khắc phục điều này được không ạh. Xin chân thành cám ơn tác giả về lisp này :D

Hề hề hề,

Thực tế thì trong lisp đã trả osnap về giá trị ban đầu.

Song rất có thể như bác Polyline đã nhận xét, quá trình thao tác lisp có lỗi chi đó để mà lisp bị đứt gánh giữa đường. Giá mà bạn cho biết cái gánh ấy nó gẫy chỗ nào thì hay quá. Bởi mình chưa rõ cách xài lisp của bạn, Còn khi mình test với vài trường hợp đơn lẻ thì chưa phát hiện ra lỗi.

hề hề hề,...


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

#29 khanhmytho

khanhmytho

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 19 August 2013 - 10:06 AM

_Cám ơn bạn Polyline  rất nhiều  như vậy code của lisp sẽ cập nhật thêm và hoàn thiện như sau, midnh đã sử dụng và rất Ok. Khi kết thúc lệnh sẽ tự động trả về cá chế độ truy bắt điểm ban đầu :D 
 
 

(defun c: dkctd (/ oldos p d enlst i ht cn cd ort)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" (+ (getvar "osmode") 16384))
(setq osmode-old nil)
(setq ;;;;; p (getpoint "\n Chon diem chuan ")
        d (getreal "\n Nhap khoang cach chuan: ") )
(prompt "\n Chon nhom text can sap xep")
(setq  enlst (acet-ss-to-list (ssget (list (cons 0 "text") ))))
(while enlst
   	(command "undo" "be")
   	(setq i 0)
   	(setq enlst (vl-sort enlst '(lambda (x y) (< (caar (acet-ent-geomextents x)) (caar (acet-ent-geomextents y))))))
   	(setq ort (getstring "\n Chon huong gian text <T or P>: "))
   	(if (= (strcase ort) "T")
   	(setq p (if (or (/= (cdr (assoc 72 (entget (car enlst)))) 0) (/= (cdr (assoc 73 (entget (car enlst)))) 0))
                        (cdr (assoc 11 (entget (car enlst)))) (cdr (assoc 10 (entget (car enlst))))  )
       		cn (cdr (assoc 72 (entget (car enlst))))
       		cd (cdr (assoc 73 (entget (car enlst))))
   	)
   	(setq p (if (or (/= (cdr (assoc 72 (entget (last enlst)))) 0) (/= (cdr (assoc 73 (entget (last enlst)))) 0))
                        (cdr (assoc 11 (entget (last enlst)))) (cdr (assoc 10 (entget (last enlst))))  )
       		cn (cdr (assoc 72 (entget (last enlst))))
       		cd (cdr (assoc 73 (entget (last enlst))))
               enlst (reverse enlst)
   	)
   	)
   	(foreach en enlst
            (setq encode (entget en)
                    ht (cdr (assoc 40 encode))                  
                    encode (subst (cons 72 cn) (assoc 72 encode) encode)
                    encode (subst (cons 73 cd) (assoc 73 encode) encode)                  
     		)
     		(if (= (strcase ort) "T")
         		(setq  encode (subst (cons 11 (list (+ (car p)  (* i (+ d ht))) (caddr (assoc 11 encode)))) (assoc 11 encode) encode))
         		(setq  encode (subst (cons 11 (list (- (car p)  (* i (+ d ht))) (caddr (assoc 11 encode)))) (assoc 11 encode) encode))
     		)
     		(entmod encode)
     		(setq  i (1+ i))
        )
   	;;; (setq ans (getstring "\n Ban muon tiep tuc chinh text <Y or N> : "))
   	;;; (if (= (strcase ans) "Y")
   	;;; 	(progn
         		(prompt "\n Hay chon nhom text can sap xep tiep theo")
         		(setq enlst (acet-ss-to-list (ssget (list (cons 0 "text")))))
(if osmode-old (setvar "osmode" osmode-old))
   	;;; 	)
  	;;; 	(setq enlst nil)
   	;;; )
        (command "undo" "e")
)
(setvar "osmode" oldos)
 
(princ)
)  

  • 1

#30 khanhmytho

khanhmytho

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 19 August 2013 - 10:09 AM

Hề hề hề,

Thực tế thì trong lisp đã trả osnap về giá trị ban đầu.

Song rất có thể như bác Polyline đã nhận xét, quá trình thao tác lisp có lỗi chi đó để mà lisp bị đứt gánh giữa đường. Giá mà bạn cho biết cái gánh ấy nó gẫy chỗ nào thì hay quá. Bởi mình chưa rõ cách xài lisp của bạn, Còn khi mình test với vài trường hợp đơn lẻ thì chưa phát hiện ra lỗi.

hề hề hề,...

Dạ em thêm vô nó Ok rồi anh phamthanhbinh ơi  có thể do nó bị "đá" chỗ nào đó , nhưng mà ok rồi :D 


  • 0

#31 silictoong

silictoong

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 29 November 2013 - 08:49 AM

Bác phamthanhbinh và bác khanhmytho ơi.Sao máy em báo load lisp success rồi. Với bản hoàn thiện cuối cùng của bác khanhmytho thì khi em đánh lệnh dkctd thì cad 2007 của em nó báo Unknown command "DKCTD".  Press F1 for help. nhỉ?Lệnh là em viết thường lẫn viết hoa rồi nhé.Em chuyển sang down bản gốc ban đầu của bác phamthanhbinh thì máy nhận lệnh dkctd thì cad nhận bình thường.Nhưng khi chạy thì hàng text vẫn trơ trơ ra đó, không chịu dịch chuyển.Các bác xem lại giùm em với.Dịch chuyển move tay mất công quá.


  • 0

#32 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 29 November 2013 - 11:17 AM

Bác phamthanhbinh và bác khanhmytho ơi.Sao máy em báo load lisp success rồi. Với bản hoàn thiện cuối cùng của bác khanhmytho thì khi em đánh lệnh dkctd thì cad 2007 của em nó báo Unknown command "DKCTD".  Press F1 for help. nhỉ?Lệnh là em viết thường lẫn viết hoa rồi nhé.Em chuyển sang down bản gốc ban đầu của bác phamthanhbinh thì máy nhận lệnh dkctd thì cad nhận bình thường.Nhưng khi chạy thì hàng text vẫn trơ trơ ra đó, không chịu dịch chuyển.Các bác xem lại giùm em với.Dịch chuyển move tay mất công quá.

Hề hề hề,

Hãy gửi bản vẽ của bạn lên nhé. Có nhẽ các text của bạn là Mtext chăng????


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

#33 ngoclinh.k55cd5

ngoclinh.k55cd5

    Chưa sử dụng CAD

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

Đã gửi 13 October 2014 - 07:51 PM

Anh ơi anh có thể giúp em dãn cách các chữ đè lên nhau như trong bản vẽ em up dưới đây không ạ, em đang thiết kế trắc dọc một tuyến đường, em cám ơn a nhiều

 

 http://www.cadviet.c...aaaaaaaaa_1.dwg


  • 0

#34 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 14 October 2014 - 12:55 AM

Anh ơi anh có thể giúp em dãn cách các chữ đè lên nhau như trong bản vẽ em up dưới đây không ạ, em đang thiết kế trắc dọc một tuyến đường, em cám ơn a nhiều

 

 http://www.cadviet.c...aaaaaaaaa_1.dwg

Hề hề hề,

Bạn đã dùng thử lisp phía trên chưa?? Nếu rồi thì có đạt không?? Và không đạt chỗ nào???


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

#35 ngoclinh.k55cd5

ngoclinh.k55cd5

    Chưa sử dụng CAD

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

Đã gửi 14 October 2014 - 01:03 AM

Em đã thử lisp trên và sau khi sử dụng lisp các chữ nó không theo ý muốn của em, nó chạy thành 1 cột dài ( em diễn đạt không được tốt ). Em muốn chỉ những chỗ nào nó đè lên nhau mới dãn cách thôi ạ, đa phần là dãn cách ngang, bác xem giúp em được không ạ,e cảm ơn

Hề hề hề,


  • 0

#36 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 14 October 2014 - 10:30 AM

Em đã thử lisp trên và sau khi sử dụng lisp các chữ nó không theo ý muốn của em, nó chạy thành 1 cột dài ( em diễn đạt không được tốt ). Em muốn chỉ những chỗ nào nó đè lên nhau mới dãn cách thôi ạ, đa phần là dãn cách ngang, bác xem giúp em được không ạ,e cảm ơn

Hề hề hề,

Hề hề hề,

Lisp này cho phép bạn chọn các nhóm text cần sắp xếp lại chứ đâu phải quét một lần tất cả các text. Vì vậy bạn có thể chọn lựa lần lượt các nhóm text trùng nhau để lisp làm việc.

Có vài điều cần lưu ý bạn như sau:

1/- trên bản vẽ của bạn có rất nhiều text có nội dung hoàn toàn giống nhau nằm đè lên nhau. Bởi vậy bạn nên loại trừ các text này chỉ để lại mỗi giá trị một text rồi mới chạy lisp

2/- Do lisp sẽ sắp xếp các text trong nhó theo vị trí của text đầu tiên về bên trái hay bên phải nên bạn chỉ nên chọ mỗi lần một nhóm text đè lên nhau để sắp xếp lại, sau khi lisp sắp xếp xong nhóm này thì chọn tiếp nhóm khác. Thao tác này giúp bạn kiểm soát được chặt chẽ việc sắp xếp để tránh nhầm lẫn trong quá trình này.

3/- Bạn nên dựa vào vị trí của từng nhóm text trên bản vẽ để lựa chon dãn cách về bên trái hay bên phải để việc bố trí text trên bản vẽ được đẹp mắt.

4/- bạn cũng nên nhò trước số lượng của các text trong mỗi nhóm để lựa chọn khoảng cách dãn text cho hợp lý. Khoảng cách này sẽ không thay đổi trong một lần chạy lisp

 

Hãy thử lại nhé.


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

#37 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 01 June 2015 - 01:49 PM

Hề hề hề,
Vì topic trôi đi nhanh quá nên mình không kịp xem yêu cầu của bạn. Vấn đề bạn nêu không khó và hoàn toàn có thể làm được. Tuy nhiên như mình đã nói, trong khi chưa có bạn hoàn toàn vẫn có thể xài lisp cũ kèm theo thằng move sau khi chạy lisp mà. Như vậy vừa được việc vừa đỡ sốt suột bạn ạ.
Hãy chờ chút xíu, mình sẽ xem và bổ sung điều bạn cần.

A, đây rồi, lisp nóng......

 

 
;;;;;;Sap xep cac text dung theo khoang cach ngang nhap vao. Co hai lua chon: sap xep tu trai qua phai va nguoc lai
 
 
(defun c:dkctd (/ oldos p d enlst i ht cn cd ort)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ;;;;; p (getpoint "\n Chon diem chuan ")
        d (getreal "\n Nhap khoang cach chuan: ") )
(prompt "\n Chon nhom text can sap xep")
(setq  enlst (acet-ss-to-list (ssget (list (cons 0 "text") ))))
(while enlst
   	(command "undo" "be")
   	(setq i 0)
   	(setq enlst (vl-sort enlst '(lambda (x y) (< (caar (acet-ent-geomextents x)) (caar (acet-ent-geomextents y))))))
   	(setq ort (getstring "\n Chon huong gian text <T or P>: "))
   	(if (= (strcase ort) "T")
   	(setq p (if (or (/= (cdr (assoc 72 (entget (car enlst)))) 0) (/= (cdr (assoc 73 (entget (car enlst)))) 0))
                        (cdr (assoc 11 (entget (car enlst)))) (cdr (assoc 10 (entget (car enlst))))  )
       		cn (cdr (assoc 72 (entget (car enlst))))
       		cd (cdr (assoc 73 (entget (car enlst))))
   	)
   	(setq p (if (or (/= (cdr (assoc 72 (entget (last enlst)))) 0) (/= (cdr (assoc 73 (entget (last enlst)))) 0))
                        (cdr (assoc 11 (entget (last enlst)))) (cdr (assoc 10 (entget (last enlst))))  )
       		cn (cdr (assoc 72 (entget (last enlst))))
       		cd (cdr (assoc 73 (entget (last enlst))))
               enlst (reverse enlst)
   	)
   	)
   	(foreach en enlst
            (setq encode (entget en)
                    ht (cdr (assoc 40 encode))                  
                    encode (subst (cons 72 cn) (assoc 72 encode) encode)
                    encode (subst (cons 73 cd) (assoc 73 encode) encode)                  
     		)
     		(if (= (strcase ort) "T")
         		(setq  encode (subst (cons 11 (list (+ (car p)  (* i (+ d ht))) (caddr (assoc 11 encode)))) (assoc 11 encode) encode))
         		(setq  encode (subst (cons 11 (list (- (car p)  (* i (+ d ht))) (caddr (assoc 11 encode)))) (assoc 11 encode) encode))
     		)
     		(entmod encode)
     		(setq  i (1+ i))
        )
   	;;; (setq ans (getstring "\n Ban muon tiep tuc chinh text <Y or N> : "))
   	;;; (if (= (strcase ans) "Y")
   	;;; 	(progn
         		(prompt "\n Hay chon nhom text can sap xep tiep theo")
         		(setq enlst (acet-ss-to-list (ssget (list (cons 0 "text")))))
   	;;; 	)
   	;;; 	(setq enlst nil)
   	;;; )
        (command "undo" "e")
)
(setvar "osmode" oldos)
 
(princ)
)            

LISP RẤT HỮU ÍCH VÀ HAY NHƯNG NHỜ BÁC PHAMTHANHBINH CHỈNH GIÚP BIẾN KHOẢNG CÁCH "d" VÀ BIẾN TRÁI "t" PHẢI "p" NHẬN GIÁ TRỊ NHẬP TRƯỚC ĐÓ NẾU THỰC HIỆN NHẤN ENTER CÒN NẾU NHẬP GIÁ TRỊ KHÁC THÌ BIẾN SẼ NHẬN GIÁ TRỊ MỚI. VẬY ĐỠ MẤT NHIỀU THAO TÁC NHẬP LIỆU. OK?


  • -1