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.
Đăng nhập để thực hiện theo  
hai_1401

Cho em hỏi về lisp sắp xếp text

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

hai_1401    30

Em có cái lisp này, dùng để dãn dòng các text với nhau. Tuy nhiên có 1 điều là text chỉ để ở chế độ left mới có thể dãn dòng được. Em thì chẳng biết j về lisp cả, vậy có bác nào có thể chỉnh sửa để bất kì text nào cũng có thể dãn được ko ạ, em xin cảm ơn.

 

 

 

(defun c:sx (/ sst lstent egoc pgoc xgoc yht zgoc linespc ee tt)

(if (not tyledong)

(setq tyledong 1.5)

)

(setq sst (ssget '((0 . "TEXT")))

lstent (ss2ent sst)

tmp (getreal (strcat "\nVao ty le dong khoang cach dong <"

(rtos tyledong 2 2)

">: "

)

)

tyledong (cond

(tmp tmp)

(t tyledong)

)

lstent (vl-sort lstent

'(lambda (e1 e2)

(> (cadr (cdr (assoc 10 (entget e1))))

(cadr (cdr (assoc 10 (entget e2))))

)

)

)

egoc (car lstent)

lstent (cdr lstent)

pgoc (cdr (assoc 10 (entget egoc)))

xgoc (car pgoc)

yht (cadr pgoc)

zgoc (caddr pgoc)

hgoc (cdr (assoc 40 (entget egoc)))

linespc (* hgoc (+ 1.0 tyledong))

 

)

(foreach ee lstent

(setq tt (entget ee)

tt (subst (list 10

xgoc

(setq yht (- yht linespc))

zgoc

)

(assoc 10 tt)

tt

)

)

(entmod tt)

(entupd ee)

)

(princ)

)

(defun ss2ent (ss / sodt index lstent)

(setq

sodt (cond

(ss (sslength ss))

(t 0)

)

index 0

)

(repeat sodt

(setq ent (ssname ss index)

index (1+ index)

lstent (cons ent lstent)

)

)

(reverse lstent)

)

(vl-load-com)

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
q288    164
Em có cái lisp này, dùng để dãn dòng các text với nhau. Tuy nhiên có 1 điều là text chỉ để ở chế độ left mới có thể dãn dòng được. Em thì chẳng biết j về lisp cả, vậy có bác nào có thể chỉnh sửa để bất kì text nào cũng có thể dãn được ko ạ, em xin cảm ơn.

 

Nếu muốn gióng text theo phương đứng thì text phải ở chế độ left hay right thì mới thẳng hàng đc. Mình sửa lại lisp của bạn để chuyển các dòng bên dưới về left rồi gióng, bạn xem có đúng ý bạn ko.

 


(defun c:sx (/ sst lstent egoc pgoc xgoc yht zgoc linespc ee tt)
 (if (not tyledong) (setq tyledong 1.5))
 (setq sst	 (ssget '((0 . "TEXT")))
lstent	 (ss2ent sst)
tmp	 (getreal (strcat "\nVao ty le dong khoang cach dong <"
			  (rtos tyledong 2 2)
			  ">: "	))
tyledong (cond (tmp tmp) 
                              (t tyledong))
lstent	 (vl-sort lstent
		  '(lambda (e1 e2)
		     (>	(cadr (cdr (assoc 10 (entget e1))))
			(cadr (cdr (assoc 10 (entget e2))))
		     )
		   )
	 )
egoc	 (car lstent)
lstent	 (cdr lstent)
pgoc	 (cdr (assoc 10 (entget egoc)))
xgoc	 (car pgoc)
yht	 (cadr pgoc)
zgoc	 (caddr pgoc)
hgoc	 (cdr (assoc 40 (entget egoc)))
linespc	 (* hgoc (+ 1.0 tyledong))

 )
 (foreach ee lstent
   (setq tt (entget ee)
  tt (subst (list 10  xgoc  (setq yht (- yht linespc))  zgoc )
	    (assoc 10 tt)
	    tt)
  tt (if (/= (assoc 72 tt) 0)
       (subst (cons 72 0) (assoc 72 tt)  tt)))
   (entmod tt)
   (entupd ee)
 )
 (princ)
)

(defun ss2ent (ss / sodt index lstent)
 (setq sodt  (cond (ss (sslength ss))
            (t 0))
   index 0
 )
 (repeat sodt
   (setq ent	 (ssname ss index)
  index	 (1+ index)
  lstent (cons ent lstent)
   )
 )
 (reverse lstent)
)
(vl-load-com)

  • Vote tăng 4

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
hai_1401    30

Ặc bác ơi, em sử dụng rồi nhưng thấy thế này: Cái khoảng cách dòng mà mình sắp xếp không đúng với thực tế hay sao ấy. Tức là em Copy 1 text xuống với khoảng cách là 10, sau đó em dùng lisp này để dãn dòng với khoảng cách cũng là 10 thì thấy nó khác nhau. Khi em đo lại khoảng cách sau khi dãn dòng thì được khoảng cách là hơn 30 mới lạ chứ, bác xem lại giúp em xem có dãn được khoảng cách thật không. Thanks bác phát nữa nhá :(

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

Đăng nhập để thực hiện theo  

×