Chuyển đến nội dung
Diễn đàn CADViet
ECO

"[Yêu cầu] Nhờ viết Lisp ghi chiều dài - độ dốc, hướng dốc

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

Xin lỗi bác phamthanhbinh vì bây giờ mới trả lời thắc mắc của bác:

1.       Khoảng cách từ vị trí đặt block c đến các text là cố định, nó được chạy từ một file trắc dọc được tính toán trên excel, tất cả các bản vẽ đều như thế, không đổi, khoảng cách các hàng =8

2.       Cốt mặt đất và cao độ miệng hố ga là một, vì miệng hố ga bặt buộc phải bám sát mặt đất

3.       Vị trí này chỉ là vấn đề trình bày thôi, vì trong nhiều trường hợp có nhiều hiện vật mình không thể để tên hố ga và cao độ gần nhau được.

4.       Mình thống nhất với ý a, là đoạn nằm xiên góc sẽ được vẽ khi insert thuộc tính vì trên bình đồ không phải vị trí nào cũng có thể đặt được

5.       Việc thể hiện tọa độ thì còn phụ thuộc vào yêu cầu cầu từng công trình, có chỗ yêu cầu có chỗ không. Việc xác định vị trí đặt hố ga là dựa vào từng vị trí cụ thể và kinh nghiệm của người thiết kế, không thể có lisp nào thay thế được. 

Việc tạo block thuộc tính format cũng không có gì đặc biệt đâu

Mong bác giúp đỡ

 http://www.cadviet.com/upfiles/3/10114_ghi_chu_ga.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

Xin lỗi bác phamthanhbinh vì bây giờ mới trả lời thắc mắc của bác:

1.       Khoảng cách từ vị trí đặt block c đến các text là cố định, nó được chạy từ một file trắc dọc được tính toán trên excel, tất cả các bản vẽ đều như thế, không đổi, khoảng cách các hàng =8

2.       Cốt mặt đất và cao độ miệng hố ga là một, vì miệng hố ga bặt buộc phải bám sát mặt đất

3.       Vị trí này chỉ là vấn đề trình bày thôi, vì trong nhiều trường hợp có nhiều hiện vật mình không thể để tên hố ga và cao độ gần nhau được.

4.       Mình thống nhất với ý a, là đoạn nằm xiên góc sẽ được vẽ khi insert thuộc tính vì trên bình đồ không phải vị trí nào cũng có thể đặt được

5.       Việc thể hiện tọa độ thì còn phụ thuộc vào yêu cầu cầu từng công trình, có chỗ yêu cầu có chỗ không. Việc xác định vị trí đặt hố ga là dựa vào từng vị trí cụ thể và kinh nghiệm của người thiết kế, không thể có lisp nào thay thế được. 

Việc tạo block thuộc tính format cũng không có gì đặc biệt đâu

Mong bác giúp đỡ

 http://www.cadviet.com/upfiles/3/10114_ghi_chu_ga.dwg

Hề hề hề,

Bạn hãy dùng thử lisp dưới đây với một số lưu ý như sau:

1/- Lisp được viết dựa trên kết cấu của trắc dọc mà bạn đã gửi. nếu bạn sử dụng kết cấu trắc dọc này khác, có thể lisp sẽ chạy sai do khoảng cách từ block c tới các cao độ tương ứng thay đổi. Khi đó bạn cần thay đổi các thông số này trong lisp cho phù hợp bạn nhé. Cụ thể ở trắc dọc bạn gửi thì khoảng cách từ tâm block c đến tâm của cao độ mặt đất là khoảng 50 và đến tâm của cao độ dáy mương là 40.

2/- Lisp sử dụng block thuộc tính "Ghi chu ho ga" do mình tự lập ra dựa trên cái bản vẽ bạn gửi. Nếu bạn chưa ưng ý có thể tự sửa chữa cái block thuộc tinh này cho phù hợp. Mình gửi lại ở đây bản vẽ của chính bạn gửi lên và trong đó mình đã tạo cái block "Ghi chu ho ga" này để bạn sử dụng test lisp và tham khảo.

3/-  Nếu có điều gì chưa như ý, xin đừng giận vì mình không rành cái chuyên môn của bạn nên đoán mò và tự làm qua cái sự hiểu những lời giải thích của bạn đã post. Những điều chưa ưng ý nếu bạn có thể tự sửa thì tốt còn nếu không hãy post lên và nói rõ cái bạn cần để mình sửa lại.

