Đến nội dung


Hình ảnh

Move text theo trục Z


  • Please log in to reply
4 replies to this topic

#1 ResArchi

ResArchi

    biết vẽ line

  • Advance Member
  • PipPip
  • 29 Bài viết
Điểm đánh giá: 84 (tàm tạm)

Đã gửi 25 February 2007 - 12:59 AM

Bạn đang có trong tay một bản vẽ trắc địa. Trong bản vẽ đó, các điểm cao độ được xác định bằng giá trị các đối tượng text. Làm sao để move các đối tượng text này lên cao độ đúng như trong giá trị của nó?

Bạn copy đoạn lisp sau vào một file .lsp, rồi sau đó appload lên ACAD và dùng lệnh movetextz là ok:

(defun c:movetextz()
(defun mtone(ent)
(setq tt (enteget ent)
gt (cdr (assoc 1 tt))
old (assoc 10 tt)
new (list 10 (car old) (cadr old) (atof gt))
tt (sub new old tt)
)
(entmod tt)
)
(setq ss (ssget '((0 . "TEXT")))
lstent (ss2ent ss)
)
(foreach pp lstent
(mtone lstent)
)
)
  • 0

#2 bowxman

bowxman

    biết vẽ pline

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

Đã gửi 12 April 2007 - 03:18 AM

file cua bác chạy báo lỗi bác ui.
Em viết theo vòng lặp repeat, bác tham khảo:


(defun C:mz()
(setq ds (ssget '((0 . "TEXT"))))
(setq I (sslength ds))
(setq N 0)
(repeat I
(setq Z (atof (cdr (assoc 1 (entget (ssname ds N))))))
(setq text (entget (ssname ds N)))
(setq ttext (cdr (assoc 10 text)))
(setq text (subst (cons 10 (list (car ttext) (cadr ttext) z)) (assoc 10 text) text ))
(entmod text)
(entupd (ssname ds N))
(setq N (+ N 1))
)
)
  • 0

#3 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 April 2007 - 01:21 PM

(defun c:movetextz()
(defun mtone(ent)
(setq tt (enteget ent)
gt (cdr (assoc 1 tt))
old (assoc 10 tt)
new (list 10 (car old) (cadr old) (atof gt))
tt (sub new old tt)
)
(entmod tt)
)
(setq ss (ssget '((0 . "TEXT")))
lstent (ss2ent ss)
)
(foreach pp lstent
(mtone lstent)
)
)


Vừa thiếu vừa sai, không báo lỗi mới lạ! Đề nghị ResArchi xem lại các chỗ đánh dấu bold.
Ssg xin góp vui một chiêu khác, dùng whilessdel:

(defun C:mz2 (/ ss e data Z old new )
(setq ss (ssget '((0 . "TEXT"))))
(while (setq e (ssname ss 0))
(setq
data (entget e)
Z (atof (cdr (assoc 1 data)))
old (assoc 10 data)
new (list 10 (cadr old) (caddr old) Z)
)
(entmod (subst new old data))
(ssdel e ss)
)
)
  • 0

#4 bowxman

bowxman

    biết vẽ pline

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

Đã gửi 13 April 2007 - 07:43 AM

wá hay, wá vui
  • 0

#5 tranchan

tranchan

    biết lệnh break

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

Đã gửi 09 August 2008 - 08:38 AM

(defun C:mz2 (/ ss e data Z old new )
....
)


Cái này sao chọn text xong thì ko thấy gì nữa vậy...
  • 0