Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 vuducanh119

vuducanh119

    biết zoom

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

Đã gửi 20 August 2013 - 10:18 AM

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...am_tron_Hue.dwg


  • 0

#2 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 20 August 2013 - 12:05 PM

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é


  • 1

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#3 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 20 August 2013 - 01:35 PM

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è......


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

#4 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 20 August 2013 - 04:23 PM

Đ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)
)

  • 1

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#5 vuducanh119

vuducanh119

    biết zoom

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

Đã gửi 20 August 2013 - 07:13 PM

em cám ơn bác


  • 0

#6 vuducanh119

vuducanh119

    biết zoom

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

Đã gửi 20 August 2013 - 07:22 PM

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.


  • 0

#7 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 22 August 2013 - 07:59 AM

Đó 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 !!!


  • 1

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson