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

Tuynh

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

    56
  • Đã tham gia

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

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


  1. http://www.mediafire.com/download/32yhvb0n2x88g8f/T1.dwg

    Bác giúp em hoàn thiện lisp này được không ạ. Trước em đưa ra bài toán là có bốn diện tích

    Sbùn:

    Sđào:

    Sđắp đường:

    Sđắp  BK:

    Bây giờ số lượng diện tích tăng lên lúc thì bốn diện tích lúc thì 5.... lúc thì 12

    S1:

    S2:

    S3:

    S4:

    S5:

    S6:

    .......

    Bác giúp em sửa lisp để lấy xuất diện tích sang file excell hay dạng text như lisp test trên được không ạ.


  2. Tuyệt vời bạn ạ, Lisp này sẽ giúp mình làm nhanh hơn không phải lách cách nhập số liệu.

    Bạn có thể mở rộng là lisp thêm hoặc bớt đối tượng chọn được không ví dụ: trên là Sbùn:, Sđào:, Sđắp đường, S đắp bờ kênh; bây giờ mình muốn thêm S trồng cỏ:..... hay bớt đi Sbùn: Ý mình là diện tích có bao nhiêu hàng thì lisp quét chọn hết và đưa ra dạng text như bạn đã viết

    Chúc bạn sức khỏe và thành công trong cuộc sống.


  3. Trên diễn đàn cũng có nhiều lisp xuất text sang excel nhưng vẫn không được như ý em, nên em mạo muội lập một topic mới mong các bác giúp đỡ:

    Lisp yêu cầu là quét chọn một loạt sau đó xuất text sang excel theo hàng và theo cột. 

    em có up lên file cad và file excel sau khi dùng lisp được như vậy mong các bác giúp em với

    http://www.mediafire.com/download/t565ylzp5slo1lp/Text+Cad.dwg

    http://www.mediafire.com/download/aeiy13k23za1mim/Khoi+luong.xls


  4. Chào Tuynh, Nếu bạn để các đối tượng text cao độ vào 1 lớp tên là TEXTCAODO, thì lisp sau đây chỉ cần chọn POLYLINE cần update thôi:
    ;; free lisp from cadviet.com
    ;;; Lisp update do cao cho các nút cua 3DOPLY
    ;;; BY Thiep 03/2010
    ;;; Yeu cau: cai dat Express tools
    (defun DXF (code en) (cdr (assoc code (entget en))))
    ;;;------------------------------------
    (defun timgan (p lst / dmin ensave p2 d)
     (foreach l lst
       (setq p2 (car l)
      d  (distance p p2)
       )
       (if	(or (not dmin) (> dmin d))
         (setq dmin d
        ensave l
         )
       )
     )
     ensave
    )
    ;;;---------------------------------
    (defun 3DPoly (Lp *ModelSpace* / PntArr)
     (setq	PntArr (vlax-make-safearray
    	 vlax-vbDouble
    	 (cons 0 (1- (length Lp)))
           )
     )
     (vlax-safearray-fill PntArr Lp)
     (vla-Add3Dpoly *ModelSpace* PntArr)
    )
    ;;;--------------------------------
    (defun c:u3dp (/ ss	   lstentext olsmd     entPL	 lstent
    	 lstentext hei	     Lstnum    lstpo	 lsp p1
    	)
     (or ActDoc
         (setq ActDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
     )
     (or *Model* (setq *Model* (vla-get-ModelSpace ActDoc)))
     (setq olsmd (getvar "OSMODE"))
     (setvar "osmode" 0)
     (command "undo" "be")
     (prompt "\nChon doi tuong 3DPOLYLINE & TEXT cao do:")
     (setq	lstenttext (acet-ss-to-list
    	     (ssget "X" '((0 . "TEXT") (8 . "TEXTDOCAO")))
    	   )
    entPL	   (ssname (ssget '((0 . "POLYLINE"))) 0)
     )
     (setvar "clayer" (dxf 8 entPL))
     (foreach ent lstenttext
       (setq po  (dxf 10 ent)
      hei (distof (dxf 1 ent))
       )
       (if	hei
         (setq Lstnum (cons (cons po hei) Lstnum))
       )
     )
     (setq	lstpo (acet-geom-vertex-list entPL)
    lsp   nil
     )
     (foreach po lstpo
       (setq p1  (timgan po Lstnum)
      lsp (append (list (car po) (cadr po)) (list (cdr p1)) lsp)
       )
     )
     (foreach ent lstenttext
       (setq po (dxf 10 ent))
       (vla-put-InsertionPoint
         (vlax-ename->vla-object ent)
         (vlax-3d-point
    (list (car po) (cadr po) (distof (dxf 1 ent)))
         )
       )
     )
     (entdel entPL)
     (3DPoly lsp *Model*)
     (command "undo" "en")
     (setvar "osmode" olsmd)
     (princ "\nChuc ban thanh cong! Thiep.")
     (princ)
    )

     

    Ngoài lề: Thiep không phải là dân xây dựng, dân cơ khí, hay dân trắc đạc... Thiep chỉ là "lều địa chất" Thiep yêu AutoCad, nhưng rất ít khi dùng Autocad để kiếm tiền. Vậy đó! hề! hề! hề!

    Cám ơn Thiep. Lisp này gần như đã hoàn thiện rùi nhỉ.

    Chúc Thiep sức khoẻ, hạnh phúc, thành đạt!

    Mà đặt là lớp TEXTDOCAO như trong lisp chứ Thiep.


  5. Khi máy báo "Select objects:", Bạn phải chọn cả đối tượng polyline và text cao độ.

    Bạn chép đoạn mã nhắc nhở: (prompt "\nChon doi tuong 3DPOLYLINE & TEXT cao do:")

    vào trước dòng: (setq lstent (acet-ss-to-list (ssget '((0 . "TEXT,POLYLINE"))))).

    Chúc Tuynh thành công.

    Cám ơn Thiep.

    Tuynh làm được rùi.

    Ngoài lề chút nhé, cho Tuynh hỏi là Thiep làm về lĩnh vực gì vậy?


  6. Chào Tuynh, Thiep xin góp 1 lisp update các cao độ các nút của 3Dpoly theo text độ cao của các nút đã chỉnh sữa.

    Thuật toán của lisp là tìm ứng với mỗi text số nào gần nút của 3Dpoly nhất sẽ update cho cao độ ứng với nút ấy.

    ;; free lisp from cadviet.com
    ;;; Lisp update do cao cho các nút cua 3DOPLY
    ;;; BY Thiep 03/2010
    ;;; yeu cau: cài dat express tools
    (defun DXF (code en) (cdr (assoc code (entget en))))
    ;;;------------------------------------
    (defun timgan (p lst / dmin ensave p2 d)
     (foreach l lst
       (setq p2 (car l)
      d  (distance p p2)
       )
       (if	(or (not dmin) (> dmin d))
         (setq dmin d
        ensave l
         )
       )
     )
     ensave
    )
    ;;;---------------------------------
    (defun 3DPoly (Lp *ModelSpace* / PntArr)
     (setq	PntArr (vlax-make-safearray
    	 vlax-vbDouble
    	 (cons 0 (1- (length Lp)))
           )
     )
     (vlax-safearray-fill PntArr Lp)
     (vla-Add3Dpoly *ModelSpace* PntArr)
    )
    ;;;--------------------------------
    (defun c:u3dp (/ ss	   lstentext olsmd     entPL	 lstent
    	 lstentext hei	     Lstnum    lstpo	 lsp p1
    	)
     (or ActDoc
         (setq ActDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
     )
     (or *Model* (setq *Model* (vla-get-ModelSpace ActDoc)))
     (setq olsmd (getvar "OSMODE"))
     (setvar "osmode" 0)
     (command "undo" "be")
     (setq lstent (acet-ss-to-list (ssget '((0 . "TEXT,POLYLINE")))))
     (foreach ent lstent
       (if	(eq (dxf 0 ent) "TEXT")
         (setq lstentext (cons ent lstentext))
         (setq entPL ent)
       )
     )
     (foreach ent lstentext
       (setq po  (dxf 10 ent)
      hei (distof (dxf 1 ent))
       )
       (if	hei
         (setq Lstnum (cons (cons po hei) Lstnum))
       )
     )
     (setq	lstpo (acet-geom-vertex-list entPL)
    lsp   nil
     )
     (foreach po lstpo
       (setq p1  (timgan po Lstnum)
      lsp (append (list (car po) (cadr po)) (list (cdr p1)) lsp)
       )
     )
     (foreach ent lstentext
       (setq po (dxf 10 ent))
       (vla-put-InsertionPoint
         (vlax-ename->vla-object ent)
         (vlax-3d-point
    (list (car po) (cadr po) (distof (dxf 1 ent)))
         )
       )
     )
     (entdel entPL)
     (3DPoly lsp *Model*)
     (command "undo" "en")
     (setvar "osmode" olsmd)
     (princ "\nChuc ban thanh cong! Thiep.")
     (princ)
    )

    Chào hoaletrang, bạn có thể tham khảo hàm con timgan ở lisp trên, hàm này Thiep cũng tham khảo từ bác Hoanh.

    Chào Thiep, Tuynh chạy thử lisp của Thiep nhưng sau khi chạy lisp thì cao độ các đỉnh 3d Polyline lại trở về 0.00 hết Thiep giúp mình xem lại lisp được không?

    Cảm ơn Thiep nhé.


  7. Code mà Tue_NV viết cho Tuynh khi xưa đẹp là thế. Cớ sao bây chừ lại "nông lỗi" như thế lày? :undecided:

     

    Có 2 Lisp lận chứ không phải có 1 Lisp đâu Tuynh. Tue_NV đã giúp cho Tuynh 2 code Lisp. 1 Lisp ghi cao độ . Và sửa cao độ Text và cả 2 Lisp này áp dụng được cho cả POLYLINE và 3DPOLY. Tuynh kiểm tra lại

    Thành thật xin lỗi bác Tue_NV

    Chả hiểu sao khi em copy, paste Code lại nhảy ra kiểu thế, do vội quá em không để ý bác đừng bùn nhé.

    Em đã tìm thấy lisp thứ hai rùi ạ.

    Chúc Tue_NV sức khỏe nhé.


  8. Cảm ơn Tuệ, Thiep bận rộn cả ngày hôm qua, Tuệ đã tiếp tay rất nhanh cho Tuynh.

    Thiep chỉ gợi ý Tue rằng có 1 hàm trong thư viện Express tools tạo POLYLINE rất nhanh, đó là: acet-pline-make.

    Còn lisp trên, Tuynh hãy đợi Tue_NV sẽ thêm vòng lặp để chọn đối tượng đến khi enter thì thôi

    Ngày trước mình có yêu cầu lisp chuyển đường 2d polyline thành đường 3d polyline và được bác Tuệ và bác Thiệp giúp đỡ có một lisp.

    (defun c:2d3d(/ curve pre i p lstdiem z lstpoint x ss oldos)

    (vl-load-com)

    (setvar "orthomode" 0)

    (setvar "cmdecho" 0)

    (setq oldos (getvar "osmode"))

    (setvar "osmode" 0)

    (setq curve (car(entsel "\n Pick chon POlyline 2D hoac Polyline 3D :")))

    (setq pre (vlax-curve-getEndParam curve) i 0 lstdiem '() lstpoint '() ss (ssadd))

    (setq cao (getdist "\n Chon chieu cao chu :"))

     

    (while (<= i pre)

    (setq p (vlax-curve-getPointAtParam curve i))

    (setq lstdiem (append lstdiem (list p)))

    (wtxt (rtos (caddr p) 2 2) p 0 cao)

    (setq ss (ssadd (entlast) ss))

    (setq i (1+ i))

    )

     

    (setq i 0)

    (foreach x lstdiem

    (setq z (getdist x (strcat "\n Nhap cao do cho diem nay <" (rtos (caddr x) 2 2) "> : ") ))

    (setq lstpoint (append lstpoint (list(list (car x) (cadr x) z))))

    (wtxt (rtos z 2 2) (list (car x) (cadr x) z) 0 cao)

    (entdel (ssname ss i))

    (setq i (1+ i))

    )

     

    (command "3dpoly")

    (foreach y lstpoint (command y))

    (command "")

    (entdel curve)

    (setvar "osmode" oldos)

    (princ)

    )

    ;

    (defun wtxt (txt p ang h / sty)

    (setq sty (getvar "textstyle"))

    (entmake (list (cons 0 "TEXT") (cons 7 sty)

    (cons 1 txt) (cons 10 p) (cons 11 p)

    (cons 72 2) (cons 73 1) (cons 50 ang)

    (cons 40 h) (cons 41 0.8))

    )

    )

    các bác có thể chỉnh sửa lisp trên để khi chỉnh sửa text thì cao độ ở đường 3d polyline cũng thay đổi theo.

    cảm ơn các bác trước nhé!

×