Chúc bạn vui khi tham gia diễn đàn.

http://www.cadviet.com/upfiles/3/5194_ghichuhoga.lsp

http://www.cadviet.com/upfiles/3/5194_10114_thoat_nuoc_tuyen_k.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

Xin lỗi bác phamthanhbinh vì bây giờ mới trả lời thắc mắc của bác:

1.       Khoảng cách từ vị trí đặt block c đến các text là cố định, nó được chạy từ một file trắc dọc được tính toán trên excel, tất cả các bản vẽ đều như thế, không đổi, khoảng cách các hàng =8

2.       Cốt mặt đất và cao độ miệng hố ga là một, vì miệng hố ga bặt buộc phải bám sát mặt đất

3.       Vị trí này chỉ là vấn đề trình bày thôi, vì trong nhiều trường hợp có nhiều hiện vật mình không thể để tên hố ga và cao độ gần nhau được.

4.       Mình thống nhất với ý a, là đoạn nằm xiên góc sẽ được vẽ khi insert thuộc tính vì trên bình đồ không phải vị trí nào cũng có thể đặt được

5.       Việc thể hiện tọa độ thì còn phụ thuộc vào yêu cầu cầu từng công trình, có chỗ yêu cầu có chỗ không. Việc xác định vị trí đặt hố ga là dựa vào từng vị trí cụ thể và kinh nghiệm của người thiết kế, không thể có lisp nào thay thế được. 

Việc tạo block thuộc tính format cũng không có gì đặc biệt đâu

Mong bác giúp đỡ

 http://www.cadviet.com/upfiles/3/10114_ghi_chu_ga.dwg

Hề hề hề, 

Anh bạn haminhhuong này có nhẽ ốm to rồi.....

Quăng cái yêu cầu lên vào ngày 6/9, sau 4 ngày là ngày 10/9 mới trả lời thắc mắc để làm rõ bài toán. Và hôm nay là 21/9 cũng không thèm quay lại xem cái yêu cầu của mình được giải quyết ra sao???

Chắc là ốm to rồi .... Hay là không còn cần tới cái việc này nữa 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

2/- Lisp sử dụng block thuộc tính "Ghi chu ho ga" do mình tự lập ra dựa trên cái bản vẽ bạn gửi. Nếu bạn chưa ưng ý có thể tự sửa chữa cái block thuộc tinh này cho phù hợp. Mình gửi lại ở đây bản vẽ của chính bạn gửi lên và trong đó mình đã tạo cái block "Ghi chu ho ga" này để bạn sử dụng test lisp và tham khảo.

http://www.cadviet.com/upfiles/3/5194_ghichuhoga.lsp

http://www.cadviet.com/upfiles/3/5194_10114_thoat_nuoc_tuyen_k.dwg

 

Bác ơi em chả thấy cái Block "Ghi chu ho ga.dwg" đâu cả? bác gửi lại cái Block đấy 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

Bác ơi em chả thấy cái Block "Ghi chu ho ga.dwg" đâu cả? bác gửi lại cái Block đấy nhé.

Hề hề hề, xin lỗi bạn vì mình gửi nhâm file bản vẽ.

Bản vẽ co chứa block Ghi chu ho ga đây.

http://www.cadviet.com/upfiles/3/5194_10114_thoat_nuoc_tuyen_k_2.dwg

  • 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ác Bình

Nhờ bác sửa dùm em lisp em gửi kèm cho khớp với bản vẽ trắc dọc, em cũng đã sửa nhưng mà cứ bị lỗi.

Em đang rất cần.

Cảm ơn bác.

http://www.cadviet.com/upfiles/3/2392_5194_ghichuhogasua.lsp

http://www.cadviet.com/upfiles/3/2392_5194_10114_thoat_nuoc_tuyen_k_2.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

Chào bác Bình, mong bác sửa thêm lisp này hộ em với. Đối với đoạn nối hai nút giao mà được nối bởi cả đường thẳng và đường cong hay vẽ một đường polyline nhưng bằng cách pick 3 điểm thì khi dùng lệnh Gdd thì nó chỉ nhận khoảng cách đoạn đầu tiên để tính. Mong Bác sửa sớm giúp em nhé. Cám ơn bác 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

Hề hề hề,

Xin lỗi vì bạn phải đợi lâu.Vừa qua mình cũng hơi bận nên không đọc được yêu cầu của bạn.

