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  
vuducanh119

(Yêu cầu) Viết lisp xuất cao độ từ block

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

vuducanh119    0

Các bác cho em hỏi. Em có 1 file cao độ nền nhưng các cao độ chỉ là các block có chứa giá trị cao độ z. Chắc là do đưa thông số từ máy đo trắc đạc vào cad nên cao độ hiện là các dấu chấm tròn dạng block.

Nhưng hiện giờ yêu cầu của đồ án là cần phải hiện các cao độ đấy lên. Em mong có bác nào viết được lisp giúp em covert các block (có chứa giá trị cao độ trên) thành các text ghi cao độ nền.

Gần 1 tuần nay em đã lục lọi các cách convert chuyển block đó thành text trong các phần mềm HS, TOPO, CIVIL 3d rồi nhưng k được. Em cũng tìm các topic xuất cao độ thử vài lisp nhưng vẫn chưa được.

 

File của em đây :

 

http://www.mediafire.com/download/c3m7uln8lcq552f/Cot_Block_cham_tron_Hue.dwg

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
hochoaivandot    108

Thây yêu cầu cũng đơn giản nên mình viết nhanh cho bạn.

Tên lệnh vdc nhé.

 

(defun dxf (code e) (cdr (assoc code (entget e))))
(defun MakeText (string point height)
(entmake (list (cons 0 "TEXT") (cons 1 string) (cons 10 point) (cons 40 height)))
)
(defun C:vdc(/ h ss i e pt pt_Insert cd_String)
(setvar "cmdecho" 0)
(if (not h0) (setq h0 2.0))
(setq h (getreal (strcat "\nNhap chieu cao <" (rtos h0 2 2) ">:")))
(if (not h) (setq h h0) (setq h0 h))
(princ "\nChon block can ghi cao do")
(setq ss (ssget (list (cons 0 "INSERT"))))
(repeat (setq i (sslength ss))
(setq
e (ssname ss (setq i (1- i)))
pt (dxf 10 e)
pt_Insert (list (car pt) (cadr pt))
cd_String (rtos (last pt))
)
(MakeText cd_String pt_Insert h)
)
(setvar "cmdecho" 1)
(princ "\nViet boi Hoc hoai van dot")
(princ)
)

 

Nếu muốn ghi bao nhiêu số lẻ thì dùng lệnh UNITS để chọn nhé

  • Vote tăng 1

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
phamthanhbinh    3.123

Thây yêu cầu cũng đơn giản nên mình viết nhanh cho bạn.

Tên lệnh vdc nhé.

 

(defun dxf (code e) (cdr (assoc code (entget e))))

(defun MakeText (string point height)

(entmake (list (cons 0 "TEXT") (cons 1 string) (cons 10 point) (cons 40 height)))

)

(defun C:vdc(/ h ss i e pt pt_Insert cd_String)

(setvar "cmdecho" 0)

(if (not h0) (setq h0 2.0))

(setq h (getreal (strcat "\nNhap chieu cao <" (rtos h0 2 2) ">:")))

(if (not h) (setq h h0) (setq h0 h))

(princ "\nChon block can ghi cao do")

(setq ss (ssget (list (cons 0 "INSERT"))))

(repeat (setq i (sslength ss))

(setq

e (ssname ss (setq i (1- i)))

pt (dxf 10 e)

pt_Insert (list (car pt) (cadr pt))

cd_String (rtos (last pt))

)

(MakeText cd_String pt_Insert h)

)

(setvar "cmdecho" 1)

(princ "\nViet boi Hoc hoai van dot")

(princ)

)

 

Nếu muốn ghi bao nhiêu số lẻ thì dùng lệnh UNITS để chọn nhé

Hề hề hề,

Giá như bác cho thêm vào bộ lọc cái tên block thì sẽ đỡ bị xuất nhầm đối tượng hơn bác hè......

  • Vote tăng 1

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
hiepttr    523

Đang luyện nên mần đại cái này

Đưa lên đây để chờ đá :D :D :D

 

;dien cao do
(defun c:DCD( / i ss n ch o)
(setq ss (ssget (list (cons 2 "DCAOTH")))
	n (sslength ss)
	i 0)
(while (< i n)
(progn 
(setq ch (entget (ssname ss i))
	o (list (cadr (assoc 10 ch)) (caddr (assoc 10 ch))))
(if (= 0 (cdr (assoc 40 (tblsearch "Style" (getvar 'TEXTSTYLE)))))
(command ".text" "j" "c" o 2.5 0 (rtos (last (assoc 10 ch)) 2 2))
(command ".text" "j" "c" o 0 (rtos (last (assoc 10 ch)) 2 2)))
(setq i (+ 1 i))
))
(princ)
)
  • Vote tăng 1

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
vuducanh119    0

thật sự là em rất cám ơn bác. bác đã cứu vãn cho em 1 mối tình. em yêu 1 người con gái Huế. Và đồ án Tốt Nghiệp em chọn Huế để quy hoạch. mà k có cốt cao độ chuẩn ntn thì chắc em phải chuyển đề tài. em cám ơn bác rất nhiều.

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
hiepttr    523

Đó chỉ là làm theo yêu cầu

Còn xữ lý BV của bạn thì chắc ko cần đến Lisp phải viết thêm mà dùng express của cad là mần đc :D :D :D

1. Tạo block chỉ bằng 1 điểm, điểm chuẩn chọn ngay chính điểm đó

2. Replace ... để thay thế block vừa tạo vào vị trí block có tên DCAOTH trên BV

3. EX >>>> chon tất cả >>> đã có điểm >>> topo (hoặc nova) ... chơi đc tuốt !!!

  • Vote tăng 1

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  

×