Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
van tu

TÍNH ĐỘ DỐC

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

Nhờ anh em cadviet viết hộ lisp tính độ dốc: mình co file đính kèm
http://www.mediafire.com/?phlcktypl4x89q8

Hề hề hề,

Chào bạn Van tu,

Mình đã xem bản vẽ của bạn, song chưa hiểu rõ lắm. Bạn nói bấm trực tiếp vào bản vẽ tức là chọn trực tiếp vào các text trong các vòng tròn xanh hay là chọn vào đường tím nằm xiên góc có ghi độ dốc đó.

Yêu cầu của bạn không quá khó, song cần hiểu rõ mới làm đúng được bạn ạ.....

Chúc bạn vui.

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

Mình viết thử cái này xem đúng ý bạn không nhé. Chọn các số lần lượt như trong biểu thức của bạn gửi nhé!!!

(defun c:dd (/ txt1 txt2 txt3 txt4 nametxt1 nametxt2 nametxt3 nametxt4 kqua obj)
(vl-load-com)
(setq txt1 (car (entsel "\nChon text1:"))
  nametxt1 (entget txt1)
     txt2 (car(entsel "\nChon text2:"))
  nametxt2 (entget txt2)
  txt3 (car(entsel "\nChon text3:"))
  nametxt3 (entget txt3)
  txt4 (car(entsel "\nChon text4:"))
  nametxt4 (entget txt4)	  
kqua 0)
;=======
(setq
sochia (cond (sochia) (166))
sochiaold sochia
sochia (getreal (strcat "\nVao he so chia <"(rtos sochiaold 2 2)">: "))
)
(if (= sochia nil) (setq sochia sochiaold))
;=======

(setq
kqua 
(- (- (atof (cdr (assoc 1 nametxt1))) (atof (cdr (assoc 1 nametxt2))))
  (- (atof (cdr (assoc 1 nametxt3))) (atof (cdr (assoc 1 nametxt4))))
)
)
(setq kqua (/ kqua sochia))
(princ kqua)

(setq obj (vlax-ename->vla-object
(car (entsel "\nChon text de ghi ket qua:"))
)
)
(vla-put-TextString obj (strcat " "(rtos kqua 2 2)" %"))
;(vla-put-TextString obj (strcat " "(rtos (* kqua 100) 2 2)" %"))
(princ)
)

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
Mình viết thử cái này xem đúng ý bạn không nhé. Chọn các số lần lượt như trong biểu thức của bạn gửi nhé!!!

(defun c:dd (/ txt1 txt2 txt3 txt4 nametxt1 nametxt2 nametxt3 nametxt4 kqua obj)
(vl-load-com)
(setq txt1 (car (entsel "\nChon text1:"))
  nametxt1 (entget txt1)
     txt2 (car(entsel "\nChon text2:"))
  nametxt2 (entget txt2)
  txt3 (car(entsel "\nChon text3:"))
  nametxt3 (entget txt3)
  txt4 (car(entsel "\nChon text4:"))
  nametxt4 (entget txt4)	  
kqua 0)
;=======
(setq
sochia (cond (sochia) (166))
sochiaold sochia
sochia (getreal (strcat "\nVao he so chia : "))
)
(if (= sochia nil) (setq sochia sochiaold))
;=======

(setq
kqua 
(- (- (atof (cdr (assoc 1 nametxt1))) (atof (cdr (assoc 1 nametxt2))))
  (- (atof (cdr (assoc 1 nametxt3))) (atof (cdr (assoc 1 nametxt4))))
)
)
(setq kqua (/ kqua sochia))
(princ kqua)

(setq obj (vlax-ename->vla-object
(car (entsel "\nChon text de ghi ket qua:"))
)
)
(vla-put-TextString obj (strcat " "(rtos kqua 2 2)" %"))
;(vla-put-TextString obj (strcat " "(rtos (* kqua 100) 2 2)" %"))
(princ)
)

Chào bạn nguyentuyen6

Vì sao bạn không chọn biến sochia giống như đã làm với các số khác vì mình thấy trên bản vẽ của bạn van tu con số này cũng đã được cho trước rồi mà????

Kết quả khi tính theo phần trăm thì cái dòng code (vla-put-TextString ...... ) thứ hai của bạn mới là đúng.

  • 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
Chào bạn nguyentuyen6

Vì sao bạn không chọn biến sochia giống như đã làm với các số khác vì mình thấy trên bản vẽ của bạn van tu con số này cũng đã được cho trước rồi mà????