Đây là cái mình đã sửa lại từ cái lisp cũ, không biết đã đúng với cái bạn yêu cầu hay chưa. Nếu chưa xin đừng ngại nói rõ chỗ chưa được để mình ngâm tiếp.

 
(defun c:gdd (/ oldos )
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "undo" "be")
(makeattbl "GHIDODOC1" nil)
(makeattbl "GHIDODOC2" T)
(alert "\n Hay chon cac pline, line, arc can ghi do doc ")
(setq ssl (acet-ss-to-list (ssget (list (cons 0 "*line,arc")))))
(foreach ent ssl      
      (ghidodoc ent)      
)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Tao block thuoc tinh 
(defun makeattbl (name Tflag / p e1 e2 e3 )
(setvar "aflags" 0)
(if (not (tblsearch "block" name ))
(progn
(setq p (list 0.0 0.0 0.0))
(if Tflag
(command "pline" (polar p pi 15) "w" 0.0 3 (polar p pi 9) "w" 0.75 0.75 (polar p  0 15) "")
(command "pline" (polar p 0 15) "w" 0.0 3 (polar p 0 9) "w" 0.75 0.75 (polar p  pi 15) "")
)
(setq e1 (entlast))
(command "attdef" "" "Dodoc" "dodoc" "10%" "j" "mc" (polar p  (/ pi 2) 3) 3 0  )
(setq e2 (entlast))
(command "attdef" "" "length" "dodai" "500" "j" "mc" (polar p (- (/ pi 2)) 3) 3 0  )
(setq e3 (entlast))
(command "block" name p e1 e2 e3 "")
) )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ghidodoc (ent / obj h1 h2 plst p2 p3 len i v ang ans)
(setq els (entget ent)  )
(if (or (= (cdr (assoc 0 els)) "LINE") (= (cdr (assoc 0 els)) "ARC"))
    (progn 
       (command "pedit" ent "y" "")
       (setq ent (entlast))
    )
)
(redraw ent 3)
(setq obj (vlax-ename->vla-object ent)
          plst (acet-geom-vertex-list ent) 
          h1 (getreal "\n Nhap cao do diem dau: ") )
(foreach p plst
    (setq par (vlax-curve-getparamatpoint obj p)                   
          ;;;;;;;; h (getreal "\n Nhap chieu cao text: ")
          ;;;;;;;; p1 (vlax-curve-getstartpoint obj)
          p2 (vlax-curve-getpointatparam obj (1+ par))  )
    (if p2 (progn
              (setq  p3 (vlax-curve-getpointatparam obj (+ par 0.5))
                        h2 (getreal "\n Nhap cao do diem ke tiep: ")
                        len (- (vlax-curve-getdistatpoint obj p2) (vlax-curve-getdistatpoint obj p))
                        v (vlax-curve-getfirstderiv obj (+ par 0.5))
                        ang (atan (/ (cadr v) (car v)))
                        i (/ (* (abs (- h1 h2)) 100) len)  )
              (command "insert" "GHIDODOC1" "R" (* (/ ang pi) 180) p3 "" ""  (strcat "i = " (rtos i 2 4) "%") (strcat "L = " (rtos len 2 1) "(m)") )              
              (setq ans (getstring "\n Ban co dong y voi chieu do doc nay < y or n> : "))
              (if (= (strcase ans) "N")
                  (progn
                  (command "erase" "last" "")
                  (command "insert" "GHIDODOC2" "R" (* (/ ang pi) 180) p3 "" ""  (strcat "i = " (rtos i 2 4) "%") (strcat "L = " (rtos len 2 1) "(m)") )
                  )
               )
               )
     )
     (setq h1 h2)
)
(redraw ent 4)
)
Chúc bạn luôn vui.

 

Chào bác Bình, mong bác sửa thêm lisp này hộ em với. Đối với đoạn nối hai nút giao mà được nối bởi cả đường thẳng và đường cong hay vẽ một đường polyline nhưng bằng cách pick 3 điểm thì khi dùng lệnh Gdd thì nó chỉ nhận khoảng cách đoạn đầu tiên để tính. Mong Bác sửa sớm giúp em nhé. Cám ơn bác nhiều

  • Vote giảm 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
Vào lúc 19/5/2012 tại 15:49, phamthanhbinh đã nói:

Hề hề hề,

Bạn dùng thử cái này rồi cho ý kiến nhé. Với line và arc thì chắc là ổn, riêng với pline có thể bạn chưa thật ứng ý vì điểm đặt mũi tên và text.

