Đến nội dung


Hình ảnh

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


  • Please log in to reply
3 replies to this topic

#1 hai_1401

hai_1401

    biết lệnh rotate

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

Đã gửi 18 April 2009 - 09:46 AM

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)
  • 0

#2 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 18 April 2009 - 10:29 AM

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)

  • 4

#3 hai_1401

hai_1401

    biết lệnh rotate

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

Đã gửi 20 April 2009 - 04:20 PM

Thank bác nhé, em chưa thử nhưng hy vọng là sẽ đuợc :x
  • 0

#4 hai_1401

hai_1401

    biết lệnh rotate

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

Đã gửi 28 April 2009 - 05:00 PM

Ặ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á :(
  • 0