Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
vothanhdn

[Yêu cầu] Lisp dim góc vát

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

vothanhdn    3

Chào mọi người!

 

Mình có vấn đề này nhờ mọi người giúp đỡ. Hiện mình đang cần lisp có thể dim góc vát tại các ngã giao, mình search trên forum không có, mà viết thì mình chịu thua mấy cái dim này nên nhờ mọi người giúp.

Yêu cầu:

 - Dimalign góc vát với chân dim và đường line Dim trùng nhau tại vị trí đổi góc của góc vát (Hình vẽ).

 - Dim được các góc vát trên Polyline kín.

 

Thanks.

 

67034_dim_goc_vat.jpg

 

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
TaiNguyen79    24

Có lẽ đây là thứ bạn cần :

(Chịu kho pick điểm 1 tý cho lành. còn chọn hàng loạt pline rất không ổn vì hay phát sinh những điểm rất xa)

 

(defun c:dimvg (/ osm p1 p2 p3 p4 pt1 pt2 intp d1 d2 a1 a2 di1 di2 ai1 ai2 goc1 goc2 canh1 canh2)

  (setq osm (getvar "osmode"))

  (setvar "osmode" 1)

  (setq p1 (getpoint "\nPick diem 1 :") p2 (getpoint "\nPick diem 2 :") p3 (getpoint "\nPick diem 3 :") p4 (getpoint "\nPick diem 4 :"))

  (setq pt1 nil pt2 nil)

  (setvar "osmode" 0)

  (if (setq intp (inters p1 p2 p3 p4 nil))

    (progn

      (setq d1 (distance p1 p2) d2 (distance p3 p4) a1 (angle p1 p2) a2 (angle p3 p4))

      (setq di1 (distance p1 intp) di2 (distance p3 intp) ai1 (angle p1 intp) ai2 (angle p3 intp))

      (cond

        ((and (and (equal ai1 a1 0.00001) (> di1 d1)) (and (equal ai2 a2 0.00001)(> di2 d2))) (setq pt1 p2 pt2 p4))

        ((and (and (equal ai1 a1 0.00001) (> di1 d1)) (/= ai2 a2)) (setq pt1 p2 pt2 p3))

        ((and (/= ai1 a1) (and (equal ai2 a2 0.00001)(> di2 d2))) (setq pt1 p1 pt2 p4))

        ((and (/= ai1 a1) (/= ai2 a2)) (setq pt1 p1 pt2 p3))

        (T (setq pt1 nil pt2 nil))

        );cond

      (if (and pt1 pt2)

        (progn

          (setq goc1 (angle pt1 intp) goc2 (angle pt2 intp) canh1 (distance pt1 intp) canh2 (distance pt2 intp))

          (command "donut" "0.0" 0.25 intp "") (command "donut" "0.0" 0.25 pt1 "") (command "donut" "0.0" 0.25 pt2 "")

          (entmod (entmake (list (cons 0 "LINE")  (cons 100 "AcDbLine") (list 10 (nth 0 pt1) (nth 1 pt1) (nth 2 pt1)) (list 11 (nth 0 intp) (nth 1 intp) (nth 2 intp)))))

          (entmod (entmake (list (cons 0 "LINE")  (cons 100 "AcDbLine") (list 10 (nth 0 intp) (nth 1 intp) (nth 2 intp)) (list 11 (nth 0 pt2) (nth 1 pt2) (nth 2 pt2)))))

          (if (or (<= (* (/ goc1 pi) 180) 90) (>= (* (/ goc1 pi) 180) 270))

            (command ".text" "M" (polar (polar pt1 goc1 (/ canh1 2.0)) (+ goc1 (/ Pi 2.0)) 1.0) 1.0 (* (/ goc1 pi) 180) (rtos canh1 2 2) "")

            (command ".text" "M" (polar (polar pt1 goc1 (/ canh1 2.0)) (- goc1 (/ Pi 2.0)) 1.0) 1.0 (- (* (/ goc1 pi) 180) 180) (rtos canh1 2 2) "")

            )

          (if (or (<= (* (/ goc2 pi) 180) 90) (>= (* (/ goc2 pi) 180) 270))

            (command ".text" "M" (polar (polar pt2 goc2 (/ canh2 2.0)) (+ goc2 (/ Pi 2.0)) 1.0) 1.0 (* (/ goc2 pi) 180) (rtos canh2 2 2) "")

            (command ".text" "M" (polar (polar pt2 goc2 (/ canh2 2.0)) (- goc2 (/ Pi 2.0)) 1.0) 1.0 (- (* (/ goc2 pi) 180) 180) (rtos canh2 2 2) "")

            )

          )

        (princ "\nGoc vat khong hop le !"))

      );prgn

    (princ "\nHai doan thang song song !"));if

  (setvar "osmode" osm))

  • 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