Về hướng mũi tên chỉ độ dốc do bạn không nói rõ điểm thứ nhất và điểm thứ hai được chọn ra sao nên mình chơi phương án cho bạn tự chọn vậy. Khi bạn thấy chiều mũi tên chưa đúng khi lisp hỏi bạn chỉ cần nhập y hay Y là nó sẽ đổi chiều theo ý bạn.

 



(defun c:gdd ()
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "undo" "be")
(setq ent (car (entsel "\n Chon doan can ghi do doc "))
         obj (vlax-ename->vla-object ent)
         h1 (getreal "\n Nhap cao do diem dau: ")
         h2 (getreal "\n Nhap cao do diem cuoi: ")
         h (getreal "\n Nhap chieu cao text: ")
         p1 (vlax-curve-getstartpoint obj)
         p2 (vlax-curve-getendpoint obj)
         p3 (vlax-curve-getpointatparam obj (/ (vlax-curve-getendparam obj) 2))
         len (vlax-curve-getdistatpoint obj p2)
         v (vlax-curve-getfirstderiv obj (/ (vlax-curve-getendparam obj) 2))
         ang (atan (/ (cadr v) (car v)))
         i (/ (* (abs (- h1 h2)) 100) len)
)
(command "pline" (polar p3 ang (* 5 h)) "w" 0.0 h (polar p3 ang (* 3 h)) "w" (/ h 4) (/ h 4) (polar p3 (+ ang pi) (* 5 h)) "")
(setq mt (entlast))
(if (> ang pi)
   (setq ang (- ang pi))
)
(command "text" "j" "mc" (polar p3 (+ ang (/ pi 2)) h) h (* (/ ang pi) 180) (strcat "i = " (rtos i 2 4) "%"))
(command "text" "j" "mc" (polar p3 (- ang (/ pi 2)) h) h (* (/ ang pi) 180) (strcat "L = " (rtos len 2 1) "(m)"))
(setq ans (getstring "\n Ban muon doi chieu doc <y or n>: "))
(if (= (strcase ans) "Y")
   (command "rotate" mt "" p3 180)
)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
 

 

Đây chỉ là lisp thử chưa hoàn chỉnh, bạn cứ việc cho biết những điều cần hoàn thiện, mình sẽ hoàn thiện lại sau nhé.

Chúc bạn vui.

Bạn Phamthanhbinh ơi, mình xãi thấy ok lắm, cảm ơn bạn, nhưng cho mình hỏi chút, trong lisp có phần nhập chiều cao Text mà sao mình thực hiện lisp nó không hỏi nhỉ, chi có chon đối tượng và nhập cao độ 2 đầu thôi. bạn giải thích dùm với, nếu tự điều chỉnh text khi xuất ra để phù hợp với bản vẽ thì hay quá.

P/S: Bạn có thể tích hợp thêm lựa chọn trong lisp vài tính năng nữa được không?

Ví dụ:

- ngoài nhập cao độ bằng tay thì thêm chức năng chọn text cao độ có sẵn

- sau mỗi lệnh sẽ có câu hỏi có tiếp tục cho đoạn khác không? có thể làm liên tục cho 1 đoạn gấp khúc nhiều đoạn chẳng hạn.

cảm ơn bạn và chờ hồ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
Vào lúc 19/5/2012 tại 11:22, phamthanhbinh đã nói:

Hề hề hề,

1/- Bạn cần nói rõ hơn về độ dài đối tượng mà bạn cần trong trường hợp bạn dùng phương án pick 2 điểm và hai diểm đó là các mút của một đoạn cong.

2/- Độ dốc bạn nói được tính theo chiều dài đối tượng hay khoảng cách giữa hai mút của đối tượng??

3/- Mũi tên sẽ ra sao nếu đoạn bạn chọn ghi là đoạn cong???

4/- Trường hợp mũi tên quay ngược chiều thì các text có ngược chiều theo không hay là vẫn giữ nguyên khái niệm trên dưới như của bạn.???

5/- Cứ theo như bản vẽ bạn gửi thì khái niệm trên và dưới của bạn hơi ..... đặc biệt.

Bạn hãy xem lại và trả lời các câu hỏi trên thì may ra mới có lisp đúng theo ý bạn được.

Cảm ơn bác Phamthanhbinh đã giúp giúp đỡ mọi người và mình. Cho mình hỏi 1 chút là: Mình muốn các Tex làm tròn 2 số sau dấu phẩy. Thì sửa ntn ạ !

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
Vào lúc 19/5/2012 tại 15:49, phamthanhbinh đã nói:

