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

dacvien2007

Thành viên
  • Số lượng nội dung

    75
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi dacvien2007


  1. Hề hề hê,

    Mình chạy thử rồi, nó đây nè bạn:

    Kết quả chạy:

    http://www.cadviet.com/upfiles/2/lb2.jpg

    lb2.jpg

    Còn đây là cái lisp đã sửa nè:

    (defun c:lb2 ()
    (vl-load-com)
    (command "undo" "be")
    (setq en (entsel "\n Chon pline ")
    ob (vlax-ename->vla-object (car en))
    n (vlax-curve-getEndParam ob)
    i 0
    li1 (list)
    )
    (setq pb (getpoint "\n Chon diem dat bang")
    h (getreal "\n Nhap chieu cao chu: ")
    k (getreal "\n Nhap do rong cot: ")
    )
    (entmake (list (cons 0 "TEXT") (cons 10 pb) (cons 40 h) (cons 1 "BANG KET QUA")))
    (entmake 
    (list (cons 0 "TEXT") (cons 10 (list (car pb) (- (cadr pb) (* 1.5 h)))) (cons 40 h) (cons 1 "STT")))
    (entmake 
    (list (cons 0 "TEXT") (cons 10 (list (+ (car pb) k) (- (cadr pb) (* 1.5 h)))) (cons 40 h) (cons 1 "X")))
    (entmake 
    (list (cons 0 "TEXT") (cons 10 (list (+ (car pb) (* 2 k)) (- (cadr pb) (* 1.5 h)))) (cons 40 h) (cons 1 "Y")))
    (entmake 
    (list (cons 0 "TEXT") (cons 10 (list (+ (car pb) (* 3 k)) (- (cadr pb) (* 1.5 h)))) (cons 40 h) (cons 1 "Z")))
    (while (<= i n)
    (setq p (vlax-curve-getPointAtParam ob i) 
    li1 (append li1 (list p))
    y (- (cadr pb) (* (+ 2 i) 1.5 h))
    )
    (entmake (list (cons 0 "TEXT") (cons 10 (list (car p) (+ (cadr p) 5))) (cons 40 1.0)
    (cons 1 (strcat "X=" (rtos (car p) 2 2)))))
    (entmake (list (cons 0 "TEXT") (cons 10 (list (car p) (+ (cadr p) 2.5))) (cons 40 1.0)
    (cons 1 (strcat "Y=" (rtos (cadr p) 2 2)))))
    (entmake (list (cons 0 "TEXT") (cons 10 (list (car p) (cadr p))) (cons 40 1.0)
    (cons 1 (strcat "Z=" (rtos (caddr p) 2 2)))))
    (entmake 
    (list (cons 0 "TEXT") (cons 10 (list (car pb) y)) (cons 40 h) (cons 1  (rtos (1+ i) 2 0))))
    (entmake 
    (list (cons 0 "TEXT") (cons 10 (list (+ (car pb) k) y)) (cons 40 h) (cons 1 (rtos (car p ) 2 2))))
    (entmake 
    (list (cons 0 "TEXT") (cons 10 (list (+ (car pb) (* 2 k)) y)) (cons 40 h) (cons 1 (rtos (cadr p ) 2 2))))
    (entmake 
    (list (cons 0 "TEXT") (cons 10 (list (+ (car pb) (* 3 k)) y)) (cons 40 h) (cons 1 (rtos (caddr p) 2 2))))
    (setq i (1+ i))
    )
    (command "undo" "e")
    (princ)
    )
    

     

    Hề hề hề, bạn xem xem có giống cái bạn đã sửa không hỉ????

    Nhờ bạn giúp cho việc chèn các nút vào các đỉnh đường.

    Cám ơn.


  2. Viết Lisp cho bạn ư?

    Trước hết, bạn hãy đọc những lời khuyên này, khi đọc bạn đừng bỏ qua 1 câu nào hết cho dù là nó hơi dài nhưng rất thâm thúy.

    http://www.cadviet.com/forum/index.php?showtopic=2513

    Cám ơn Bạn đã chỉ chổ TIP để đọc và học những lời khuyên rất thấm thúy.

     

    Thật tình ra mình đang ở một nơi rất ra, nơi vùng lầy nước nổi hàng năm, việc học AutoCAD cũng là một việc phải tầm thầy ở rất xa, đừng nói chi là ngôn ngữ AutoLisp, ...Sưu tầm hay nhờ các bạn viết cho chút đoạn lisp và chạy, mình cảm thấy phấn chấn lên và rất chân thành cám ơn.

     

    Việc tự học Autolisp riêng đối với mình không phải đơn giản, phải tự học lệnh ban đầu xem lisp của các bạn, tự rà lại lệnh là gì,... nhưng lại muốn thể hiện nhanh ý tưởng của mình để Lisp chạy....cho công việc... nhưng không được. Mênh mông trong đống lệnh.

     

    Nhưng có một điều, một số it người giỏi.... lại khó thông cảm với những người mới bắt đầu. Tiến sĩ mà là sao dạy mẫu giáo. phải không Bạn.

    Được giúp thì rất tốt, không giúp thì chưa tốt. Mình không nghĩ vậy đâu. Có cái lương tâm của con người tự soi rọi.

    Chúc Bạn vui - khỏe - thành đạt - hạnh phúc.


  3. 1. Với yêu cầu offset 1 phía thì bạn nên dùng lệnh offset.

    2. Rất khó xác định giao điểm 2 đường PLINE, code này chỉ phục vụ cho việc vẽ đường vạt góc cho 2 đường LINE, không xử lý trim vì để lại đường LINE cho việc vạt góc đường còn lại. Bạn chịu khó trim khi có đầy đủ các đường vạt góc, sau đó nếu cần thì dùng lệnh JL đã có ở trang trước để nối lại thành PLINE.

    Bạn thử xem nếu thấy có thể dùng được thì báo lại nhé:

     

    (defun c:vg ()

    (defun dxf (ent maso)

    (cdr (assoc maso ent))

    )

    (defun diemvuonggoc( p1 p2 p / p0)

    (setq p0 (polar p (+ (angle p1 p2) (* pi 0.5)) 10.0))

    (inters p1 p2 p p0 nil)

    )

     

    (setq ent1 (entsel "\n Chon duong LINE 1:")

    ent2 (entsel "\n Chon duong LINE 2:")

    ent1g (entget (car ent1))

    ent2g (entget (car ent2))

    sp1 (dxf ent1g 10)

    ep1 (dxf ent1g 11)

    sp2 (dxf ent2g 10)

    ep2 (dxf ent2g 11)

    p1 (diemvuonggoc sp1 ep1 (cadr ent1))

    p2 (diemvuonggoc sp2 ep2 (cadr ent2))

    ent1 (car ent1)

    ent2 (car ent2)

    int_point (inters sp1 ep1 sp2 ep2 nil)

    ang1 (angle int_point p1)

    ang2 (angle int_point p2)

    ang (- ang1 ang2)

    ang (abs (* 180.0 (/ ang pi )))

    )

    (cond ((and (> ang 0.0)(<= ang 30.0)) (setq d 20.0))

    ((and (> ang 30.0)(<= ang 40.0)) (setq d 15.0))

    ((and (> ang 40.0)(<= ang 50.0)) (setq d 12.0))

    ((and (> ang 50.0)(<= ang 60.0)) (setq d 10.0))

    ((and (> ang 60.0)(<= ang 80.0)) (setq d 7.0))

    ((and (> ang 80.0)(<= ang 110.0)) (setq d 5.0))

    ((and (> ang 110.0)(<= ang 140.0)) (setq d 20.0))

    ((and (> ang 140.0)(<= ang 160.0)) (setq d 20.0))

    ((and (> ang 160.0)(<= ang 180.0)) (setq d 0.0))

    )

    (setq p1 (polar int_point ang1 d)

    p2 (polar int_point ang2 d))

    (entmake (list (cons 0 "LINE")(cons 10 p1) (cons 11 p2) (cons 8 "chi_gioi")))

    )

    Rất cám ơn bạn.

    Mình đã thử xong, đúng như bạn nói, việc khó khăn trong việc xử lý giữa line và pline

    À... mình nghĩ tìm cách nào chuyển Pline sang line và sau đó sừ dụng lệnh VG được không bạn !

    Rất mong Bạn giúp

    Bạn có lisp của lệnh Offset , ALIGN cho mình xin với, vì mình muốn đổi cho nó việt hoá câu lệnh.


  4. PP xin upload các LISP và 1 bản vẽ để Bác nào quan tâm thì tham khảo thêm:

    http://www.cadviet.com/upfiles/Lisps_xuat_nhap_toa_do.zip

    PP sử dụng trong bản vẽ như sau:

    + Lệnh C2P trong C2P.lsp (do Bác Ssg viết) để chia Pline (màu green) cách khoảng 5 unit.

    + Lệnh COORN trong COORN.lsp để xuất các toạ độ trên Pline ra 1 file Excel/Text.

    + Lệnh TABCORD để vẽ bảng toạ độ trong CAD.

    + Lấy giá tri Z elevation trong bản vẽ để thay các Z trong file toa độ.

    + Lệnh IMPTS trong TAL_ImportPts.lsp đọc file text để vẽ các Points với cao độ Z.

    + Nối các Point lại với nhau.

    LISP cần bổ sung thêm:

    1. Lisp vẽ các Point tại các giao điểm của profile (màu vàng) rồi xuất ra file Excel/Text và 1 bảng toạ độ như COORN.lsp

    2. Sửa lại TAL_ImportPts.lsp để có thể tự động vẽ line nối các point với nhau.

    Xin các Bác help thêm. Thanks you

    P/s: TAL_ImportPts.lsp > http://www.cadviet.com/forum/index.php?showtopic=8894

     

    profilecl2.jpg

    w1080.png

    Rất mong được các anh tổng họp thành một menu vể chuyên đề xuất nhập toạ độ các dạng từ......----->>>> sang Cad <<<---------- và

     

    Rất cám ơn


  5. Lấy font, độ cao hay góc nghiêng text và vẽ point

    (defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht)

    (defun dxf( name n)

    (cdr (assoc n (entget name)))

    )

    (defun gocam( goc)

    (if (< goc 0.0) (+ 360.0 goc) goc)

    )

    (defun pvi( p1 p2)

    (/ (* 180 (angle p1 p2)) pi)

    )

    (defun ra( g)

    (/ (* g pi) 180)

    )

    (defun deg( so)

    (/ (* 180 so) pi)

    )

    (defun diemvuonggoc( p1 p2 p / p0)

    (setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))

    (inters p1 p2 p p0 nil)

    )

    (while (and (setq n1 (entsel "text 1")) (setq n2 (entsel "text 2")))

    (setq n1 (car n1) n2 (car n2))

    (while (setq p (getpoint "\nDiem"))

    (setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))

    (setq h1 (atof st1) h2 (atof st2))

    (if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))

    (setq p (diemvuonggoc p1 p2 p))

    (if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))

    (setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))

    (setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))

    )

    (command "_.text" "s" (dxf n1 7) p (dxf n1 40) (deg (dxf n1 50)) (rtos h 2 3))

    (entmake (list (cons 0 "POINT") (cons 8 "points") (cons 10 p)))

    )

    )

    )

    Nhưng qua lisp này, nhờ các Anh giúp cho công việc nội suy cũng theo đường thẳng đó, nhưng thể hiện theo bước nhảy với số bước nhảy qui định ví như là : 0.5 , 1.0, 2,... thì lisp sẻ tính nội suy và thể hiện ra độ cao theo đường thằng đó với các điển thể hiện cao độ ví như :

    Điểm 1 caođo 2.15 điểm 2 cao độ 3.67 bước nhảy là 0.5

    thì xuất hiện các cao độ 2.50 , 3.0, 3.5 trên đường thẳng qua điểm 1 và 2

    Rất mong được giúp đở :


  6. Mình sưu tầm được 1 lisp nội suy cao độ giữa 2 điểm , ví dụ như : điểm 1 cao độ 1.68 ( dạng điểm và text ) điểm 2 có cao độ 5.64 khi dùng lisp lệnh NOISUY , chọn điểm 1 và 2 lisp noisuy sẻ yêu cầu chỉ điểm đươc tính và thể hiện ra cao độ của điểm đó theo phương đường thẳng qua 2 điểm đó.

    Nhưng qua lisp này, nhờ các Anh giúp cho công việc nội suy cũng theo đường thẳng đó, nhưng thể hiện theo bước nhảy với số bước nhảy qui định ví như là : 0.5 , 1.0, 2,... thì lisp sẻ tính nội suy và thể hiện ra độ cao theo đường thằng đó với các điển thể hiện cao độ ví như :

    Điểm 1 caođo 2.15 điểm 2 cao độ 3.67 bước nhảy là 0.5

    thì xuất hiện các cao độ 2.50 , 3.0, 3.5 trên đường thẳng qua điểm 1 và 2

    Rất mong được giúp đở :

    Lisp sưu tầm :

     

    (defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht)

    (defun dxf( name n)

    (cdr (assoc n (entget name)))

    )

    (defun gocam( goc)

    (if (< goc 0.0) (+ 360.0 goc) goc)

    )

    (defun pvi( p1 p2)

    (/ (* 180 (angle p1 p2)) pi)

    )

    (defun ra( g)

    (/ (* g pi) 180)

    )

    (defun deg( so)

    (/ (* 180 so) pi)

    )

    (defun diemvuonggoc( p1 p2 p / p0)

    (setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))

    (inters p1 p2 p p0 nil)

    )

    (while (and (setq n1 (entsel "text 1")) (setq n2 (entsel "text 2")))

    (setq n1 (car n1) n2 (car n2))

    (while (setq p (getpoint "\nDiem"))

    (setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))

    (setq h1 (atof st1) h2 (atof st2))

    (if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))

    (setq p (diemvuonggoc p1 p2 p))

    (if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))

    (setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))

    (setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))

    )

    (command "_.text" "s" (dxf n1 7) p (dxf n1 40) (deg (dxf n1 50)) (rtos h 2 3))

    (entmake (list (cons 0 "POINT") (cons 8 "points") (cons 10 p)))

    )

    )

    )

     

    Rất cám ơn


  7. Nhờ bạn viết giúp Lisp:

    1. xác định Chỉ giới Xây dựng: ví dụ như sau khi mình có 2 con đường, 1 rộng 10m lộ giới từ tim vào 15m thì vẽ đường chỉ giới xây dựng tính từ tim vào, con đường thứ 2 nối vào chỉ rộng 6m lộ giới là 10m. nhờ bạn lisp vẽ chĩ giới các đường đó. Yêu cầu xác định tim đường, nhập lộ giối, phiấ nào thì vẽ ra chỉ giới xây dựng của các đường đó.

    2. Tính Vạt góc : khi 2 đường chỉ giới xây dựng giao nhau với 1 góc theo qui định thì thì tính vạt góc từ đỉnh giao nhau xác định lùi về với khoảng cách qui định, nối 2 điểm và vẽ đường góc vát, xong xoá đường thừa góc giao nhau:

    Góc và kích thước như sau :

    từ 0 - 30 độ khoảng cách lùi về là 20m x20

    30 - 40 : 15 x1 5

    40 - 50 : 12

    56 - 60 : 10

    60 -80 : 7

    80 - 110 : 5

    110 - 140 :3

    140 - 160 : 2

    160 - 200 : 0

     

    Rất mong được bạn giùp. File ví dụ mình up theo.

     

    http://www.cadviet.com/upfiles/tinh_goc_vat_1.rar


  8. Ô.. Rất hay !!!

    Xin chân thành cám ơn bạn.

    Nhờ bạn phân dùm ra lớp giúp mình với : như lớp tim đường, lề đường và vĩa hè với màu khác nhau và lực nét khác nhau.

     

    và nhờ bạn viết giúp Lisp xác định Chỉ giới Xây dựng: ví dụ như sau khi mình có 2 con đường, 1 rộng 10m lộ giới từ tim vào 15m thì vẽ đường chỉ giới xây dựng tính từ tim vào, con đường thứ 2 nối vào chỉ rộng 6m lộ giới là 10m. nhờ bạn lisp vẽ chĩ giới các đường đó. Yêu cầu xác định tim đường, nhập lộ giối, phiấ nào thì vẽ ra chỉ giới xây dựng của các đường đó.

    Rất mong được bạn giúp


  9. Nhờ bác Hoành viết giúp Em líp vẽ đuờng song song trong qui hoạch giao thông, Lisp yêu cầu xác định Độ rộng mặt đường, độ rộng vĩa hè ( lề đường ) . Khi chọn đường làm tim thì vẽ sang 2 bên thể hiện đường pline mặt đường và vĩa hè ở hai phía.

    Rất mong được Bác giúp, Cám ơn.


  10. - Rõ ràng là cần 1 file thư viện để khi cài lại Cad dễ tạo lại Toolpalette, lúc đó bạn chỉ cần vào bấm Ctrl+2, bấm vào file thư viện, chọn chức năng block rồi mở phím phải chuột sẽ có Creat Toolpalette, tất cả các block trong file đó sẽ chuyển sang 01 toolpalette mới. Còn nếu thấy làm như vậy vẫn phức tạp thì bạn lưu file acad.cui để dùng lại.

    - Bất cứ một thứ gi hiện ra trên bản vẽ bạn đều có thể lôi nó vào Toolpalette, nhưng thường thì chỉ sử dụng block và hatch.

    Chúc bạn vui.

    Xin nhờ Bạn giúp cho cách tạo Hatch

    rất cám ơn


  11. Cám ơn Bạn đã giúp.

    Mình mình đã đưa kí hiệu dạng điểm được rồi và sử dụng chung cho các bản vẽ. nếu gặp trường hợp cài Cad lại thì file này ta phải lưu thế nào ?

    Riêng việc đưa Hatch vào mình chưa làm được mong được Bạn giúp hướng dẫn chi tiết thêm

    nghĩa là mình tạo Hatch trước, tạo Block cho hatch đó, rồi bấm ctrl+2 và copy vào, xong bấm ctrl+3 đưa sang hatch mẫu. Đúng không bạn.

    Mình làm không được


  12. Nhờ Bác giúp em về lisp tao Block của một kí hiệu nào đó, xin chọn và yêu cầu : đặt tên block và lưu vào thư mục như 1 file để dùng chung các bản vẽ khác,

    Líp sưu tần như sau:

     

    (defun c:tbl ()

    (command "undo" "be")

    (setq a (getpoint "\nChon diem thu nhat: "))

    (setq b (getcorner a"\nChon diem thu hai: "))

    (setq luubatdiem (getvar "osmode"))

    (setvar "osmode" 0)

    (setq c (list (/ (+ (car a) (car :undecided:) 2) (/ (+ (cadr a) (cadr :cheers:) 2)))

    (setq ten (getvar "dwgname"))

    (setq so (strlen ten))

    (setq so (- so 4))

    (setq ten (substr ten 1 so))

    (command "select" "W" a b "" "")

    (command "block" ten c "p" "")

    (setvar "osmode" luubatdiem)

    (command "undo" "end")

    (princ)

    )

     

    và ;;;

     

    (defun c:mb()

    (setq p1 (getpoint "\n Nhap diem thu nhat:")

    p2 (getpoint "\n Nhap diem thu hai:")

    p3 (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2))

    )

    (command "block" (getstring "\n Nhap ten block: ") p3 (ssget "w" p1 p2) "")

    (princ)

    )

     

     

    Rất mong Bác giúp


  13. Nhờ Anh viết cho lisp để chọn Hatch, kiểu đường, chèn block

    1. lisp chọn hatch có tên trong thư mục ở support hoặc trong file.pat, ví dụ như : Hatch betong lệnh HBETONG thì chương trình yêu cầu chọn vùng , chọn tỉ lệ hatch, màu hatch.

    2. Lisp chọn loại đường để vẽ, ví như lệnh vẽ đường sắt DSAT thì chọn kiểu đừơng, màu, dộ dài.

    3. Lisp chọn block trong một thư mục , như lệnh chèn , thì lisp chọn tên của block bản vẽ đó ra.

    Vì trình độ có hạn, mong đươc các anh giúp và hướng dẫn cho cách viết để học tập về sau .


  14. Cám ơn Bạn đã quan tâm giúp đỡ cho các anh em.

    Chương trình rất tuyệt !!

    Qua đây mình xin Bạn giúp thêm ý này nửa... nha .

    1. Yêu cầu chọn đường chia song song với cạnh nào và lấy đó là hướng chia.

    2. Chia ra bao nhiêu phần :

    a- Đều nhau :

    a1. Theo một hướng chuẩn chia qua

    a2. Bằng nhau theo cạnh mặt tiền :

    a2.1 Theo 1 hướng chia qua

    a2.2 Theo hướng vuông góc với hướng mặt tiền.

    b- Không đều nhau :

    b1. Tính theo phần trăm (%) của từng phần, phần 1 , 2... yêu cầu cho vào là bao nhiêu?

    b2. Tình theo diện tích qui định trước của từng phần, phần 1 , 2... yêu cầu cho vào là bao nhiêu?

    3. Thể hiện điểm mốc đã chia.

    4. Ghi các số cạnh

    5. Ghi diện tích

    Rất mong được Bạn giúp


  15. ssg đã ghi rõ cái công thức rồi mà : S1/(S1+S2) = K

     

    (S1+S2) là diện tích tổng của thửa đất bạn đã biết

    S1 là diện tích bạn cần chia => bạn cũng biết

     

    vậy thì bạn muốn chia cái thửa thành 2 phần mà phần S1 bạn đã biết thì việc còn lại của bạn là tính cái hệ số K là bao nhiêu rồi nhập nó vào dòng lệnh thì CT nó cho bạn kết quả rồi ????!

     

    Không hiểu bạn có biết tính toán ko nữa, CT đã thoả mãn đầu bài của bạn rồi còn gì...

     

    Đọc kỹ hướng dẫn trước khi sử dụng

    Mình cũng cố gắng đánh vần để hiểu đó bạn

    Ý mình muốn việc chia được cụ thể hơn mà thôi :

    Nếu có một hình đa giác bất kỳ ví dụ có diện tích là 1.023 m2, mà diện cích cần tách ra là 155m2, theo một hướng chia được thống nhất theo một chiều nào đó, từ tây qua đông , bắc xuống nam hay ngược lại.

    Chương trình sẻ tính đúng và vẽ đường line của phần phân chia mới đó,

    Vậy Bạn có hiểu ý không ? Ở đây không cần tính K.

    yên cầu chương trình :

    1. Chọn đa tuyến

    2. Nhập diện tích cần chia

    3. Chọn hướng chia cắt ngang qua hình dáng đa tuyến đó và là phạm vi đề vẽ đưởng line phân cách theo diện tích qui định

    Đọc kỹ Yêu cầu trước khi Làm bài

×