vothanhdn    3

Thanks a.

 

Mấy hôm nay bận quá nên không lên diễn đàn được. Cám ơn a về cái lisp, có điều lisp này không phù hợp với yêu cầu của e rồi ^^, e cần dimension luôn chứ không phải pline và text a ah.

 

Lisp mà e nhờ mọi người viết là tự dim góc vát chứ không phải là chọn điểm đâu a.

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
Doan Van Ha    2.678

Chắc có lẽ là đề khó:

1). Giả dụ pline kín là 1 polygon thì góc vát là cái nào?

2). Giả dụ pline kín là 1 đa tuyến lõm thì góc vát là cái nào?

3). TextDim to nhỏ, dot dim nhỏ to?

4). Thậm chí cũng không có file cad?

5). v.v và v.v...

Cố gắng ra đề để sao cho người khác hiểu hết, chứ đừng như đề thi hàng năm, lúc nào cũng có 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
vothanhdn    3

Chắc có lẽ là đề khó:

1). Giả dụ pline kín là 1 polygon thì góc vát là cái nào?

2). Giả dụ pline kín là 1 đa tuyến lõm thì góc vát là cái nào?

3). TextDim to nhỏ, dot dim nhỏ to?

4). Thậm chí cũng không có file cad?

5). v.v và v.v...

Cố gắng ra đề để sao cho người khác hiểu hết, chứ đừng như đề thi hàng năm, lúc nào cũng có sai.

 

Thanks a

 

Vấn đề là vậy, nếu là polygon hoặc da tuyến lõm thì vát tại các vị trí thay đổi góc tuyến 2 lần.

Còn về phần Dim to nhỏ hay dot dim thì e nghĩ nó không quan trọng lắm vì cái đó tùy thuộc vào hiệu chỉnh Dimstyle nên cũng không gửi file cad lên.

Còn đây là file CAD, nhờ a xem thử giúp nhé.http://www.cadviet.com/upfiles/3/67034_cadviet.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
TaiNguyen79    24

Thanks a.

 

Mấy hôm nay bận quá nên không lên diễn đàn được. Cám ơn a về cái lisp, có điều lisp này không phù hợp với yêu cầu của e rồi ^^, e cần dimension luôn chứ không phải pline và text a ah.

 

Lisp mà e nhờ mọi người viết là tự dim góc vát chứ không phải là chọn điểm đâu a.

Thôi thì thế này nhé :


(defun vatgoc_tinhtoan (a b c d / osm p1 p2 p3 p4 pt1 pt2 intp d1 d2 a1 a2 di1 di2 ai1 ai2 kqua)

(setq pt1 nil pt2 nil p1 a p2 b p3 c p4 d)

(setq osm (getvar "osmode"))

(setvar "osmode" 0)

(if (setq intp (inters p1 p2 p3 p4 nil))

(progn

(setq d1 (distance p1 p2) d2 (distance p3 p4) a1 (angle p1 p2) a2 (angle p3 p4))

(setq di1 (distance p1 intp) di2 (distance p3 intp) ai1 (angle p1 intp) ai2 (angle p3 intp))

(cond

((and (and (equal ai1 a1 0.00001) (> di1 d1)) (and (equal ai2 a2 0.00001)(> di2 d2))) (setq pt1 p2 pt2 p4))

(T (setq pt1 nil pt2 nil))

);cond

);prgn

);if

(setvar "osmode" osm)

(if (and pt1 pt2) (setq kqua (list pt1 pt2 intp))))

;-------------------------