Hề hề hề,

Bạn dùng thử cái này rồi cho ý kiến nhé. Với line và arc thì chắc là ổn, riêng với pline có thể bạn chưa thật ứng ý vì điểm đặt mũi tên và text.

Về hướng mũi tên chỉ độ dốc do bạn không nói rõ điểm thứ nhất và điểm thứ hai được chọn ra sao nên mình chơi phương án cho bạn tự chọn vậy. Khi bạn thấy chiều mũi tên chưa đúng khi lisp hỏi bạn chỉ cần nhập y hay Y là nó sẽ đổi chiều theo ý bạn.

 



(defun c:gdd ()
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "undo" "be")
(setq ent (car (entsel "\n Chon doan can ghi do doc "))
         obj (vlax-ename->vla-object ent)
         h1 (getreal "\n Nhap cao do diem dau: ")
         h2 (getreal "\n Nhap cao do diem cuoi: ")
         h (getreal "\n Nhap chieu cao text: ")
         p1 (vlax-curve-getstartpoint obj)
         p2 (vlax-curve-getendpoint obj)
         p3 (vlax-curve-getpointatparam obj (/ (vlax-curve-getendparam obj) 2))
         len (vlax-curve-getdistatpoint obj p2)
         v (vlax-curve-getfirstderiv obj (/ (vlax-curve-getendparam obj) 2))
         ang (atan (/ (cadr v) (car v)))
         i (/ (* (abs (- h1 h2)) 100) len)
)
(command "pline" (polar p3 ang (* 5 h)) "w" 0.0 h (polar p3 ang (* 3 h)) "w" (/ h 4) (/ h 4) (polar p3 (+ ang pi) (* 5 h)) "")
(setq mt (entlast))
(if (> ang pi)
   (setq ang (- ang pi))
)
(command "text" "j" "mc" (polar p3 (+ ang (/ pi 2)) h) h (* (/ ang pi) 180) (strcat "i = " (rtos i 2 4) "%"))
(command "text" "j" "mc" (polar p3 (- ang (/ pi 2)) h) h (* (/ ang pi) 180) (strcat "L = " (rtos len 2 1) "(m)"))
(setq ans (getstring "\n Ban muon doi chieu doc <y or n>: "))
(if (= (strcase ans) "Y")
   (command "rotate" mt "" p3 180)
)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
 

 

Đây chỉ là lisp thử chưa hoàn chỉnh, bạn cứ việc cho biết những điều cần hoàn thiện, mình sẽ hoàn thiện lại sau nhé.

Chúc bạn vui.

Em xin chào các anh chị trong diễn đàn, cho em xin đào lại bài này chút ạ, vì em có dùng lisp này và em thấy nó rất tốt. nhưng có điều nó chạy cad thấp từ 2007 trở lại thì bình thường, nhưng khi xài cho cad 2021 thì nó bị lỗi không thể hiện độ dốc i và chiều dài L ạ, nó toàn báo L=500 thôi ạ. Xin các anh chị có thể sửa lại cho nó ổn định ở cad đời cao không ạ, em cảm ơn. chúc tất cả các anh chị trong diễn đàn nhiều sức khoẻ trong đại dịch covid đang hoành hành ạ

image.png.2b0d766f393734187eb222bb9d6012e4.png

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ân tiện các anh chị có thể thêm vào lisp dòng nhắc 

+ chọn cao độ text khi xuất ra hoặc chọ text có sẵn

+ số lẻ sau dấu phảy

để cho nó phù hợp với các bản vẽ không ạ, xin cảm ơn các anh chị đã đọ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
Vào lúc 20/6/2021 tại 11:06, thanhdn đã nói:

nhân tiện các anh chị có thể thêm vào lisp dòng nhắc 

+ chọn cao độ text khi xuất ra hoặc chọ text có sẵn

+ số lẻ sau dấu phảy

để cho nó phù hợp với các bản vẽ không ạ, xin cảm ơn các anh chị đã đọc

Dòng màu đỏ là sao bạn 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
2 giờ trước, quocmanh04tt đã nói:

Dòng màu đỏ là sao bạn nhỉ???

Tức là khi xuất độ dốc ra thì nó có dòng nhắc là chọn chiều cao cần nhập vào hay chon cao độ của text có sãn ấy mà. vì tỷ lệ xuất ra hiện tại chiều cao là mặc đị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
Vào lúc 20/6/2021 tại 11:00, thanhdn đã nói:

