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

Nhờ Giúp Lisp Đánh Cấp

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

tôi cũng Reply copy hết về nhưng sao đánh cấp kiểu gì chỉ hiện ra được 1 đường Xline thôi hay lỗi gì.bác gửi giúp tôi vào mail thuyloi68@gmail.com xem sao cảm ơn nhiều tôi đang cần

Hế hề hề,

Chắc bác Tue-NV bận mà cũng không rõ bạn có còn cần nữa không??? Mình mạo muội xin phép bác Tue_NV sửa lại cái lisp của bác ấy theo hai yêu cầu của bạn.

Trong lisp mình sửa này, việc dánh cấp sẽ được thực hiện từ điểm đầu tới điểm cuối trên pline do bạn quyết định khi chọn mà không nhất thiết là từ trên xuống hay từ dưới lên. Bạn có thể tùy hứng theo yêu cầu cụ thể của bạn.

Thực ra có thể ghép hai lệnh trong lisp này thành một lệnh duy nhất và thêm một tùy chọn đánh cấp theo chiều cao hay chiều rộng của bậc cấp. Tuy nhiên mình vẫn để thành hai lệnh như vầy có lẽ tốt hơn cho người sử dụng chăng?????

 

http://www.4shared.com/file/JZgFM9ooce/danhcap-Modifier-1.html

  • Vote tăng 1
  • 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

Mình làm bên khai thác mỏ. May nhờ các bác mở Topic đánh cấp. Các bác hộ e với. Với bản vẽ của e điểm đầu đánh cấp tại mức +150. Các bác viết hộ e lisp đánh cấp với. Vẽ đánh cấp dựa vào các thông số: Điểm đầu đánh cấp, góc đánh cấp, chiều cao đánh cấp, khoảng cách đánh cấp, chiều rộng đánh cấp. Chi tiết theo bản vẽ e gửi kèm. Cảm ơn các bác

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

Mình làm bên khai thác mỏ. May nhờ các bác mở Topic đánh cấp. Các bác hộ e với. Với bản vẽ của e điểm đầu đánh cấp tại mức +150. Các bác viết hộ e lisp đánh cấp với. Vẽ đánh cấp dựa vào các thông số: Điểm đầu đánh cấp, góc đánh cấp, chiều cao đánh cấp, khoảng cách đánh cấp, chiều rộng đánh cấp. Chi tiết theo bản vẽ e gửi kèm. Cảm ơn các bác

http://www.cadviet.com/upfiles/3/8800_gui_cad_viet_1.dwg

Hề hề hề,

Chưa hiểu rõ yêu cầu của bạn.

iKhoảng cách đánh cấp và chiều cao đánh cấp có quan hệ vơi  nhau ra sao???

  • 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

Cảm ơn bạn đã quan tâm. Khoảng cách đánh cấp và chiều cao đánh cấp có mối quan hệ với nhau. Ví dụ như bản vẽ của mình, khoảng cách đánh cấp chỉ cao 20 m (từ mức +150 đến +170). từ mức +170 lên đến mức +185 thì chiều cao đánh cấp và khoảng cách đánh cấp đều là 15m. Tương tự đến mức +185 đến +190 chiều cao đánh cấp và khoảng cách đánh cấp cao 5m. Mức +190 đến +210 thì chiều cao đánh cấp là 10m; khoảng cách đánh cấp là 20m. 

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

nhoc thì chưa viết đc nhưng nhoc góp ý xíu ^^, điểm đặt, góc, chiều rộng theo bản vẽ thì là hằng số cố định, còn chiều cao và khoảng cách đánh cấp theo nhoc hình như nó ko có quy luật nhất định thì phải. như file bạn đưa :10-10-15-5-10-10

  • 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ính xác là như vậy. Mình cũng chỉ cần làm theo giai đoạn là được. Chỉ cần chiều cao đánh cấp là 10m; khoảng cách đánh cấp là 20m (10-20). Ý là theo từng đoạn cũng được. có thể là 10-30 hoặc là 15-20...

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 thử cái này.  Chon diem dau, diem cuoi, goc nghieng (theo do), be rong ngang, chieu cao.

 

 