Kết quả khi tính theo phần trăm thì cái dòng code (vla-put-TextString ...... ) thứ hai của bạn mới là đúng.

Chào bác thanhbinh!!

Cái biến sochia e làm như vậy vì nghĩ : Có khi cái biến ấy chỉ cần nhập 1 lần rồi dùng chung cho tất cả các cái sau. Thì làm như vậy sẽ đỡ mất công pick nhiều lần, hi`hi`. E ko làm cái trắc ngang trăc dọc bao h nên cũng mù tịt chẳng hiểu gì về nó cả.

Còn cái tính % thì em cũng nghĩ là dòng thứ 2 mới đúng nên vẫn để đó. Tại cái biểu thức bạn vantu gửi e cũng chả thấy cái x100 ở đâu nên cứ để tạm vào cho nó đúng yêu cầu. Đến khi bạn vantu test thử lisp này rồi cho ý kiến cũng dễ để sửa bác ạ.

  • 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

Nhờ mấy anh viết dùm em cái lisp tính độ dốc và ghi ra luôn bao gồm cả kí hiêu.

Số liệu đầu vào: text cao độ ở hai đầu.

Chiều dài thì pick trên bản vẽ.

yêu cầu:

Khi đánh lệnh này thì buộc anh phải nhập cao độ điểm dầu

nhập cao độ điểm cuối

nhập chiều dài của doạn cần ghi độ dốc bằng cách nhập số trên bàn phím hoặc pick hai điểm và lấy chiều dài giữa hai đoạn pick.

cho phép chọn bao nhiêu số lẻ sau dấu thập phân (ví dụ: 0,001 hoặc 0,01 vv)

cu the nhu hinh sau:

http://ng6.upanh.com/b5.s1.d5/50ff18e8c671a2d67a766f45810b591e_39499236.1.120x1.bmp

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

Có 1 thắc mắc muốn hỏi bạn: sao bạn phải nhập nhiều thứ thế? (gồm: nhập 2 text, nhập chiều dài hoặc pick 2 điểm). Có thể chỉ cần pick lên đường thẳng là đã biết độ dốc (không phải dóc) rồi mà?

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

Bởi vì cái này em làm trên bình đồ, nó chỉ có text cao độ, còn đường thẳng này có cao độ z bằng 0. Anh xem thêm hình em post

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

Bởi vì cái này em làm trên bình đồ, nó chỉ có text cao độ, còn đường thẳng này có cao độ z bằng 0. Anh xem thêm hình em post

Bạn có thể gởi file cad lên được không, để còn hiểu rõ hơn? Tôi đang viết giúp bạn nhưng nhìn file hình ảnh thì code sẽ không hay.

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

http://www.mediafire.com/?jyafkj93n5iwh39

ĐÂY LÀ FILE CAD . THỰC TẾ LÀ EM ĐANG THIẾT KẾ NÚT. ANH XEM MỘT SỐ ĐỘ DỐC EM ĐÃ TÍNH TAY VÀ GHI VÀO NHƯ TRÊN.

SỐ LIỆU ĐẦU VÀO :

 

+ CAO ĐỘ ĐIỂM ĐẦU, ĐIỂM CUỐI DỨOI DẠNG TEXT (LÀM SAO ĐỂ PICK CHỌN TEXT)

 

