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

Ai có Lisp đưa các nét vẽ về cùng một mặt phẳng cho em xin với ạ!!!

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

Các đại ka cho em hỏi có lisp nào đưa các nét vẽ về cùng 1 mặt phẳng ko ạ, ai có cho em xin với, giờ bản vẽ của em các nét cứ chạy lung tung hết cả, vẽ rất khó vì ko fillet được, hix, các đại ka cứu em vớ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
Các đại ka cho em hỏi có lisp nào đưa các nét vẽ về cùng 1 mặt phẳng ko ạ, ai có cho em xin với, giờ bản vẽ của em các nét cứ chạy lung tung hết cả, vẽ rất khó vì ko fillet được, hix, các đại ka cứu em với!!!

Bạn sử dụng lệnh EXPLAN của Express Tool.

hoặc dùng LISP mình sưu tầm được. sau khi Load sử dụng lệnh : FLAT

;;; FLATTEN.LSP version 2k.01f, 14-Jul-2000
;;;
;;; FLATTEN sets the Z-coordinates of these types of objects to 0
;;; in the World Coordinate System:
;;;  "3DFACE" "ARC" "ATTDEF" "CIRCLE" "DIMENSION"
;;;  "ELLIPSE" "HATCH" "INSERT" "LINE" "LWPOLYLINE"
;;;  "MTEXT" "POINT" "POLYLINE" "SOLID" "TEXT"
;;;
;;;-----------------------------------------------------------------------
;;; copyright 1990-2000 by Mark Middlebrook
;;;   Daedalus Consulting
;;;   e-mail: mark@markcad.com
;;;
;;; Before you e-mail me with support questions, please make sure that
;;; you're using the current version. You can download it from
;;; [url="http://markcad.com"]http://markcad.com[/url].
;;;
;;; This program is free software. You can redistribute it and/or modify
;;; it under the terms of the GNU General Public cấp quyền as published by
;;; the Free Software Foundation: [url="http://www.gnu.org/copyleft/gpl.html"]http://www.gnu.org/copyleft/gpl.html[/url].
;;;
;;; Thanks to Vladimir Livshiz for improvements in polyline handling
;;; and the addition of several other object types.
;;;
;;;-----------------------------------------------------------------------
;;; Revision history
;;;  v. 2k.0   25-May-1999  First release for AutoCAD 2000.
;;;  v. 2k.01  25-Jun-1999  Fixed two globalization bugs ("_World" & "_X")
;;;                         and revised error handler.
;;;  v. 2k.01f 14-Jul-1999  Added GNU GPL and download info to header.
;;;
;;;-----------------------------------------------------------------------
;;;*Why Use FLATTEN?
;;;
;;; FLATTENing is useful in at least two situations:
;;;  1) You receive a DXF file created by another CAD program and discover
;;;     that all the Z coordinates contain small round-off errors. These
;;;     round-off errors can prevent you from object snapping to
;;;     intersections and make your life difficult in other ways as well.
;;;  2) In a supposedly 2D drawing, you accidentally create one object with
;;;     a Z elevation and end up with a drawing containing objects partly
;;;     in and partly outside the Z=0 X-Y plane. As with the round-off
;;;     problem, this situation can make object snaps and other procedures
;;;     difficult.
;;;
;;; Warning: FLATTEN is not for flattening the custom objects created by
;;; applications such as Autodesk's Architectural Desktop. ADT and similar
;;; programs create "application-defined objects" that only the
;;; application really knows what to do with. FLATTEN has no idea how
;;; to handle application-defined objects, so it leaves them alone.
;;;
;;;-----------------------------------------------------------------------
;;;*How to Use FLATTEN
;;;
;;; This version of FLATTEN works with AutoCAD R12 through 2000.
;;;
;;; To run FLATTEN, load it using AutoCAD's APPLOAD command, or type:
;;;   (load "FLATTEN")
;;; at the AutoCAD command prompt. Once you've loaded FLATTEN.LSP, type:
;;;   FLATTEN
;;; to run it. FLATTEN will tell you what it's about to do and ask you
;;; to confirm that you really want to flatten objects in the current
;;; drawing. If you choose to proceed, FLATTEN prompts you to select objects
;;; to be flattened (press ENTER to flatten all objects in the drawing).
;;; After you've selected objects and pressed ENTER, FLATTEN goes to work.
;;; It reports the number of objects it flattens and the number left
;;; unflattenened (because they were objects not recognized by FLATTEN; see
;;; the list of supported objects above).
;;;
;;; If you don't like the results, just type U to undo FLATTEN's work.
;;;
;;;-----------------------------------------------------------------------
;;;*Known limitations
;;;  1) FLATTEN doesn't support all of AutoCAD's object types. See above
;;;     for a list of the object types that it does work on.
;;;  2) FLATTEN doesn't flatten objects nested inside of blocks.
;;;     (You can explode blocks before flattening. Alternatively, you can
;;;     WBLOCK block definitions to separate DWG files, run FLATTEN in
;;;     each of them, and then use INSERT in the parent drawing to update
;;;     the block definitions. Neither of these methods will flatten
;;;     existing attributes, though.
;;;  3) FLATTEN flattens objects onto the Z=0 X-Y plane in AutoCAD's
;;;     World Coordinate System (WCS). It doesn't currently support
;;;     flattening onto other UCS planes.
;;;
;;;=======================================================================

