Đến nội dung


Hình ảnh
- - - - -

Cao độ của đường LWPOLYLINE


  • Please log in to reply
7 replies to this topic

#1 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 04 June 2014 - 03:05 PM

Các bác cho em hỏi nhờ tý:

Trong Lisp có hàm nào lấy được cao độ của đường lwpolyline (lwpolyline có cao độ).

Quả là em có bài toán như sau:

Trong bản vẽ của em có rất nhiều đường đồng mức, đó là các đường lwpolyline có cao độ.

Giờ em muốn nhặt ra cao độ của từng đường để biên tập lại

Cụ thể những đường đồng mức 0,5 sẽ bỏ đi (50.5, 51.5 ....) giữ lại các đường có cao độ tròn 50, 51 ... ( thay bước đường đm 0.5 thành 1). rồi chọn đường đồng mức cái ....

Em dùng (setq ss (ssget '((0 . "LWPOLYLINE")))) để chọn tất cả các lwpolyline  rồi duyệt từng đối tượng bằng entget nhưng không biết thằng cao độ nó nằm ở chỗ nào cả?

Mong các bác chỉ giáo. 

http://www.cadviet.c.../123735_ddm.dwg

 

 


  • 0

#2 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 04 June 2014 - 04:16 PM

Bạn tham khảo cái này nhé

(setq ss (vlax-ename->vla-object (car(entsel"\nChon polyline: ")))) ;chon duong polyline

(setq pt (vlax-curve-getEndPoint ss)) ; lay toa do diem cuoi cua polyline

(setq z (caddr pt)) ; lay cao do z cua diem pt


  • 0

#3 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 04 June 2014 - 04:21 PM

Dùng entsel không được bác à vì như vậy chỉ chọn được 1 đối tượng mà em muốn khoanh 1 phát chọn tất cả các đường lwpolyline.


  • 0

#4 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 04 June 2014 - 04:27 PM

Bạn làm cách này được không nhé.

Từ các đường đồng mức có cao độ. Bạn dùng lisp dưới đây để ghi cao độ của Pline. 

Bạn sẽ nhập khoảng cách giữa các cao độ trên cùng 1 Pline.

Như vậy mỗi đường đồng mức ta đều có số liệu cao độ rồi. 

Từ số liệu này ta có thể chạy tạo lại đường đồng mức 1 m dễ dàng.

Code của bạn đây

(defun c:GDCPL( / olmode ss KCL h en CDPline n i Pnt1)
(vl-load-com)
(setvar "CMDECHO" 0)
(setq olmode (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq ss (ssget  (list (cons 0 "POLYLINE,LWPOLYLINE"))))
(setq KCL (getreal "\n Nhap khoang cach can ghi cao do:  "))
(setq h (getreal "\n Nhap chieu cao Text cao do:  "))

(foreach en (acet-ss-to-list ss)
  	(progn
		(setq CDPline (Length1  en))
		(setq n (fix (/ CDPline KCL)))
		(setq i 1)
		(while (<= i n)
			(setq pnt1 (vlax-curve-getPointAtDist en (* i KCL)))
			(MakeText pnt1 (rtos (caddr Pnt1) 2 2) h 0 "L") 
		  	(setq i (1+ i))
		)
	  )
)
(setvar "osmode" olmode)
(princ)
)
(defun Length1 (e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
  
(defun MakeText (point string Height Ang justify / Lst); Ang: Radial
(setq Lst (list '(0 . "TEXT")
								(cons 10 point)
								(cons 40 Height)
								(cons 1 string)
								(if Ang (cons 50 Ang))
								
								
		)
	justify (strcase justify)
)
(cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))
			((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))
			((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))
			((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3)))))
			((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3)))))
			((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3)))))	
			((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2)))))
			((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2)))))
			((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2)))))
			((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1)))))
			((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1)))))
			((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))))
(entmakex Lst)
)


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#5 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 04 June 2014 - 05:43 PM

Cảm ơn bác thanhduan2407 nhiều.

Em rất mù mờ về mấy hàm vl nhưng nhờ cái lsp của bác mà em xác định được cao độ của đường pline đó bằng cách ăn cắp cái hàm của bác để thành cái của em:

(setq caodo (last (vlax-curve-getPointAtDist valname 0))) 

Một lần nữa cảm ơn bác nhiều.


  • 0

#6 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 04 June 2014 - 06:01 PM

Bạn dùng dxf code 38 để biết cao độ của pline.

(defun c:tmp()
  (mapcar '(lambda(x) (entmake (list '(0 . "TEXT")
(cons 10 (setq tm (vlax-curve-getstartPoint (vlax-ename->vla-object x))))
(cons 11 tm) (cons 1 (rtos (cdr (assoc 38 (entget x))))) (cons 40 (getvar 'textsize)))))
(acet-ss-to-list (ssget)))
)

  • 1

#7 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 05 June 2014 - 07:59 AM

...................

Cụ thể những đường đồng mức 0,5 sẽ bỏ đi (50.5, 51.5 ....) giữ lại các đường có cao độ tròn 50, 51

... 

http://www.cadviet.c.../123735_ddm.dwg

Tham khảo Lisp chuyển các LwPolyline có cao độ là số thập phân về layer "0", các LwPolyline có cao độ là số nguyên không thay đổi.

(defun C:fpl(/ ele)
  (if(ssget "_:L" (list (cons 0 "LWPOLYLINE")))
    (vlax-for e (vla-get-activeSelectionSet (vla-get-ActiveDocument(vlax-get-acad-object)))
      (if (> (abs(- (setq ele (vla-get-elevation e)) (fix ele))) 0)
	(vla-put-layer e "0")) ))
  (princ))

  • 1

#8 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 05 June 2014 - 08:05 AM

Cảm ơn bác Tot77, cái mã dxf 38 này mà em tìm mãi không ra.


  • 0