+ CHIỀU DÀI ĐOẠN CẦN TÍNH ĐỘ DỐC( CÓ THỂ LÀ PICK HAI ĐIỂM ĐỂ XÁC ĐỊNH CHIỀU THEO ĐOẠN THẲNG HOẶC CÓ THỂ CHỌN ĐỐI TƯỢNG LÀ LINE HOẶC PL VÀ CHƯƠNG TRÌNH TỰ XÁC ĐỊNH ĐƯỢC CHIỀU DÀI CỦA ĐỐI TƯỢNG (CÓ THỂ LÀ ĐƯỜNG THẰNG HOẶC ĐƯỜNG CONG (ĐỐI VỚI TRƯỜNG HỢP XÁC ĐỊNH ĐỘ DÓC MÉP BÓ VỈA NÓ LÀ ĐƯỜNG CONG)

 

+ TÙY CHỌN SỐ LẺ SAU DẤU THẬP PHÂN LÀ 2 HOẶC3...

 

+ CÓ KÝ HIỆU LÀ % VÀ HƯỚNG DỐC TỪ CAO XUỐNG THẤP. GIỐNG NHƯ BẢN VẼ CAD EM GỬI.

CHÚC NĂM MỚI THÀNH CÔNG, VUI VẺ VÀ SÔNGS KHỎE.

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

EM MUỐN KHI DÙNG LỆNH NÀY THÌ CAD SẼ HỎI NHỮNG CÂU LỆNH SAU:

- CHỌN TEXT CAO ĐỘ ĐIỂM ĐẦU:

-CHỌN TEXT CAO ĐỘ ĐIỂM CUỐI:

- XÁC ĐỊNH CHIỀU DÀI CẦN TÍNH ĐỘ DỐC:

- SỐ LẺ THẬP PHÂN:

- VỊ TRÍ ĐIỀN ĐỘ ĐỐC: CÁI NÀY CÓ THỂ MẶC ĐỊNH LÀ ĐIỀN Ở GIỮA KHOẢNG CÁCH MÌNH CHỌN

- LAYER, CHIỀU CAO (THUỘC TÍNH CỦA ĐỐI TƯỢNG ĐỘ DỐC THEO TEXT ĐÃ CHỌN)

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

Đây bạn! Chú ý: vị trí và kích cỡ mũi tên tôi chỉ tạm thiết kế theo 1 tỉ lệ với chiều cao text, bạn có thể sửa lại theo ý mình.

;Doan Van Ha - CADViet.com - Ngay 31/12/2011
;Muc dich: Tinh va ghi do doc.
(defun C:HA( / ent1 ent2 ent3 ent4 obj cd pg h sty lop doc pg1 pg2 pt1 ptg pt2)
(BAT_DAU)
(setq ent1 (entsel "\nPick Text cao do diem dau: "))
(setq ent2 (entsel "\nPick Text cao do diem cuoi: "))
(setq ent3 (entsel "\nPick len 1 Text mau de lay thong tin Text: "))
(setq ent4 (entsel "\nPick duong can lay chieu dai va ghi do doc: "))
(or *stp* (setq *stp* 2))
(setq stp (getint (strcat "\nSo chu so thap phan <" (itoa *stp*) ">: ")))
(if (not stp) (setq stp *stp*) (setq *stp* stp))
(initget "T P") (setq huong (getkword "\nChon huong ve do doc [Trai->phai/Phai->trai]: "))
(if (and ent1 ent2 ent3 ent4 stp)
 (progn
  (setq obj (vlax-ename->vla-object (car ent4)))
  (setq cd (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)))
  (setq pg (vlax-curve-getPointAtDist obj (/ cd 2)))
  (setq goc (angle '(0 0 0) (vlax-curve-getFirstDeriv obj (vlax-curve-getParamAtPoint obj pg))))
  (cond ((>= (* 1 pi) goc (* 0.5 pi)) (setq goc (- goc pi)))
         	((>= (* 1.5 pi) goc pi) (setq goc (- goc pi)))
         	((>= (* 2 pi) goc (* 1.5 pi)) (setq goc (- goc (* 2 pi)))))
  (setq h (cdr (assoc 40 (entget (car ent3)))))
  (setq sty (cdr (assoc 7 (entget (car ent3)))))
  (setq lop (cdr (assoc 8 (entget (car ent3)))))
  (setq doc (abs (/ (- (atof (cdr (assoc 1 (entget (car ent1))))) (atof (cdr (assoc 1 (entget (car ent2)))))) cd)))
  (setq pg1 (polar pg (+ goc (/ pi 2)) (* 1.5 h)))
  (setq pg2 (polar pg1 (+ goc (/ pi 2)) (* 1.5 h)))
  (cond ((and (> goc 0) (= huong "T")) (setq gocL goc))
         	((and (> goc 0) (= huong "P")) (setq gocL (+ pi goc)))
         	((and (< goc 0) (= huong "T")) (setq gocL goc))
         	((and (< goc 0) (= huong "P")) (setq gocL (+ pi goc))))
  (setq pt1 (polar pg1 (+ gocL pi) (* 3 h)) ptg (polar pt1 gocL (* 5 h)) pt2 (polar ptg gocL (* 1 h)))
  (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
  (command "pline" pt1 ptg "w" (* 0.2 h) 0 pt2 "")
  (command "text" "s" sty "j" "m" pg2 h (/ (* 180 goc) pi) (strcat (rtos doc 2 stp) "%"))
  (command "change" (entlast) "" "p" "la" lop "")))
(KET_THUC)
(princ))
(defun BAT_DAU()
(vl-load-com)
(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)))
(vla-StartUndoMark AcDoc)
(setq err *error* *error* KHI_LOI))
(defun KET_THUC()
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(setq *error* err))
(defun KHI_LOI(msg)
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(redraw)
(command "u")
(princ (strcat "\n" msg ", Reset System Variables\n"))
(setq *error* err))

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

Đây bạn! Chú ý: vị trí và kích cỡ mũi tên tôi chỉ tạm thiết kế theo 1 tỉ lệ với chiều cao text, bạn có thể sửa lại theo ý mình.

;Doan Van Ha - CADViet.com - Ngay 31/12/2011
;Muc dich: Tinh va ghi do doc.
(defun C:HA( / ent1 ent2 ent3 ent4 obj cd pg goc h sty lop doc pg1 pg2 pt1 ptg pt2)
(BAT_DAU)
(setq ent1 (car (entsel "\nPick Text cao do diem dau: ")))
(setq ent2 (car (entsel "\nPick Text cao do diem cuoi: ")))
(setq ent3 (car (entsel "\nPick len 1 Text mau de lay thong tin Text: ")))
(setq ent4 (car (entsel "\nPick duong can ghi do doc: ")))
(or *stp* (setq *stp* 2))
(setq stp (getint (strcat "\nSo chu so thap phan <" (itoa *stp*) ">: ")))
(if (not stp) (setq stp *stp*) (setq *stp* stp))
(if (and ent1 ent2 ent3 ent4)
 (progn
  (setq obj (vlax-ename->vla-object ent4))
  (setq cd (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)))
  (setq pg (vlax-curve-getPointAtDist obj (/ cd 2)))
  (setq goc (angle '(0 0 0) (vlax-curve-getFirstDeriv obj (vlax-curve-getParamAtPoint obj pg))))
  (setq h (cdr (assoc 40 (entget ent3))))
  (setq sty (cdr (assoc 7 (entget ent3))))
  (setq lop (cdr (assoc 8 (entget ent3))))
  (setq doc (/ (- (atof (cdr (assoc 1 (entget ent1)))) (atof (cdr (assoc 1 (entget ent2))))) cd))
  (setq pg1 (polar pg (+ goc (/ pi 2)) (* 1.5 h)))
  (setq pg2 (polar pg1 (+ goc (/ pi 2)) (* 1.5 h)))
  (setq pt1 (polar pg1 (+ goc pi) (* 3 h)) ptg (polar pt1 goc (* 5 h)) pt2 (polar ptg goc (* 1 h)))
  (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
  (command "pline" pt1 ptg "w" (* 0.2 h) 0 pt2 "")
  (command "text" "s" sty "j" "m" pg2 h (/ (* 180 goc) pi) (strcat (rtos doc 2 stp) "%"))
  (command "change" (entlast) "" "p" "la" lop "")))
(KET_THUC)
(princ))
(defun BAT_DAU()
(vl-load-com)
(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)))
(vla-StartUndoMark AcDoc)
(setq err *error* *error* KHI_LOI))
(defun KET_THUC()
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(setq *error* err))
(defun KHI_LOI(msg)
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(redraw)
(command "u")
(princ (strcat "\n" msg ", Reset System Variables\n"))
(setq *error* err))

Tue_NV có góp ý chút :

Dòng

(if (and ent1 ent2 ent3 ent4)

(progn

......

nên đưa lên trên để kiểm tra các biến ent1, ent2, ent3 và ent4 đồng thời kiểm tra cả biến stp luôn

(setq ent1 (car (entsel "\nPick Text cao do diem dau: ")))(setq ent2 (car (entsel "\nPick Text cao do diem cuoi: ")))(setq ent3 (car (entsel "\nPick len 1 Text mau de lay thong tin Text: ")))(setq ent4 (car (entsel "\nPick duong can ghi do doc: ")))(or *stp* (setq *stp* 2))(setq stp (getint (strcat "\nSo chu so thap phan <" (itoa *stp*) ">: ")))(if (not stp) (setq stp *stp*) (setq *stp* stp))

Nếu 1 trong các biến này không được nhập hoặc chọn thì lệnh sẽ không được thực thi.

Vậy sẽ hay hơn.

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

Cám ơn bác đã góp ý. Không biết ý bác có phải như code dưới đây không, chứ nếu vậy thì kẹt thằng stp khi enter để lấy mặc định. Với lại, nếu viết cho thật chỉn chu thì còn nhiều điều cần bổ sung nữa như: entsel không phải text, stp âm, UCS... Tất nhiên cũng làm được thôi, bác hè!

(if (and
  (setq ent1 (car (entsel "\nPick Text cao do diem dau: ")))
  (setq ent2 (car (entsel "\nPick Text cao do diem cuoi: ")))
  (setq ent3 (car (entsel "\nPick len 1 Text mau de lay thong tin Text: ")))
  (setq ent4 (car (entsel "\nPick duong can ghi do doc: ")))
  (or *stp* (setq *stp* 2))
  (setq stp (getint (strcat "\nSo chu so thap phan <" (itoa *stp*) ">: ")))
  (if (not stp) (setq stp *stp*) (setq *stp* stp)))
 (progn
...

  • 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

Anh ơi sao cái không thấy chỗ chọn chiều dài , nếu không có chiều dài làm sao xác định được độ dốc của đường mình cần tìm độ dốc.

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

Ở đây hình như anh xác định chiều dài dựa vào hai điểm text như thế là không được chiều dài phải do mình chọn hoặc pick đối tượng line hoặc pl.

hướng của chiều dốc là từ cao đến thấp

độ dốc là không âm

công thức tính độ dốc:

| cao độ điểm đầu - cao độ điểm cuối |*100/chiều dài của đoạn mình cần tìm độ dốc

chú ý có dấu trị tuyệt đối đó anh

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

1. Chiều dài: đã lấy chiều dài của curve được chọn rồi mà.

2. Giá trị tuyệt đối: đã sửa.

3. Rất khó để đáp ứng y/c hướng dốc vì các text cao độ của bạn không có quy luật liên quan với curve, hơn nữa nó lại có thể là đường cong. Tôi làm thêm cho bạn tuỳ chọn hướng vẽ.

Link vẫn như cũ.

  • 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

Anh có thể viết thêm pick để chọn hướng vẽ độ dốc được không. Sau khi chọn số thập phân sẽ hỏi pick hai điểm để xác định vị trí đặc kí hiệu dốc.

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

Anh có thể viết thêm pick để chọn hướng vẽ độ dốc được không. Sau khi chọn số thập phân sẽ hỏi pick hai điểm để xác định vị trí đặc kí hiệu dốc.

Càng ngày bạn càng làm phức tạp bài toán.

"Anh có thể viết thêm pick để chọn hướng vẽ độ dốc được không. Sau khi chọn số thập phân sẽ hỏi pick hai điểm để xác định vị trí đặc kí hiệu dốc"

Câu này thật khó hiểu!

Còn về hướng dốc, tôi đã đặt cho bạn 2 tuỳ chọn: từ Trái qua phải thì nhập T, từ Phải qua trái thì nhập P.

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

bản vẽ của em có tl là 1/200 nên chiều khi em pick chọn đối tượng thì nó không hiểu đúng chiều dài mong anh sửa cho chọn tỉ lệ bản vẽ. Anh xem trong bản vẽ cad em đã gởi khi tính độ dốc thì không đúng như khi tính tay.

Mà hình như anh thiếu nhân 100 nên độ dốc nhỏ hơn 100 lần so với thực tế. cảm ơn

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

bản vẽ của em có tl là 1/200 nên chiều khi em pick chọn đối tượng thì nó không hiểu đúng chiều dài mong anh sửa cho chọn tỉ lệ bản vẽ. Anh xem trong bản vẽ cad em đã gởi khi tính độ dốc thì không đúng như khi tính tay.

Mà hình như anh thiếu nhân 100 nên độ dốc nhỏ hơn 100 lần so với thực tế. cảm ơn

 

Đây bạn! Pick chọn đối tượng để lấy chiều dài là ý ban đầu của bạn.

;Doan Van Ha - CADViet.com - Ngay 31/12/2011
;Muc dich: Tinh va ghi do doc.
(defun C:HA( / ent1 ent2 ent3 ent4 obj cd pg h sty lop doc pg1 pg2 pt1 ptg pt2 goc gocL)
(BAT_DAU)
(setq ent1 (entsel "\nPick Text cao do diem dau: "))
(setq ent2 (entsel "\nPick Text cao do diem cuoi: "))
(setq ent3 (entsel "\nPick len 1 Text mau de lay thong tin Text: "))
(setq ent4 (entsel "\nPick duong can lay chieu dai va ghi do doc: "))
(or *stp* (setq *stp* 2))
(setq stp (getint (strcat "\nSo chu so thap phan <" (itoa *stp*) ">: ")))
(if (not stp) (setq stp *stp*) (setq *stp* stp))
(or *tlv* (setq *tlv* 200))
(setq tlv (getint (strcat "\nTi le ban ve <" (itoa *tlv*) ">: ")))
(if (not tlv) (setq tlv *tlv*) (setq *tlv* tlv))
(initget "T P") (setq huong (getkword "\nChon huong ve do doc [Trai->phai/Phai->trai]: "))
(if (and ent1 ent2 ent3 ent4 stp tlv)
 (progn
  (setq obj (vlax-ename->vla-object (car ent4)))
  (setq cd (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)))
  (setq pg (vlax-curve-getPointAtDist obj (/ cd 2)))
  (setq goc (angle '(0 0 0) (vlax-curve-getFirstDeriv obj (vlax-curve-getParamAtPoint obj pg))))
  (cond ((>= (* 1 pi) goc (* 0.5 pi)) (setq goc (- goc pi)))
         	((>= (* 1.5 pi) goc pi) (setq goc (- goc pi)))
         	((>= (* 2 pi) goc (* 1.5 pi)) (setq goc (- goc (* 2 pi)))))
  (setq h (cdr (assoc 40 (entget (car ent3)))))
  (setq sty (cdr (assoc 7 (entget (car ent3)))))
  (setq lop (cdr (assoc 8 (entget (car ent3)))))
  (setq doc (abs (* 100 (/ 1000.0 tlv) (/ (- (atof (cdr (assoc 1 (entget (car ent1))))) (atof (cdr (assoc 1 (entget (car ent2)))))) cd))))
  (setq pg1 (polar pg (+ goc (/ pi 2)) (* 1.5 h)))
  (setq pg2 (polar pg1 (+ goc (/ pi 2)) (* 1.5 h)))
  (cond ((and (>= goc 0) (= huong "T")) (setq gocL goc))
         	((and (>= goc 0) (= huong "P")) (setq gocL (+ pi goc)))
         	((and (< goc 0) (= huong "T")) (setq gocL goc))
         	((and (< goc 0) (= huong "P")) (setq gocL (+ pi goc))))
  (setq pt1 (polar pg1 (+ gocL pi) (* 3 h)) ptg (polar pt1 gocL (* 5 h)) pt2 (polar ptg gocL (* 1 h)))
  (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
  (command "pline" pt1 ptg "w" (* 0.2 h) 0 pt2 "")
  (command "text" "s" sty "j" "m" pg2 h (/ (* 180 goc) pi) (strcat (rtos doc 2 stp) "%"))
  (command "change" (entlast) "" "p" "la" lop "")))
(KET_THUC)
(princ))
(defun BAT_DAU()
(vl-load-com)
(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)))
(vla-StartUndoMark AcDoc)
(setq err *error* *error* KHI_LOI))
(defun KET_THUC()
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(setq *error* err))
(defun KHI_LOI(msg)
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(redraw)
(command "u")
(princ (strcat "\n" msg ", Reset System Variables\n"))
(setq *error* err))

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

Anh hướng dẫn thêm chỗ chọn tỉ lệ bản vẽ dùm em: VD nếu tl bản vẽ của em là 1/200 thì em nhập vào chỗ chọn tỉ lệ là 200 phải không hay sao. Nếu mà là nhập 200 thì kết quả ra không đúng như khi em tính tay. Anh xem kiểm tra lại trên bản vẽ em đã gửi. Một số độ dốc em đã tính tay có ghi trên đó. Hình như anh thiếu nhân 100 nên kết quả ra rất nhỏ

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

Anh hướng dẫn thêm chỗ chọn tỉ lệ bản vẽ dùm em: VD nếu tl bản vẽ của em là 1/200 thì em nhập vào chỗ chọn tỉ lệ là 200 phải không hay sao. Nếu mà là nhập 200 thì kết quả ra không đúng như khi em tính tay. Anh xem kiểm tra lại trên bản vẽ em đã gửi. Một số độ dốc em đã tính tay có ghi trên đó. Hình như anh thiếu nhân 100 nên kết quả ra rất nhỏ

Bạn upload bản vẽ trực tiếp lên Cadviet, chứ qua một web trung gian tôi không mở được. Tỉ lệ 1/200 thì nhập 200. Đã nhân 100.

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  

×