(defun c:dca(/ dda dcu l pt0 pt os goc1 ngang1 dung1 ngang2)
  (defun d2r(a) (* pi (/ a 180)))  
  (setq dda (getpoint "\nDiem dau:") 
dcu (getpoint dda "\nDiem cuoi:")
l (list dda)
pt0 dda
pt pt0
os (getvar 'osmode))
  (setq goc1 (getreal (strcat "\nGoc nghieng <" (rtos (if (not goc) (setq goc 0) goc)) "> :")))
  (if goc1 (setq goc goc1))
  (setq ngang1 (getdist (strcat "\nChieu ngang <" (rtos (if (not ngang) (setq ngang 1) ngang)) "> :")))
  (if ngang1 (setq ngang ngang1))
  (setq dung1 (getdist (strcat "\nChieu cao <" (rtos (if (not dung) (setq dung 1) dung)) "> :")))
  (if dung1 (setq dung dung1)) 
  (if (> (car dcu) (car dda)) (setq lenh +) (setq lenh -))
  (setq ngang2 (* (cos (d2r goc)) (/ dung (sin (d2r goc)))))
  
  (while (> (cadr pt) (cadr dcu))
    (setq pt (polar (polar pt 0 (lenh ngang2)) (* -0.5 pi) dung))
    (if (> (cadr pt) (cadr dcu))
      (setq l (append l (list pt))
   pt (polar pt 0 (lenh ngang))
   l (append l (list pt))
   pt0 pt)
      (setq pt (inters pt0 pt (list 0 (cadr dcu)) (list 1 (cadr dcu)) nil)
   l (append l (list pt)))
    )
  )
  (setvar 'osmode 0)
  (command "pline") (foreach v l (command v)) (command "")
  (setvar 'osmode os)
)

 

p/s : Dao nay danh tieng viet co dau trong cadviet no nhay tum lum, danh phai danh khong dau vay.

  • 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

Ngoài cái đó bạn cần bổ sung gì nữa không?

Nếu không thì xài cái này.

 

(defun c:dca(/ dda dcu l pt0 pt os goc1 ngang1 dung1 ngang2)
  (defun d2r(a) (* pi (/ a 180)))  
  (setq dda (getpoint "\nDiem dau:") 
dcu (getpoint dda "\nDiem cuoi:")
l (list dda)
pt0 dda
pt pt0
os (getvar 'osmode))
  (setq goc1 (getreal (strcat "\nGoc nghieng <" (rtos (if (not goc) (setq goc 0) goc)) "> :")))
  (if goc1 (setq goc goc1))
  (setq ngang1 (getdist (strcat "\nChieu ngang <" (rtos (if (not ngang) (setq ngang 1) ngang)) "> :")))
  (if ngang1 (setq ngang ngang1))
  (setq dung1 (getdist (strcat "\nChieu cao <" (rtos (if (not dung) (setq dung 1) dung)) "> :")))
  (if dung1 (setq dung dung1)) 
  (if (> (car dcu) (car dda)) (setq lenh +) (setq lenh -))
  (setq ngang2 (* (cos (d2r goc)) (/ dung (sin (d2r goc)))))
  
  (while (< (cadr pt) (cadr dcu))
    (setq pt (polar (polar pt 0 (lenh ngang2)) (* 0.5 pi) dung))
    (if (< (cadr pt) (cadr dcu))
      (setq l (append l (list pt))
   pt (polar pt 0 (lenh ngang))
   l (append l (list pt))
   pt0 pt)
      (setq pt (inters pt0 pt (list 0 (cadr dcu)) (list 1 (cadr dcu)) nil)
   l (append l (list pt)))
    )
  )
  (setvar 'osmode 0)
  (command "pline") (foreach v l (command v)) (command "")
  (setvar 'osmode os)
)
  • 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

lisp của bạn cũng được nhưng nó đánh cấp trên toàn bộ pline

tôi chỉ muốn đánh 1 đoạn pline thôi thì làm thế nào

bác sửa giúp thành chọn điểm đầu điểm cuối pline được không

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

nghĩa là tôi có 1 poline rất dài rôi chỉ cần đánh cấp 1 đoạn trong đường pline đó thôi

làm cách nào để tôi chọn: điểm đầu đánh cấp(thuộc đường pline) , chọn điểm cuối đánh cấp(thuộc đường pline)

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

lisp của bạn cũng được nhưng nó đánh cấp trên toàn bộ pline

tôi chỉ muốn đánh 1 đoạn pline thôi thì làm thế nào

bác sửa giúp thành chọn điểm đầu điểm cuối pline được không

Bạn này nói là cái lisp ở mục #26 của bác Bình, cái đó mới dính tới pline, còn cái lsp của hung_xu thì chẳng dính tới pline nào 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

tất nhiên yêu cầu của tôi là đánh cấp theo đường pline có sẵn

nhưng chỉ đánh cấp 1 đoạn nằm trên đường pline thôi vì đường pline rất dài và tôi chỉ cần đánh cấp 1 đoạn thôi

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ôi viết lại yêu cầu

1. cần đánh cấp theo pline có sẵn

2. cần nhập đánh cấp theo chiều cao hoặc bề rộng.

3. đánh cấp 1 đoạn thuộc pline đựơc giới hạn bởi 2 điểm: điểm đầu đánh cấp và điểm cuối đánh cấp cả hai điểm này được xác định trước nà nằm trên đường pline có sẵn

4. đánh cấp từ trên xuống dưới

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

tôi viết lại yêu cầu

1. cần đánh cấp theo pline có sẵn

2. cần nhập đánh cấp theo chiều cao hoặc bề rộng.

3. đánh cấp 1 đoạn thuộc pline đựơc giới hạn bởi 2 điểm: điểm đầu đánh cấp và điểm cuối đánh cấp cả hai điểm này được xác định trước nà nằm trên đường pline có sẵn

4. đánh cấp từ trên xuống dưới

http://www.cadviet.com/upfiles/3/132623_bve_danh_cap_1.dwg

Hề hề hề,

Hãy dùng thử lisp ở bài viết số 28 coi đã ưng ý chư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

Hề hề hề,

Hãy dùng thử lisp ở bài viết số 28 coi đã ưng ý chưa nhé.

không được bạn ơn file kiểu gì không tải về được bạn up lại cho tôi nhé thank

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

- ko biết nói sao nữa haizzz "file kiểu gì" ^^

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/14448-nho-giup-lisp-danh-cap/

(defun c:dcapr (/ cur B sp ep Lx n po1 po2 po3 i oldos ans ss )
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq cur (car (entsel "\n Ban Pick chon Pline :")) 
         ss (ssadd))
(while (null cur) 
       (setq cur (car (entsel "\n Ban Pick chon lai Pline :")))
)
(setq B (getdist "\n Nhap be rong danh cap :"))
(initget "T D")	
(setq ans (getkword "\n Ban danh cap Tren hay Duoi duong pline < T / D > :"))
(setq sp (vlax-curve-getClosestPointTo cur (getpoint "\n Chon diem bat dau danh cap")))			
(setq ep (vlax-curve-getClosestPointTo cur (getpoint "\n Chon diem ket thuc danh cap")))	
;;(if (> (car sp) (car ep))
;;(progn			
;;(setq ep (vlax-curve-getClosestPointTo cur (getpoint "\n Chon diem bat dau danh cap")))			
;;(setq sp (vlax-curve-getClosestPointTo cur (getpoint "\n Chon diem ket thuc danh cap")))		
;;)
;;)
(setq Lx (abs (- (car ep) (car sp)) ))
(setq n (abs(fix (/ (- Lx (rem Lx b )) b ))) i 1)
(setq po1 sp)
(Repeat n
    (if (> (car po1) (car ep))
        (setq dvi (list (- (car sp) (* i b)) (cadr sp) 0))
        (setq dvi (list (+ (car sp) (* i b )) (cadr sp) 0))
    )
    (command "Xline" "Ver" dvi "")
    (setq po3 (car (giaodt cur (entlast))) )
    (entdel (entlast))
    (if  (= ans "D") 
         (if (> (cadr po3) (cadr po1))
             (setq po2 (list (car po3) (cadr po1) 0))
             (setq po2 (list (car po1) (cadr po3) 0))
         )
         (if (< (cadr po3) (cadr po1))
              (setq po2 (list (car po3) (cadr po1) 0))
              (setq po2 (list (car po1) (cadr po3) 0))
         )
    )
    (setq ss (ssadd (dline po1 po2) ss))
    (setq ss (ssadd (dline po2 po3) ss))
    (setq po1 po3)
    (setq i (1+ i))
)
(if (= ans "D" )
     (if (> (cadr ep) (cadr po1))
          (setq po2 (list (car ep) (cadr po1) 0))
          (setq po2 (list (car po1) (cadr ep) 0))
     )
     (if (< (cadr ep) (cadr po1))
          (setq po2 (list (car ep) (cadr po1) 0))
          (setq po2 (list (car po1) (cadr ep) 0))
     )
)
(setq ss (ssadd (dline po1 po2) ss))
(setq ss (ssadd (dline po2 ep)  ss))
(command "pedit" "m" ss "" "Y" "j" "0" "")
(setvar "osmode" oldos)
(command "undo" "end")
(princ)
);
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:dcapc (/ cur B sp ep Lx n po1 po2 po3 i oldos ans ss )
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq cur (car (entsel "\n Ban Pick chon Pline :")) 
         ss (ssadd))
(while (null cur) 
       (setq cur (car (entsel "\n Ban Pick chon lai Pline :")))
)
(setq B (getdist "\n Nhap chieu cao danh cap :"))
(initget "T D")	
(setq ans (getkword "\n Ban danh cap Tren hay Duoi duong pline < T / D > :"))
(setq sp (vlax-curve-getClosestPointTo cur (getpoint "\n Chon diem bat dau danh cap")))			
(setq ep (vlax-curve-getClosestPointTo cur (getpoint "\n Chon diem ket thuc danh cap")))
;;(if (> (cadr sp) (cadr ep))
;;(progn			
;;(setq ep (vlax-curve-getStartPoint cur))			
;;(setq sp (vlax-curve-getEndPoint cur))		
;;)
;;)
(setq Lx (abs (- (cadr ep) (cadr sp)) ))
(setq n (abs(fix (/ (- Lx (rem Lx b )) b ))) i 1)
(setq po1 sp)
(Repeat n
    (if (> (cadr po1) (cadr ep))
        (setq dvi (list  (car sp) (-  (cadr sp) (* i b )) 0))
        (setq dvi (list  (car sp) (+ (* i b ) (cadr sp)) 0))
    )
    (command "Xline" "Hor" dvi "")
    (setq po3 (car (giaodt cur (entlast))) )
    (entdel (entlast))
    (if  (= ans "D") 
         (if (> (cadr po3) (cadr po1))
             (setq po2 (list (car po3) (cadr po1) 0))
             (setq po2 (list (car po1) (cadr po3) 0))
         )
         (if (< (cadr po3) (cadr po1))
              (setq po2 (list (car po3) (cadr po1) 0))
              (setq po2 (list (car po1) (cadr po3) 0))
         )
    )
    (setq ss (ssadd (dline po1 po2) ss))
    (setq ss (ssadd (dline po2 po3) ss))
    (setq po1 po3)
    (setq i (1+ i))
)
(if (= ans "D" )
     (if (> (cadr ep) (cadr po1))
          (setq po2 (list (car ep) (cadr po1) 0))
          (setq po2 (list (car po1) (cadr ep) 0))
     )
     (if (< (cadr ep) (cadr po1))
          (setq po2 (list (car ep) (cadr po1) 0))
          (setq po2 (list (car po1) (cadr ep) 0))
     )
)
(setq ss (ssadd (dline po1 po2) ss))
(setq ss (ssadd (dline po2 ep)  ss))
(command "pedit" "m" ss "" "Y" "j" "0" "")
(setvar "osmode" oldos)
(command "undo" "end")
(princ)
);
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun dline(p1 p2)
(entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2))));
(defun GiaoDT (ent1 ent2)
(setq ob1 (vlax-ename->vla-object ent1)
         ob2 (vlax-ename->vla-object ent2))
(setq g (vlax-variant-value(vla-IntersectWith ob1 ob2 acExtendNone)))
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil))
(if g
(progn
(setq kq nil
          sd (fix (/ (length g) 3)))
(repeat sd
      (setq kq (append kq (list (list (car g) (cadr g) (caddr g)))) 
                g (cdddr g))
)
kq
)
nil
)
)
;;;
  • Vote tăng 2
  • 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

