Đến nội dung


Hình ảnh
- - - - -

Đánh cao độ cho mặt cắt


  • Please log in to reply
5 replies to this topic

#1 hung_xu20032000

hung_xu20032000

    biết vẽ ellipse

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

Đã gửi 09 October 2014 - 11:20 PM

Mình có mặt cắt được trích xuất ra từ hs. Nhưng mình không lấy hết chiều dài trong 1 mặt cắt. Chỉ cần trích xuất 1 đoạn trong 1 mặt cắt thôi. Như thế phải đánh lại cao độ rất mất thời gian. Bác bác giúp e với. Chỉ cần khai báo điểm gốc là A hoặc B (có cao độ là 80...) thì sẽ tự điền text (chiều cao text, phải được tùy chọn) được cao độ của đường polyline ( theo chiều cao là 10m chiều cao có thể thay đổi) theo cao độ thành 90, 100.... . Bản vẽ như e gửi kèm. 

http://www.cadviet.c..._cad_viet_2.dwg


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 10 October 2014 - 01:20 PM

Bạn dùng cái này, quét các line rồi chọn 1 text cao độ chuẩn (ở đây là 80).

Trước khi chạy lsp bạn nên purge để xóa bớt các line trùng nhau, vì cứ 1 line sẽ có 2 text 2 bên.

(defun c:dac ()
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (defun viet (nd pt tr)
    (entmake (list '(0 . "TEXT") (cons 10 pt) (cons 11 pt) (cons 71 0) (cons 40 cao)
  (cons 73 0) (cons 72 (if tr 2 0)) (cons 1 nd))) 
  )
  (defun chan(x n) (* n (if (< (rem x n) (* 0.5 n)) (fix (/ x n 1.)) (1+ (fix (/ x n 1.))))))
  
  (prompt "\nChon line:")
  (setq ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LINE"))))))
ss (vl-remove-if-not '(lambda (x) (equal (cadr (dxf 10 x)) (cadr (dxf 11 x)) 1)) ss)
ss0 (cadr (dxf 10 (car (vl-sort ss '(lambda (x y) (< (cadr (dxf 10 x)) (cadr (dxf 10 y))))))))
tx (car (entsel "\nChon Text cao do chuan :"))
tt1 (chan (atof (dxf 1 tx)) 10)
cao (dxf 40 tx)
  )
  (foreach v ss
    (if (> (vlax-curve-getDistAtParam v (vlax-curve-getEndParam v)) 5)
      (progn
(setq nd (itoa (chan (+ tt1 (- (cadr (dxf 10 v)) ss0)) 10))
     tt (vl-sort (list (dxf 10 v) (dxf 11 v)) '(lambda (x y) (< (car x) (car y)))))       
(viet nd (car tt) t)
(viet nd (last tt) nil)
      )
   )
  ) (princ)
)

  • 1

#3 hung_xu20032000

hung_xu20032000

    biết vẽ ellipse

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

Đã gửi 10 October 2014 - 06:47 PM

Cảm ơn Tot 77 rất nhiều. Đúng ý mình rồi. Nhưng có thể làm trên polyline được không? và cho text cách đường line 1 khoảng 1 mm hoặc nhiều hơn thì sửa ở đâu ạ


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 10 October 2014 - 09:01 PM

Cái này dùng cho cả line và pline, nhưng chỉ với pline 1 đoạn thẳng với 2 đỉnh mà thôi.

Còn chữ thì tôi cho cách 5 giống hình bên phải, nếu muốn sửa thì thay số 5 ở gần cuối (5 và -5).

(defun c:dac ()
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (defun viet (nd pt tr)
    (entmake (list '(0 . "TEXT") (cons 10 pt) (cons 11 pt) (cons 71 0) (cons 40 cao)
  (cons 73 0) (cons 72 (if tr 2 0)) (cons 1 nd))) 
  )
  (defun chan(x n) (* n (if (< (rem x n) (* 0.5 n)) (fix (/ x n 1.)) (1+ (fix (/ x n 1.))))))
  
  (prompt "\nChon line hoac pline:")
  (setq ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*LINE"))))))
ss (vl-remove-if-not '(lambda (x) (and (or (= 1 (vlax-curve-getEndParam x)) (= "LINE" (dxf 0 x)))
      (equal (cadr (vlax-curve-getStartpoint x))
     (cadr (vlax-curve-getEndpoint x)) 1))) ss)
ss0 (cadr (dxf 10 (car (vl-sort ss '(lambda (x y) (< (cadr (dxf 10 x)) (cadr (dxf 10 y))))))))
tx (car (entsel "\nChon Text cao do chuan :"))
tt1 (chan (atof (dxf 1 tx)) 10)
cao (dxf 40 tx)
  )
  (foreach v ss
    (if (> (vlax-curve-getDistAtParam v (vlax-curve-getEndParam v)) 5)
      (progn
(setq nd (itoa (chan (+ tt1 (- (cadr (dxf 10 v)) ss0)) 10))
     tt (vl-sort (list (vlax-curve-getStartpoint v) (vlax-curve-getEndpoint v))
 '(lambda (x y) (< (car x) (car y)))))
(viet nd (polar (car tt) 0 -5) t)
(viet nd (polar (last tt) 0 5) nil)
      )
   )
  ) (princ)
)

  • 1

#5 hung_xu20032000

hung_xu20032000

    biết vẽ ellipse

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

Đã gửi 10 October 2014 - 11:04 PM

Cảm ơn bác rất 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 10 October 2014 - 11:09 PM

Bạn thêm 1 dòng (vl-load-com) ở đầu file.
  • 0