Em xin chào các anh chị trong diễn đàn, cho em xin đào lại bài này chút ạ, vì em có dùng lisp này và em thấy nó rất tốt. nhưng có điều nó chạy cad thấp từ 2007 trở lại thì bình thường, nhưng khi xài cho cad 2021 thì nó bị lỗi không thể hiện độ dốc i và chiều dài L ạ, nó toàn báo L=500 thôi ạ. Xin các anh chị có thể sửa lại cho nó ổn định ở cad đời cao không ạ, em cảm ơn. chúc tất cả các anh chị trong diễn đàn nhiều sức khoẻ trong đại dịch covid đang hoành hành ạ

image.png.2b0d766f393734187eb222bb9d6012e4.png

Lisp chạy rất tuyệt, tuy nhiên nếu ad sửa lại một chút này nữa thì tuyệt vời:

- Lisp hiện chỉ chạy cad thấp từ 2007

- Lips chỉ chạy được khi đường (đường thằng, đường cong..) có 1 đoạn, nếu là một được mà có 2 đoạn trở lên là tính bị sai

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
Vào lúc 19/5/2012 tại 15:49, phamthanhbinh đã nói:

Hề hề hề,

Bạn dùng thử cái này rồi cho ý kiến nhé. Với line và arc thì chắc là ổn, riêng với pline có thể bạn chưa thật ứng ý vì điểm đặt mũi tên và text.

Về hướng mũi tên chỉ độ dốc do bạn không nói rõ điểm thứ nhất và điểm thứ hai được chọn ra sao nên mình chơi phương án cho bạn tự chọn vậy. Khi bạn thấy chiều mũi tên chưa đúng khi lisp hỏi bạn chỉ cần nhập y hay Y là nó sẽ đổi chiều theo ý bạn.

 


(defun c:gdd ()
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(command "undo" "be")
(setq ent (car (entsel "\n Chon doan can ghi do doc "))
         obj (vlax-ename->vla-object ent)
         h1 (getreal "\n Nhap cao do diem dau: ")
         h2 (getreal "\n Nhap cao do diem cuoi: ")
         h (getreal "\n Nhap chieu cao text: ")
         p1 (vlax-curve-getstartpoint obj)
         p2 (vlax-curve-getendpoint obj)
         p3 (vlax-curve-getpointatparam obj (/ (vlax-curve-getendparam obj) 2))
         len (vlax-curve-getdistatpoint obj p2)
         v (vlax-curve-getfirstderiv obj (/ (vlax-curve-getendparam obj) 2))
         ang (atan (/ (cadr v) (car v)))
         i (/ (* (abs (- h1 h2)) 100) len)
)
(command "pline" (polar p3 ang (* 5 h)) "w" 0.0 h (polar p3 ang (* 3 h)) "w" (/ h 4) (/ h 4) (polar p3 (+ ang pi) (* 5 h)) "")
(setq mt (entlast))
(if (> ang pi)
   (setq ang (- ang pi))
)
(command "text" "j" "mc" (polar p3 (+ ang (/ pi 2)) h) h (* (/ ang pi) 180) (strcat "i = " (rtos i 2 4) "%"))
(command "text" "j" "mc" (polar p3 (- ang (/ pi 2)) h) h (* (/ ang pi) 180) (strcat "L = " (rtos len 2 1) "(m)"))
(setq ans (getstring "\n Ban muon doi chieu doc <y or n>: "))
(if (= (strcase ans) "Y")
   (command "rotate" mt "" p3 180)
)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
 

 

Đây chỉ là lisp thử chưa hoàn chỉnh, bạn cứ việc cho biết những điều cần hoàn thiện, mình sẽ hoàn thiện lại sau nhé.

Chúc bạn vui.

a ơi e đang cần lisp này nhờ a sửa hộ theo với ạ:

+ 1: bỏ phần ghi độ dốc và thay thế bằng text ghi khẩu độ cống do người sử dụng đặt tên

+2: làm tròn đến 2 chữ số thập phân

+3: đối tượng insert ra cách đối tượng chủ 1 khoảng cách tuỳ chọn nhập vào, và có tuỳ chọn bên trái or phải, trên or dưới

+3: tất cả các đối tượng bao gồm text, leader, layer, màu,... đều lấy theo hiện hành trên bản vẽ của mình.

Mong a và các cao nhân hồi đáp ạ. e 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

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

×