có những biết chút mà to mồm

sửa được cái lisp của người khác có ra hồn đâu

1. chế độ bắt điểm bị tắt

2. chế độ đánh cấp bị loạn đi khai báo chiều cao nhưng kết quả chỗ được chổ không

haizzzzzz

  • Vote giảm 2

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

- ok bạn thích nói sao cũng đc, lỗi nhoc ko nói rõ giờ nhoc nói oạch tẹt ra là bạn ko pit cách tải mà bạn đã nói người ta up file kỉu gì

- file lsp trên là nhoc tải đc nguyên gốc lsp của a PTB chưa hề chỉnh sửa 1 tí nào cả

 

 

- bạn yêu cầu mà cách nói như ra lệnh

P/s: lsp góc anh PTB chỉnh cho bạn nhoc đã chạy thử chả lỗi lầm gì cả, còn vụ bắt điểm trong yêu cầu bạn có đã động gì tới đâu, file mình họa cũng ko nói cụ thể cứ chỉ đại điểm đầu điểm cuối trong đoạn pline thì ai pit mà mò bạn thíck bắt điểm kiểu nào mà set, ảnh chỉ viết đúng nguyên tắc cần thiết để lsp chạy ko lỗi thui

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ó những biết chút mà to mồm

sửa được cái lisp của người khác có ra hồn đâu