(defun c:vatgoc_dimaligned (/ i Egss k cl lstpt vg lst_vg t1 p1 diem n )

(setq i 0)

(setq Egss (entget (car (entsel "\nChon pline :" ))))

(setq k (cdr (assoc 90 Egss)) cl (cdr (assoc 70 Egss)))

(setq lstpt '() vg '() lst_vg '())

(setq i 1)

(while (<= i k)

(progn

(setq t1 (member (assoc 10 Egss) Egss))

(setq p1 (car t1))

(setq Egss (cdr t1))

(setq diem (cdr p1))

(setq lstpt (append lstpt (list diem)))

(setq i (+ 1 i))));while

(setq k (length lstpt))

(if (< k 4) (exit))

(if (= cl 1) (setq lstpt (append lstpt (list (nth 0 lstpt)(nth 1 lstpt) (nth 2 lstpt)))))

(if (and (= cl 0) (equal (nth 0 lstpt) (nth (- k 1) lstpt)))

(setq lstpt (append lstpt (list (nth 1 lstpt) (nth 2 lstpt)))))

(setq k (length lstpt))

(setq n 0)

(while (< n (- k 3))

(repeat 4 (setq vg (append vg (list (nth n lstpt)))) (setq n (1+ n)))

(setq lst_vg (append lst_vg (list vg)) vg '())

(setq n (- n 3))

)

(setq k (length lst_vg) n 0)

(repeat k

(if (setq vgtt (vatgoc_tinhtoan (nth 0 (nth n lst_vg)) (nth 1 (nth n lst_vg)) (nth 3 (nth n lst_vg)) (nth 2 (nth n lst_vg))))

(progn (command "dimaligned" (nth 0 vgtt) (nth 2 vgtt)(nth 2 vgtt))

(command "dimaligned" (nth 1 vgtt) (nth 2 vgtt)(nth 2 vgtt)))

)

(setq n (1+ n))

)

)

PS: Dimstyle bạn tự khai báo phù hợp là đc[/lisp]

  • 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
vothanhdn    3

Thôi thì thế này nhé :


(defun vatgoc_tinhtoan (a b c d / osm p1 p2 p3 p4 pt1 pt2 intp d1 d2 a1 a2 di1 di2 ai1 ai2 kqua)

(setq pt1 nil pt2 nil p1 a p2 b p3 c p4 d)

(setq osm (getvar "osmode"))

(setvar "osmode" 0)

(if (setq intp (inters p1 p2 p3 p4 nil))

(progn

(setq d1 (distance p1 p2) d2 (distance p3 p4) a1 (angle p1 p2) a2 (angle p3 p4))

(setq di1 (distance p1 intp) di2 (distance p3 intp) ai1 (angle p1 intp) ai2 (angle p3 intp))

(cond

((and (and (equal ai1 a1 0.00001) (> di1 d1)) (and (equal ai2 a2 0.00001)(> di2 d2))) (setq pt1 p2 pt2 p4))

(T (setq pt1 nil pt2 nil))

);cond

);prgn

);if

(setvar "osmode" osm)

(if (and pt1 pt2) (setq kqua (list pt1 pt2 intp))))

;-------------------------

(defun c:vatgoc_dimaligned (/ i Egss k cl lstpt vg lst_vg t1 p1 diem n )

(setq i 0)

(setq Egss (entget (car (entsel "\nChon pline :" ))))

(setq k (cdr (assoc 90 Egss)) cl (cdr (assoc 70 Egss)))

(setq lstpt '() vg '() lst_vg '())

(setq i 1)

(while (<= i k)

(progn

(setq t1 (member (assoc 10 Egss) Egss))

(setq p1 (car t1))

(setq Egss (cdr t1))

(setq diem (cdr p1))

(setq lstpt (append lstpt (list diem)))

(setq i (+ 1 i))));while

(setq k (length lstpt))

(if (< k 4) (exit))

(if (= cl 1) (setq lstpt (append lstpt (list (nth 0 lstpt)(nth 1 lstpt) (nth 2 lstpt)))))

(if (and (= cl 0) (equal (nth 0 lstpt) (nth (- k 1) lstpt)))

(setq lstpt (append lstpt (list (nth 1 lstpt) (nth 2 lstpt)))))

(setq k (length lstpt))

(setq n 0)

(while (< n (- k 3))

(repeat 4 (setq vg (append vg (list (nth n lstpt)))) (setq n (1+ n)))

(setq lst_vg (append lst_vg (list vg)) vg '())

(setq n (- n 3))

)

(setq k (length lst_vg) n 0)

(repeat k

(if (setq vgtt (vatgoc_tinhtoan (nth 0 (nth n lst_vg)) (nth 1 (nth n lst_vg)) (nth 3 (nth n lst_vg)) (nth 2 (nth n lst_vg))))

(progn (command "dimaligned" (nth 0 vgtt) (nth 2 vgtt)(nth 2 vgtt))

(command "dimaligned" (nth 1 vgtt) (nth 2 vgtt)(nth 2 vgtt)))

)

(setq n (1+ n))

)

)

PS: Dimstyle bạn tự khai báo phù hợp là đc[/lisp]

 

Thanks a nhiều

Đúng là nó chạy tùm lum thiệt,hi. Dù sao xóa cũng nhanh hơn là phải canh dim a ah....hi

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
quochuyksxd    24

Sao mi

 

Thôi thì thế này nhé :


(defun vatgoc_tinhtoan (a b c d / osm p1 p2 p3 p4 pt1 pt2 intp d1 d2 a1 a2 di1 di2 ai1 ai2 kqua)
(setq pt1 nil pt2 nil p1 a p2 b p3 c p4 d)
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(if (setq intp (inters p1 p2 p3 p4 nil))
(progn
(setq d1 (distance p1 p2) d2 (distance p3 p4) a1 (angle p1 p2) a2 (angle p3 p4))
(setq di1 (distance p1 intp) di2 (distance p3 intp) ai1 (angle p1 intp) ai2 (angle p3 intp))
(cond
((and (and (equal ai1 a1 0.00001) (> di1 d1)) (and (equal ai2 a2 0.00001)(> di2 d2))) (setq pt1 p2 pt2 p4))
(T (setq pt1 nil pt2 nil))
);cond
);prgn
);if
(setvar "osmode" osm)
(if (and pt1 pt2) (setq kqua (list pt1 pt2 intp))))
;-------------------------
(defun c:vatgoc_dimaligned (/ i Egss k cl lstpt vg lst_vg t1 p1 diem n )
(setq i 0)
(setq Egss (entget (car (entsel "\nChon pline :" ))))
(setq k (cdr (assoc 90 Egss)) cl (cdr (assoc 70 Egss)))
(setq lstpt '() vg '() lst_vg '())
(setq i 1)
(while (<= i k)
(progn
(setq t1 (member (assoc 10 Egss) Egss))
(setq p1 (car t1))
(setq Egss (cdr t1))
(setq diem (cdr p1))
(setq lstpt (append lstpt (list diem)))
(setq i (+ 1 i))));while
(setq k (length lstpt))
(if (< k 4) (exit))
(if (= cl 1) (setq lstpt (append lstpt (list (nth 0 lstpt)(nth 1 lstpt) (nth 2 lstpt)))))
(if (and (= cl 0) (equal (nth 0 lstpt) (nth (- k 1) lstpt)))
(setq lstpt (append lstpt (list (nth 1 lstpt) (nth 2 lstpt)))))
(setq k (length lstpt))
(setq n 0)
(while (< n (- k 3))
(repeat 4 (setq vg (append vg (list (nth n lstpt)))) (setq n (1+ n)))
(setq lst_vg (append lst_vg (list vg)) vg '())
(setq n (- n 3))
)
(setq k (length lst_vg) n 0)
(repeat k
(if (setq vgtt (vatgoc_tinhtoan (nth 0 (nth n lst_vg)) (nth 1 (nth n lst_vg)) (nth 3 (nth n lst_vg)) (nth 2 (nth n lst_vg))))
(progn (command "dimaligned" (nth 0 vgtt) (nth 2 vgtt)(nth 2 vgtt))
(command "dimaligned" (nth 1 vgtt) (nth 2 vgtt)(nth 2 vgtt)))
)
(setq n (1+ n))
)
)

PS: Dimstyle bạn tự khai báo phù hợp là đc[/lisp]

Sao khi sử dụng với pline kín thì không được bác ah. bác có thể khắc phục đượ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
TaiNguyen79    24

Sao mi

 

Sao khi sử dụng với pline kín thì không được bác ah. bác có thể khắc phục được không?

Mình vừa kiểm tra trên máy thì thấy chạy đc pline kín mà. Bạn lưu ý Polyline và Region.Chương trình không chạy đc cho Region đâu !

Có gì post file của bạn lên mình xem thử 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
TaiNguyen79    24

Đây bạn ơi. nhờ bạn kiểm tra dùm cáihttp://www.cadviet.com/upfiles/3/100618_vd.dwg

Đó là region mà bạn. Pline kín có 2 dạng :

hoặc đó là closing polyline

hoặc là Polyline mà có diểm cuối trùng với điểm đầu :)

(Nghĩa là mình dùng lệnh pline nối trở về điểm khởi đầu mà không dùng "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
quochuyksxd    24

Đó là region mà bạn. Pline kín có 2 dạng :

hoặc đó là closing polyline

hoặc là Polyline mà có diểm cuối trùng với điểm đầu :)

(Nghĩa là mình dùng lệnh pline nối trở về điểm khởi đầu mà không dùng "c" để đóng pline)

Thanhk bạn nhé. mình hiểu rồi. ứng dụng lisp rất hữu ích khi làm quy hoạch chia lô

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
ndtnv    397

Xem chủ đề thấy hay hay nên test thử thì thấy code của bạn TaiNguyen79 có lỗi sau:
- Mã dxf 70 của pline là  (bit-coded) nên nếu = 0, 128 open; = 1, 129 closed
- osmode phải để ở hàm chính (có lẽ lúc đầu bạn vẽ dim trong hàm con)
- Ngoài ra code có nhiều đoạn không cần thiết như:
  + Khi gọi hàm vatgoc_tinhtoan các biến trung gian a b c d thừa
  + Tạo list lst_vg chiếm bộ nhớ gần 4 lần lstpt, khi dùng lại phải truy xuất qua 2 cấp.
Dù sao thì lisp này cũng có thuật toán hay như thuật toán lính canh để xử lý closed pline
Sau đây là lisp tôi sửa, cải tiến lại.

(defun vatgoc_tinhtoan (p1 p2 p3 p4 / intp d1 d2 a1 a2 di1 di2 ai1 ai2 kqua)
    (if (setq intp (inters p1 p2 p3 p4 nil))
    (progn
        (setq d1 (distance p1 p2) d2 (distance p3 p4) a1 (angle p1 p2) a2 (angle p3 p4))
        (setq di1 (distance p1 intp) di2 (distance p3 intp) ai1 (angle p1 intp) ai2 (angle p3 intp))
        (if (and (and (equal ai1 a1 0.00001) (> di1 d1)) (and (equal ai2 a2 0.00001)(> di2 d2)))
            (setq kqua intp))))
    kqua
)
;-------------------------
(defun c:vd ( / Egss k cl lstpt t1 p1 diem n osm vgtt); c:vatgoc_dimaligned
    (setq osm (getvar "osmode"))
    (setvar "osmode" 0)
    (setq Egss (entget (car (entsel "\nChon pline :" ))))
    (setq k (cdr (assoc 90 Egss)) cl (rem (cdr (assoc 70 Egss)) 2))
    (repeat k
        (progn
            (setq t1 (member (assoc 10 Egss) Egss))
            (setq p1 (car t1))
            (setq Egss (cdr t1))
            (setq diem (cdr p1))
            (setq lstpt (append lstpt (list diem)))
            ));while
    (if (< (setq k (length lstpt)) 4) (exit))
    (if (= cl 1) (setq lstpt (append lstpt (list (nth 0 lstpt)(nth 1 lstpt) (nth 2 lstpt))))
        (if (equal (nth 0 lstpt) (nth (- k 1) lstpt))
                (setq lstpt (append lstpt (list (nth 1 lstpt) (nth 2 lstpt)))))        )
    
    (setq n 0 k (- (length lstpt) 3))
    (repeat k
    (if (setq vgtt (vatgoc_tinhtoan (nth n lstpt) (nth (+ n 1) lstpt) (nth (+ n 3) lstpt) (nth (+ n 2) lstpt)))
        (progn (command "dimaligned" (nth (+ n 1) lstpt) vgtt vgtt)
            (command "dimaligned" (nth (+ n 2) lstpt) vgtt vgtt))
    )
    (setq n (1+ n))
    )
    (setvar "osmode" osm)
)
  • 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
Doan Van Ha    2.678

1). Hàm con vatgoc_tinhtoan còn thừa những 4 hàm nữa cơ!

2). Bạn có thể chỉ cho mình biết khi nào thì pline có thêm 128 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
TaiNguyen79    24

Xem chủ đề thấy hay hay nên test thử thì thấy code của bạn TaiNguyen79 có lỗi sau:

- Mã dxf 70 của pline là  (bit-coded) nên nếu = 0, 128 open; = 1, 129 closed

- osmode phải để ở hàm chính (có lẽ lúc đầu bạn vẽ dim trong hàm con)

- Ngoài ra code có nhiều đoạn không cần thiết như:

  + Khi gọi hàm vatgoc_tinhtoan các biến trung gian a b c d thừa

  + Tạo list lst_vg chiếm bộ nhớ gần 4 lần lstpt, khi dùng lại phải truy xuất qua 2 cấp.

Dù sao thì lisp này cũng có thuật toán hay như thuật toán lính canh để xử lý closed pline

Sau đây là lisp tôi sửa, cải tiến lại.

Cảm ơn bạn TNV đã sửa code.

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
Doan Van Ha    2.678

Hàm con này bỏ bớt đi 4 hàm, chắc sẽ chạy nhanh hơn?

 

(defun vatgoc_tinhtoan (p1 p2 p3 p4 / intp d1 d2 a1 a2 di1 di2 ai1 ai2 kqua)
 (if (setq intp (inters p1 p2 p3 p4 nil))
  (and
   (setq d1 (distance p1 p2) d2 (distance p3 p4) a1 (angle p1 p2) a2 (angle p3 p4))
   (setq di1 (distance p1 intp) di2 (distance p3 intp) ai1 (angle p1 intp) ai2 (angle p3 intp))
   (equal ai1 a1 0.00001)
   (> di1 d1)
   (equal ai2 a2 0.00001)
   (> di2 d2)
   (setq kqua intp)))
 kqua)
 

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
ndtnv    397

1). Hàm con vatgoc_tinhtoan còn thừa những 4 hàm nữa cơ!

2). Bạn có thể chỉ cho mình biết khi nào thì pline có thêm 128 nhé?

 

1. Đương nhiên là còn nhiều chổ khác có thể rút gọn, nhưng tốn thời gian

2. Bạn tham khảo bản vẽ sau

http://www.cadviet.com/upfiles/3/19626_dxf70.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
TaiNguyen79    24

Hàm con này bỏ bớt đi 4 hàm, chắc sẽ chạy nhanh hơn?

 

 

(defun vatgoc_tinhtoan (p1 p2 p3 p4 / intp d1 d2 a1 a2 di1 di2 ai1 ai2 kqua)
 (if (setq intp (inters p1 p2 p3 p4 nil))
  (and
   (setq d1 (distance p1 p2) d2 (distance p3 p4) a1 (angle p1 p2) a2 (angle p3 p4))
   (setq di1 (distance p1 intp) di2 (distance p3 intp) ai1 (angle p1 intp) ai2 (angle p3 intp))
   (equal ai1 a1 0.00001)
   (> di1 d1)
   (equal ai2 a2 0.00001)
   (> di2 d2)
   (setq kqua intp)))
 kqua)
 

 

 

Vầy hả : :)