(defun C:FLAT (/       tmpucs  olderr  oldcmd  zeroz   ss1     ss1len
                 i       numchg  numnot  numno0  ssno0   ename   elist
                 etype   yorn    vrt     crz
                )
 (setq tmpucs "$FLATTEN-TEMP$")        ;temporary UCS

 ;;Error handler
 (setq olderr *error*)
 (defun *error* (msg)
   (if (or
         (= msg "Function cancelled")
         (= msg "quit / exit abort")
       )
     ;;if user cancelled or program aborted, exit quietly
     (princ)
     ;;otherwise report error message
     (princ (strcat "\nError: " msg))
   )
   (setq *error* olderr)
   (if (tblsearch "UCS" tmpucs)
     (command "._UCS" "_Restore" tmpucs "._UCS" "_Delete" tmpucs)
   )
   (command "._UNDO" "_End")
   (setvar "CMDECHO" oldcmd)
   (princ)
 )

 ;;Function to change Z coordinate to 0

 (defun zeroz (key zelist / oplist nplist)
   (setq oplist (assoc key zelist)
         nplist (reverse (append '(0.0) (cdr (reverse oplist))))
         zelist (subst nplist oplist zelist)
   )
   (entmod zelist)
 )
 ;;Setup
 (setq oldcmd (getvar "CMDECHO"))
 (setvar "CMDECHO" 0)
 (command "._UNDO" "_Group")
 (command "._UCS" "_Delete" tmpucs "._UCS" "_Save" tmpucs "._UCS" "_World")
                                       ;set World UCS

 ;;Get input
 (prompt
   (strcat
     "\nFLATTEN sets the Z coordinates of most objects to zero."
   )
 )

 (initget "Yes No")
 (setq yorn (getkword "\nDo you want to continue : "))
 (cond ((/= yorn "No")
        (graphscr)
        (prompt "\nChoose objects to FLATTEN ")
        (prompt
          "[press return to select all objects in the drawing]"
        )
        (setq ss1 (ssget))
        (if (null ss1)                 ;if enter...
          (setq ss1 (ssget "_X"))      ;select all entities in database
        )


        ;;*initialize variables
        (setq ss1len (sslength ss1)    ;length of selection set
              i      0                 ;loop counter
              numchg 0                 ;number changed counter
              numnot 0                 ;number not changed counter
              numno0 0                 ;number not changed and Z /= 0 counter
              ssno0  (ssadd)           ;selection set of unchanged entities
        )                              ;setq

        ;;*do the work
        (prompt "\nWorking.")
        (while (< i ss1len)            ;while more members in the SS
          (if (= 0 (rem i 10))
            (prompt ".")
          )
          (setq ename (ssname ss1 i)   ;entity name
                elist (entget ename)   ;entity data list
                etype (cdr (assoc 0 elist)) ;entity type
          )

          ;;*Keep track of entities not flattened
          (if (not (member etype
                           '("3DFACE"     "ARC"        "ATTDEF"
                             "CIRCLE"     "DIMENSION"  "ELLIPSE"
                             "HATCH"      "INSERT"     "LINE"
                             "LWPOLYLINE" "MTEXT"      "POINT"
                             "POLYLINE"   "SOLID"      "TEXT"
                            )
                   )
              )
            (progn                     ;leave others alone
              (setq numnot (1+ numnot))
              (if (/= 0.0 (car (reverse (assoc 10 elist))))
                (progn                 ;add it to special list if Z /= 0
                  (setq numno0 (1+ numno0))
                  (ssadd ename ssno0)
                )
              )
            )
          )

          ;;Change group 10 Z coordinate to 0 for listed entity types.
          (if (member etype
                      '("3DFACE"    "ARC"       "ATTDEF"    "CIRCLE"
                        "DIMENSION" "ELLIPSE"   "HATCH"     "INSERT"
                        "LINE"      "MTEXT"     "POINT"     "POLYLINE"
                        "SOLID"     "TEXT"
                       )
              )
            (setq elist  (zeroz 10 elist) ;change entities in list above
                  numchg (1+ numchg)
            )
          )

          ;;Change group 11 Z coordinate to 0 for listed entity types.
          (if (member etype
                      '("3DFACE" "ATTDEF" "DIMENSION" "LINE" "TEXT" "SOLID")
              )
            (setq elist (zeroz 11 elist))
          )

          ;;Change groups 12 and 13 Z coordinate to 0 for SOLIDs and 3DFACEs.
          (if (member etype '("3DFACE" "SOLID"))
            (progn
              (setq elist (zeroz 12 elist))
              (setq elist (zeroz 13 elist))
            )
          )

          ;;Change groups 13, 14, 15, and 16
          ;;Z coordinate to 0 for DIMENSIONs.
          (if (member etype '("DIMENSION"))
            (progn
              (setq elist (zeroz 13 elist))
              (setq elist (zeroz 14 elist))
              (setq elist (zeroz 15 elist))
              (setq elist (zeroz 16 elist))
            )
          )

          ;;Change each polyline vertex Z coordinate to 0.
          ;;Code provided by Vladimir Livshiz, 09-Oct-1998
          (if (= etype "POLYLINE")
            (progn
              (setq vrt ename)
              (while (not (equal (cdr (assoc 0 (entget vrt))) "SEQEND"))
                (setq elist (entget (entnext vrt)))
                (setq crz (cadddr (assoc 10 elist)))
                (if (/= crz 0)
                  (progn
                    (zeroz 10 elist)
                    (entupd ename)
                  )
                )
                (setq vrt (cdr (assoc -1 elist)))
              )
            )
          )

          ;;Special handling for LWPOLYLINEs
          (if (member etype '("LWPOLYLINE"))
            (progn
              (setq elist  (subst (cons 38 0.0) (assoc 38 elist) elist)
                    numchg (1+ numchg)
              )
              (entmod elist)
            )
          )

          (setq i (1+ i))              ;next entity
        )
        (prompt " Done.")

        ;;Print results
        (prompt (strcat "\n" (itoa numchg) " object(s) flattened."))
        (prompt
          (strcat "\n" (itoa numnot) " object(s) not flattened.")
        )

        ;;If there any entities in ssno0, show them
        (if (/= 0 numno0)
          (progn
            (prompt (strcat "  ["
                            (itoa numno0)
                            " with non-zero base points]"
                    )
            )
            (getstring
              "\nPress enter to see non-zero unchanged objects... "
            )
            (command "._SELECT" ssno0)
            (getstring "\nPress enter to unhighlight them... ")
            (command "")
          )
        )
       )
 )

 (command "._UCS" "_Restore" tmpucs "._UCS" "_Delete" tmpucs)
 (command "._UNDO" "_End")
 (setvar "CMDECHO" oldcmd)
 (setq *error* olderr)
 (princ)
)

;(prompt  "\nFLATTEN version 2k.01f loaded.  Type FLATTEN to run it.")
;(princ)

;;;eof

Chỉnh sửa theo gia_bach
  • Vote tăng 2
  • 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

Chào bác gia_bach! Lisp này của bác thật là hay! Cái này e hay vấp phải lằm, e vẫn phải làm 1 cách rất thủ công là select tất cả các đối tượng rồi Ctrl+1 để chỉnh sửa từng đối tượng, rồi cũng xong nhưng mất hơi nhiều tg. E đã dùng thử cái lisp của bác và thấy ngon lành quá trời! Cảm ơn bác nhiều nhiều! Em cũng sẽ tổng hợp những lisp mà forum chưa nói tới để post lên share cho ae!

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

Gia_bach và mọi người ơi cứu mình với, mình có file 2d dùng lisp flatten để cho các nét vẽ đồng phẳng, nhưng khi chuyển xong rồi thì nét vẽ vỡ tùm lum àh, không ra hình dáng gì nữa cả,. giúp mình nha. mà mọi người chuyển về đồng phẳng có lâu không vậy, mình ngồi chờ cả tiếng àh.

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

anh xem giùm em nha. file này thì nó chuyển nhanh không lên tới tiếng đồng hồ đâu, có lẽ nó phụ thuộc vào dung lượng.

đây là file gốc

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

và file sau khi em đã chuyển

http://www.cadviet.com/upfiles/2/file2.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
anh xem giùm em nha. file này thì nó chuyển nhanh không lên tới tiếng đồng hồ đâu, có lẽ nó phụ thuộc vào dung lượng.

đây là file gốc

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

và file sau khi em đã chuyển

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

Tên lệnh là : FLAT

Sau khi Load lisp sử dụng lệnh : FLAT, có sự nhầm lẫn trong file FLATTEN.LSP ,(vì khi Post tui giữ nguyên file gốc FLATTEN.LSP của tác giả) :cheers:

Bạn thử lại xem sao ...

 

Thời gian thực hiện lệnh khá lâu có thể bạn đã thực thi lệnh FLATTEN của Express Tool. với tùy chọn Remove hidden lines = Yes

Command: FLATTEN

Select objects to convert to 2d...

Select objects: Specify opposite corner: 5 found

Select objects:

Remove hidden lines? : Y

 

Tui đã kiểm tra và phát hiện khi thực thi lệnh FLATTEN với tùy chọn Remove hidden lines = Yes thời gian thực hiện lệnh khá lâu (tính bằng phút)

Tuy nhiên khi thực thi lệnh FLATTEN với tùy chọn Remove hidden lines = No thời gian thực hiện lệnh chấp nhận đuợc (tính bằng giây)

 

Không biết tại sao trong t/hợp này Express Tool sử lý hơi tệ ?!

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

em cũng đã thử với lựa chọn yes và no, kiểm tra và layon tất cả các layer thì khi đấy mình nên chọn yes.

kiểm tra code em cũng không rành lắm, vì code anh upload chỉ hiểu cho lệnh flatten, thế sửa lại bằng lệnh flat thì làm sao àh. có cách nào khắc phục không anh

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
em cũng đã thử với lựa chọn yes và no, kiểm tra và layon tất cả các layer thì khi đấy mình nên chọn yes.

kiểm tra code em cũng không rành lắm, vì code anh upload chỉ hiểu cho lệnh flatten, thế sửa lại bằng lệnh flat thì làm sao àh. có cách nào khắc phục không anh

Có sự nhầm lẫn trong file FLATTEN.LSP

Tên lệnh trong file FLATTEN.LSP là FLAT

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ào bác ! Em đã thử lisp của bác và gặp phải 1 vấn đề là như thế này :

Do trình độ " nông dân " nên khi vẽ sdkg cấp nước theo kiểu rotate3d : chuyển mặt bằng từ 2d về 3d . Với những đoạn ống đứng em lại vẽ trong không gian 2d. Do vậy bản vẽ của e là 1 tổng thể các đoạn khác không gian.

Sau khi e dùng lisp của bác thì 1 số đoạn thẳng được tách biệt hẳn ra khỏi tổng thể ( nghĩa là tự động các đoạn thẳng di chuyển đến 1 vị trí khác so với vị trí trong tổng thể đó của em), hic = với việc phá hỏng toàn bộ liên kết đường đi mà e đã vẽ trước đó !

Vậy bác có thể giải thích làm rõ vấn đề này hộ e đc k ạ? Em xin cảm ơn !

Nếu mà cần đến bản vẽ e sẽ ắp lên sau nhờ bác xem giùm !

:cheers:

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

em hiểu ý của anh nhưng mà khi đánh dòng lệnh flat thì cad không hiểu, nó chỉ hiểu lệnh flatten thôi. em thử load lại bằng dòng lệnh flat nhưng cad vẫn không hiểu. anh nói rõ hơn cách sửa để cad hiểu lệnh flat đượ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
em hiểu ý của anh nhưng mà khi đánh dòng lệnh flat thì cad không hiểu, nó chỉ hiểu lệnh flatten thôi. em thử load lại bằng dòng lệnh flat nhưng cad vẫn không hiểu. anh nói rõ hơn cách sửa để cad hiểu lệnh flat được không
Có thể bạn gặp lỗi này : Tham khảo

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ác bác cho em xin file có đuôi lsp được không? Em copy từ bài viết của bác gia_bach rồi paste vào File Notepad - Save - Đổi đuôi lsp. Sau đó dùng lệnh AP để load vào CAD thành công. Rồi gõ lệnh Flat thì CAD báo là :Unknown command "FLAT"

Em cảm ơn ạ!

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  

×