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

namhai

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

    81
  • Đã tham gia

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

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


  1. Bạn luu ý là Polyline thì không gắn tên đỉnh cho bạn mà nó là một đối tượng khác. Mình kiếm được 1 cái xuất ra .txt cho bạn về tọa độ của các đỉnh Polyline đây. Còn yêu cầu có thêm tên đỉnh thì bạn nhờ các cao thủ xem thế nào.

    http://www.cadviet.com/upfiles/3/doc_toa_do_pl.lsp

    Bác ponaparte2003 à, em dùng lisp của Bác dùng lệnh Gh rồi sao lại ko được nhỉ? nó báo là Command: GH

    Select objects: 0 found


  2. Đã download file của bạn và mở lên xem rồi!

    Đây là bình đồ thiết kế tuyến chỉ thể hiện tuyến đã thiết kế và các yêu tố cong. Không thể hiện địa hình, địa vật, mốc khống chế, cao độ... thì làm sao mà có đường đồng mức cho bạn được. Đây không thể gọi là bình đồ theo đúng nghĩa do thiếu quá nhiều các đối tượng cần được thể hiện.

    Có thể đây là file bạn xin nên người ta đã xóa hết các đối tượng trên còn nếu là file bạn có thể yêu cầu cấp lại thì bạn nên liên lạc lại với bên cấp file.

    Bình đồ này khi mình mở file và preview thì vẫn thấy đường đồng mức mà, trong bản vẽ có các layer bình đồ bị mờ đi, không hiểu tại sao lại có hiện tượng này nhỉ?e đã mở bằng TOPO nhưng vẫn không được.mong các bác chỉ giáo


  3. em đang làm đồ án tốt nghiệp mong các cao thủ về lisp làm hộ em nhé.Vì công việc chèn cọc rất là lâu đối với tuyến nhiều đường cong.cụ thế là

    :em muốn chèn tên cọc trong nova như là(ND,TD,P,TC,NC) theo thứ tự số cọc trên tuyến nhé.

     

     

    Mong các cao thủ giúp đỡ...Thanks

    Vấn đề này trong Nova không làm được, bàn tim hiểu TOPO đi nhé, TOPO làm việc này đúng theo ý bạn đấy


  4. Chào các bác! Khi copy 1 hay nhiều đối tượng thì đối tượng mình copy được vẫn có cùng tính chất giống như đối tượng gốc, không biết có cách nào giúp mình khi copy thì đối tượng sau khi mình copy có layer, text style hiện hành theo ý mình được không?mong các huynh giúp đỡ, thanks các bác!!


  5. Bận nên không có thời gian xem lại giúp bạn lisp trên. nhưng có cái này share cho bạn.

    Lisp này dùng để ghi cao độ trên trắc ngang và khá đẹp với các trắc ngang chạy bằng nova. có thể chạy được trên cad14 vô tư :rolleyes:

    (defun DXFcn (code elist)
     (cdr (assoc code elist))
    )
    ;============================================================
    (prompt"\n[Cmd:CDX] - GHI CAO DO DIEM TREN TRAC NGANG by Thaistreetz - huuthais@yahoo.com\n")
    ;============================================================
    (defun c:Cdx (); / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1)
    (command "Undo" "BEGIN")
    (if (not h) (setq h 1))
    (if (= tx nil) (setq tx 1))
    (if (= ty nil) (setq ty 1))
    (setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
            tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/")) 
            ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
    (if h1 (setq h h1))
    (if tx1 (setq tx tx1))
    (if ty1 (setq ty ty1))
    (setq ATLAST (getvar "Attreq"))
    (setq CMLAST (getvar "cmdecho"))
    (setq OSLAST (getvar "OSMODE"))
    (setq DZ (getvar "DIMZIN"))
    (setq OT (getvar "ORTHOMODE"))
    (setvar "ORTHOMODE" 0)
    (setvar "cmdecho" 0)
    (command "osmode" 99)
    (setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
    (setq x0 (car pt0) y0 (cadr pt0))
    (setq ed (entget (car (entsel "\nChon cao do tim: "))))
    (setq H0 (read (DXFcn 1 ed)))    
    (command "osmode" 15359) 
    (setq pt (getpoint "\nDiem chen: "))
    (While (/= pt nil)
    (command "osmode" 0)
    (Progn
    (setq ptside (getpoint "\nPhia chen:" pt)
    ang (angle pt ptside))
    (setq y (- (cadr pt) y0 (- H0)))
    (setq x (- (car pt) x0))
    (setvar "DIMZIN" 0)         
    (cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
            ((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
            ((= x 0) (setq x "0.00"))         )
    (cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
            ((< y 0) (setq y (rtos (* y ty) 2 2)))
            ((= y 0) (setq y "%%p0.00")))
    ;(setq x (ustr 0 "Khoang cach: " x T))
    ;(setq y (ustr 0 "Cao do: " y T))
    (progn
    (if (AND (>= ang 0) (< ang (/ pi 2)))
    (setq 	pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
    pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
    pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
    pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
    pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
    (if (AND (>= ang (/ pi 2)) (< ang pi))
    (setq 	pt3 (list (car pt) (+ (cadr pt) (* 1.15 h)))
    pt4 (list (car pt) (+ (cadr pt) (* 2.5 h)))
    pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
    pt6 (list (- (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
    pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
    (if (AND (>= ang pi) (< ang (+ pi (/ pi 2))))
    (setq 	pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
    pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
    pt5 (list (- (car pt4) (* 5 h)) (cadr pt4))
    pt6 (list (- (car pt4) (* 2.6 h)) (+ (cadr pt4) (* 0.8 h)))
    pt7 (list (- (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
    (if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi)))
    (setq 	pt3 (list (car pt) (- (cadr pt) (* 1.15 h)))
    pt4 (list (car pt) (- (cadr pt) (* 2.5 h)))
    pt5 (list (+ (car pt4) (* 5 h)) (cadr pt4))
    pt6 (list (+ (car pt4) (* 2.5 h)) (+ (cadr pt4) (* 0.8 h)))
    pt7 (list (+ (car pt4) (* 2.5 h)) (- (cadr pt4) (* 0.8 h)))))
    );progn
    (command "pline" pt "w" 0 (* 0.45 h) pt3 "w" 0 0 pt4 pt5 ""
     "text" "m" pt6 h 0 y
     "text" "m" pt7 h 0 x)
    (setvar "DIMZIN" DZ)
    (command "osmode" 15359)
    (setq pt (getpoint "\nDiem chen: "))
    );progn
    );while 
    (setvar "OSMODE" OSLAST)
    (setvar "ORTHOMODE" OT)
    (setvar "cmdecho" CMLAST)
    (prompt"\n[GHI CAO DO TRAC NGANG] by Thaistreetz - huuthais@yahoo.com\n")
    (command "Undo" "End")
    (princ)
    );end
    

    - Chọn kích thước của text muốn ghi cao độ (nên chọn bằng hoặc nhỏ hơn 1 chút so với chiều cao các text cao độ trên trắc ngang của bạn)

    - Chọn tỷ lệ vẽ của trắc ngang (Với Nova thì thường là 1:1 nên mình mặc định lisp sẽ lấy giá trị tỷ lệ X là 1/1 và Y là 1/1, nếu tỷ lệ khác thì bạn có thể nhập lại)

    - Chọn điểm tim trắc ngang (điểm tim đường)

    - Chọn cao độ của tim đường (pick chuột vào text cao độ của tim)

    - Chọn các điểm cần tra cao độ.

    - Phía chèn text cao độ: bạn có thể chèn cao độ theo 4 hướng. thử sẽ bít :(

    Bác Thaistreet à, Lisp của bác rất hay, lisp này dùng để tra cao độ thì ổn rồi, nhưng bác có thể giúp e vấn đề này không, vì nhiều lúc e phải sửa trắc ngang bằng Cad (chứ không sửa trong Nova) bằng cách Stretch đường tự nhiên tại các k/c lẻ nên tất nhiên cao độ cũng thay đổi, giờ e đang làm thủ công băng cách Di rồi lại +,-.. để tính lại cao độ rồi lại edit...hic!Có cách nào có thể tự động hoá việc này không, mong các bác giúp đỡ. ý tưởng của e có thể là :

    - Chọn cao độ tại tim đường làm chuẩn

    - sau đó pick vào các điểm mình muốn chèn(Các điểm mình đã thay đổi cao độ)

    - Chọn text mình muốn thay thế(Là text cao độ cũ)

    P/s : E chỉ thay đổi cao độ thôi, còn khoảng cách lẻ vẫn giữ nguyên nên ko cần quan tâm đến k/c lẻ

    Rất mong nhận được sự giúp đỡ của các bác, thanks alot!!

    • Vote tăng 1

  6. Khi e chạy trắc dọc không hiểu sao giá trị bán kính đường cong nằm luôn là 1 giá trị lẻ, khi nhập số liệu bán kính là R=30m nhưng khi chạy trắc dọc và trắc ngang giá trị bán kính lại là R=30.02. Có cách nào xử lý được vấn đề này không mong các huynh chỉ giáo, thanks các huynh nha!!!


  7. e có đoạn lisp điền cao độ trắc ngang nhưng không hiểu sao không sử dụng được, mong các huynh sửa giúp

     

    (defun c:goc ()

    (setvar "cmdecho" 0)

    ;(setq osm (getvar "osmode"))

    (if (= sc nil)(setq sc (getreal (strcat"\nChon ty le ve (=kt ve/kt Autocad):"))))

    (prompt "\n*****Chu y: Ty le hien tai la*****:")(princ sc)

    ;(if (/= sc2 nil)(setq sc sc2))

    ;(command ".zoom" "e")

    ;(setq sspl (SSGET "c" '(10.5 20.25) '(10.5 27.5) (LIST(CONS 0 "lwpolyline"))));su dung khi ban ve co 1 cn o toa do co dinh

    ;(if (= th nil) (setq th (ssget "w" '(10.5 19.25 0) '(11.5 18.00 0) (list(cons 0 "TEXT")))))

    ;(command "zoom" "p")

    (if (and (= a nil)(/= sspl nil))(setq a (cdr(assoc 10 (entget (ssname sspl 0))))))

    (IF (= a nil)

    (setq a (Getpoint "\n Chon mot diem lam chuan (co cao do):"))

    (progn

    (setq kitu nil)

    (initget "Co Khong")

    (setq kitu (getkword "\n Ban co chon lai diem chuan khong?[Co/Khong]:"))

    (If (= kitu "Co")(setq a (Getpoint "\n Chon lai diem lam chuan (co cao do):")))

    )

    )

     

    ;(if (and(= nil g)(/= nil th)) (setq g (atof (cdr (ASSOC 1 (ENTGET (SSNAME th 0)))))))

    (IF (= nil g)

    (progn

    (prompt "Khong co cao do tai vi tri can tim!")

    (setq g (Getreal "\n Nhap cao do diem chuan [bang ban phim/Chon tren man hinh]:" ))

    (if (= nil g)

    (progn

    (setq sscd (entsel "\n Moi ban chon cao do tren man hinh:"))

    (setq g (atof (cdr (assoc 1 (entget (car sscd))))))

    (prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:"))

    )

    )

    )

    (If(= kitu "Co")

    (progn

    (setq g (Getreal "\n Nhap lai cao do diem chuan [bang ban phim/Chon tren man hinh]:" ))

    (if (= nil g)

    (progn

    (setq sscd (entsel "\n Moi ban chon lai cao do tren man hinh:"))

    (setq g (atof (cdr (assoc 1 (entget (car sscd))))))

    (prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:"))

    )

    )

    )

    )

    )

    )

    • Vote tăng 1

  8. 1. Góp ý với NamHai : Mình không nên đặt tiêu đề có từ là cao thủ : nghe kì kì thế nào đó. Hơn nữa tiêu đề bạn nên đặt rõ ràng để nêu bật lên nội dung của nó ? Bạn xem lại tiêu đề bạn đã đặt rõ ràng chưa?

    Tue_NV góp ý chân tình đó

    2. Bạn có thể đọc bài viết này :

    Bai viet so 8

    vâng, e sẽ rút kinh nghiệm. cám ơn bác nhiều nha! :(


  9. Mong các bác viết giúp e lisp giải quyết vấn đề sau : giống như lệnh Di nhưng sau khi đo khoảng cách lisp sẽ cộng khoảng cách vừa đo vào 1 text có sẵn trên bản vẽ. Thanks các bác nhiều nhé, chúc mọi người tuần mới vui vẻ :tongue2:

    P/S : khoảng cách là khoảng cách giữa 2 điểm chứ không phải khoảng cách X, Y giống như khi dùng lện Di

    hic!sao không ai giúp mình vấn đề này với ạ?


  10. Mong các bác viết giúp e lisp giải quyết vấn đề sau : giống như lệnh Di nhưng sau khi đo khoảng cách lisp sẽ cộng khoảng cách vừa đo vào 1 text có sẵn trên bản vẽ. Thanks các bác nhiều nhé, chúc mọi người tuần mới vui vẻ :tongue2:

    P/S : khoảng cách là khoảng cách giữa 2 điểm chứ không phải khoảng cách X, Y giống như khi dùng lện Di


  11. Lisp của mình chỉ xuất chuẩn ra excel khi bảng text của bạn phải có đầy đủ text ở các hàng và các cột, đồng thời text theo hàng phải có giá trị tọa độ y giống nhau, text theo cột phải có tọa độ x giống nhau.

    Đây là file cad của e

    http://www.cadviet.com/upfiles/2/file_cad.dwg

    sau khi e sử dụng lisp của bác cho ra kết quả : http://www.cadviet.com/upfiles/2/file_excel.rar

    bác xem qua có gì chỉ giúp e sai sót ở đâu với, chúc bác vui khoẻ:-)


  12. Cám ơn tác giả đã bỏ công sức ra viết phần mềm này, nhưng nghe cách quảng cáo của tác giả củ chuối quá, nên tôi phải có ý kiến thế này:

    1. Phần mềm này của tác giả chả có ý nghĩa gì lắm với dân thiết kế chuyên nghiệp, vì dân thiết kế cầu đường đều có các phần mềm thiết kế chuyên ngành như Nova hay Roadplan vừa thiết kế vừa xuất bảng khối lượng ra ngon lành rồi, chả giới hạn bao nhiêu mặt cắt cả.

    2. Tác giả làm phức tạp hóa vấn đề, tôi chỉ cần dùng 1 đoạn lisp là có thể xuất toàn bộ text khối lượng ra file excel là hết việc (cái này tôi đã làm rồi), không phải viết phần mêm như tác giả.

     

    Lisp xuat text ra excel

    Bác Civil à, khi dùng lisp của bác thì bảng text trong Cad có phải cần yêu cầu gì không?bảng khối lượng trong Cad có nhiều hàng, nhiều cột nhưng khi dùng lisp xt thì khi xuất sang excel thì tất cả chỉ nằm trong 1 côt, nhiều hàng, e thấy lisp này rất hay, mong bác chỉ giúp e cách sử dụng, thanks bác nhiều!!


  13. Tue_NV không hiểu tại sao chủ đề này của bạn đã post lâu rồi. Nay sao lại post ở đây nữa???

    http://www.cadviet.com/forum/index.php?sho...c=11716&hl=

    vâng, đúng rồi bác Tue_NV à, chủ đề này e đã hỏi trên Cadviet rùi nhưng vẫn chưa tìm được đáp án và e nghĩ vấn đề của e chác là phải dùng đến lisp thì mới giải quyết được nên e mạo muội mở lại Topic này 1 lần nữa trong mục Autolisp, mong bác giúp đỡ!!


  14. Chào bạn Namhai,

    Mong bạn hãy trình bày rõ hơn cái ý bạn muốn.

    1/- Các đối tượng được chọn là loại đối tượng gì??? Có giống nhau hoàn toàn hay không???

    2/- Mỗi lần sắp xếp lại một nhóm đối tượng riêng hay là sắp xếp tất cả các loại đối tượng một lần???

    3/- Cách sắp xếp tính từ vị trí đã chọn ra sao ??? từ trái qua phải, từ trên xuông dưới, hay ngược lại, hay lấy vị trí chọn là vị trí trung tâm.....????

    4/- Việc sắp xếp này có quan tâm tới trật tự phát sinh của các đối tượng hay không??? và nếu có thì theo nguyên tắc nào?????

     

    Bạn nên cung cấp file mẫu và file kết quả bạn muốn để mọi người dễ hình dung.

    Chúc bạn vui.

    e xin lỗi vì đã diễn đạt không rõ ràng, cảm ơn các bác đã quan tâm, đây là file mẫu, các bác xem qua có gì giúp đỡ e với

    http://www.cadviet.com/upfiles/2/file_mau.rar


  15. Chào các huynh!e đang gặp vấn đề khi phải sắp xếp các đối tượng (1 nhóm đối tượng) cách đều nhau, nếu phải căn chỉnh khoảng cách rồi move các nhóm đối tượng thì rất mất thời gian và lại không chính xác, vậy có cách nào giải quyết được vấn đề này không mong các huynh giúp đỡ?thanks các bác nhiều nhiều!!

    P/S : Khi sắp xếp các đối tượng sẽ có 1 đối tượng làm gốc ( nghĩa là đối tượng đấy sẽ giữ nguyên vị trí, các đối tượng còn lại sẽ sắp xếp theo đối tượng gốc đấy) và có thể lựa chọn sắp xếp theo phương X, phương Y hoặc cả 2 phương

    • Like 1
    • Vote giảm 1

  16. Tuyệt! Cám ơn anh Hoành nhiều!

    Chương trình NP sửa lại đơn giản như sau:

     

    (defun C:NP( / p ss e1 e2) ;;;Noi tiep pline
    (setq
     p (getpoint "\nChon diem cuoi line, pline hoac arc:")
     ss (ssget "c" p p '((0 . "LINE,LWPOLYLINE,ARC")))
     e1 (ssname ss 0)
    )
    (command "pline" p)
    (while (< 0 (getvar "CMDACTIVE")) (command pause))
    (setq e2 (entlast))
    (if (= (cdr (assoc 0 (entget e1))) "LWPOLYLINE")
     (command "pedit" e1 "j" e2 "" "")
     (command "pedit" e1 "y" "j" e2 "" "")
    )
    (princ)
    )
    

     

    Ssg hỏi thêm anh Hoành cái này nữa. Ssg thường dùng dấu móc nhọn <...> để gán các giá trị mặc định trong các dòng nhắc lệnh. Ví dụ:

    mocnhon2.jpg

    với hàm ý nếu user không muốn nhập điểm nữa thì Enter để kết thúc vòng lặp. Kiểu này đúng như phong cách của chính AutoCAD. Ví dụ:

    Command: OFFSET

    Specify offset distance or [Through] <5.0000>:

    Nếu user Enter sẽ chấp nhận giá trị offset distance trong cặp móc nhọn là 5.0 mà không cần nhập số.

    Tuy nhiên, khi cho vào trong codebox của diễn đàn, dấu móc nhọn bị mã hoá khác đi, không giữ được nguyên trạng nữa. Anh Hoành có thể xử lý chỗ này được không?

    Tuyệt vời quá!!thanks bác nhiều nha!!


  17. Thử xem, lệnh NP. Nếu chưa đúng ý thì reply:

    (defun C:NP( / p ss);;;Noi tiep pline
    (setq
     p (getpoint "\nChon diem cuoi line, pline hoac arc:")
     ss (ssget "c" p p '((0 . "LINE,POLYLINE,LWPOLYLINE,ARC")))
    )
    (command "pline" p (getpoint p "\nDiem tiep theo:") "")
    (command "pedit" (entlast) "j" ss "" "")
    (princ)
    )

    Bác Ssg à, Bác có thể cải tiến hơn 1 chút nữa là sau khi dùng lệnh np sẽ vẽ được đường pline 1 cách bình thường,ở đây e thấy lisp này chỉ nỗi thêm 1 đường line, nếu mình muốn vẽ nối tiếp nhiều đường thì bất tiện quá, cảm ơn bác nhiều nhiều nha!!


  18. Mong các huynh giúp e lisp này với? e muốn vẽ nối tiếp 1 đường pline đã có, hiện tại e đang phải làm thủ công bằng cách vẽ pline mới có start point là điểm cuối của pline trước rồi phải dùng lệnh nối line thành pline. e muốn nhờ các bác viết giúp lisp vẽ nối tiếp 1 đường thẳng, nghĩa là có 1 đường pline đang vẽ dở, bây giờ mình muỗn vẽ tiếp pline còn đang dang dở ấy. cảm ơn các bác nhiều


  19. Em đang dùng CAD2004 nhưng mấy bữa gần đây khi dùng chột chọn đối tượng thì phải mấy mấy giây đối tượng được chọn mới hiển thị, vẽ rất bực minh. Bác nào biết chỉ dùm em để sửa cái lỗi này với. Thank!

    Bạn bấm F9 xem có được không?có lần mình cũng bị như vậy rồi


  20. Bạn phải chuột vào tab model hay layout bất kỳ, chọn new layout from template... rồi chọn file mẫu (đã có khung tên sẵn trong layout) rồi chọn tên layout mẫu (file đó có nhiều layout). Khung tên ở layout trong file này sẽ được copy vào layout mới.

    Nhưng có cách nào để khung tên luôn có sẵn trong layout của tất cả các file cad của không hả bác Hoành?

×