(defun vatgoc_tinhtoan (p1 p2 p3 p4 / intp d1 d2 a1 a2 di1 di2 ai1 ai2 kqua)

(if (setq intp (inters p1 p2 p3 p4 nil))

(if (and (and (equal (angle p1 intp) (angle p1 p2) 0.00001)(> (distance p1 intp) (distance p1 p2)))

(and (equal (angle p3 intp) (angle p3 p4) 0.00001)(> (distance p3 intp) (distance p3 p4))))

(setq kqua intp))) kqua)

Cũng vậy 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
Doan Van Ha    2.678

Cũng vậy

@TaiNguyen79: lúc nào đụng những chương trình cần tốc độ thì bạn sẽ thấy nó không "Cũng vậy" đâu.

@ndtnv: rất thank bạn về thông tin này. Hóa ra nó còn 1 biến hệ thống nữa.

  • 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
TaiNguyen79    24

@TaiNguyen79: lúc nào đụng những chương trình cần tốc độ thì bạn sẽ thấy nó không "Cũng vậy" đâu.

Hề hề : Tớ viết theo y/c của 2pic . Nghĩ gì viết nấy nên cũng rất ngô nghê. Dù sao cũng cám ơn bạn đã quan tâ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
Doan Van Ha    2.678

Hề hề : Tớ viết theo y/c của 2pic . Nghĩ gì viết nấy nên cũng rất ngô nghê. Dù sao cũng cám ơn bạn đã quan tâm

Không có gì là "ngô nghê" cả bạn ạ. Tôi viết nhiều khi còn tệ hơn thế. Người không chơi cờ thường sáng mắt thôi.

Hôm nay bạn ndtnv cũng đã giúp tôi ngộ ra thêm 1 điều nữa đấy thôi.

  • 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

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  

×