1. chế độ bắt điểm bị tắt

2. chế độ đánh cấp bị loạn đi khai báo chiều cao nhưng kết quả chỗ được chổ không

haizzzzzz

Hề hề hề,

Chớ nóng chứ.

Chuyện lisp sửa chửa ra hồn cũng là điều bình thường thôi mà. Vậy nên mới bảo bạn test thử xem có lỗi gì không. Nếu có thì lại sửa chứ có chi mà nóng.

Về các lỗi bạn nói:

1/- Chế độ bắt điểm bị tắt đi trong quá trình chạy lisp để người dùng không bị bắt nhầm điểm. Sau khi hoàn tất lisp sẽ trả chế độ bắt điểm về ban đầu mà. Nếu khi bạn chạy lisp xong mà vẫn bị mất chế độ bắt điểm là do quá trình thao tác của bạn có thể bị trật khi bắt điểm (giả sử là bắt không trúng điểm thuộc pline) và lisp thoát ra giữa chừng nên nó không trả về truy bắt điểm trước đó được.

2/- Chế độ đánh cấp bị loạn đi có thể là do bạn chưa hiểu cách dùng lisp này. Lisp này sẽ đánh cấp từ điểm bắt đầu đến điểm kết thúc mà không quan tâm là từ trên xuống hay từ dưới lên. Vì thế bạn cần chọn đúng trật tự điểm đầu và điểm cuối theo mong muốn của bạn là từ trên xuống hay từ dưới lên. Việc lisp có lúc được lúc không có nhẽ là do bạn cẩu thả trong thao tác chọn điểm đầu và điểm cuối nên lisp không chọn được đúng các điểm trên pline. Bạn hãy thử sửa dòng code (setvar "osmode" 0) thành (setvar "osmode" 512) xem sao nhé.

3/- Chúc bạn vui và kiên nhẫn hơn khi gặp điều chưa vừa ý mình.

  • Vote tăng 2

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  

×