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

thiep

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

    514
  • Đã tham gia

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

  • Ngày trúng

    48

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


  1. Xin mời các bác tiếp tục thư giãn với câu hỏi của anh Thiêp!

    Gợi ý sơ bộ: Ngay trong trang này còn tồn đọng ít nhất là 5 câu đố của em vẫn chưa có lời giải. Giải được 1 trong các câu đố ứ thì sẽ giải bài vẽ đa giác ngoại tiếp 1 đường cong kín Spline.

    7x3= 21 ngày nữa em sẽ đưa ra lời giải của một trong các câu đố trên! Và lời giải ứ sẽ là gợi ý chính thức để giải câu đố của anh Thiếp! Chúc các bác vui, khoẻ!

    Chào Haanh, đã hơn 21 ngày trôi qua, mà chưa có ai giải được câu đố này. Bản thân Thiêp cũng phải nhờ lisp để tạo 1 đa giác ngoại tiếp với 1 SPLINE kín chứ không vẽ bằng lệnh thông thường được. Thôi thì nhờ Haanh giải, Thiêp sẽ học mót thêm 1 vài chiêu thủ thuật vẽ nữa của Haanh nhé.

    • Vote tăng 1

  2. các bạn choi hỏi, lisp này bị sao mà không dùng được trong CAD2010, trong khi trong CAD2008 vẫn dung bình thường

    (defun c:fr()
     (graphscr)
     (setvar "Cmdecho" 0)
     (Princ "FILLET\n")
     (command "_.Fillet" "_mUltiple" "_Radius")
     (setvar "Cmdecho" 1)
     (princ)
     )

     

    CAD08 :

    gõ lệnh fr --> nhập bán kính --> chọn 2 đối tượng là line giao nhau cần bo tròn góc

     

    CAD10:

    gõ lệnh fr--> nhập bán kính --> thoát lệnh.

     

    vậy là sao hả mọi người. Xin được chỉ giáo.

    Sau hàng (Princ "FILLET\n")

    Bạn sửa lại như sau:

    (setvar "filletrad" (getreal "\nRadius: "))

    (command "_.Fillet" "_mUltiple" pause pause)

    • Vote tăng 1

  3. Nhân ngày 20-10 thay mặt ông xã em , em xin gửi tới tất cả các bác trên diễn đàn những bông hoa của núi rừng và của biển cả

    để các bác tặng người thân và bè bạn!

     

    Những bông hoa rừng thật thanh khiết đầm ấm tình cảm mà thiên nhiên đã ban tặng cho con người!

    Những bông hoa rừng Mộc Châu thật đẹp, thật quyến rũ, hòa quyện với hoa rau muống biển, hiên ngang với sóng, khoe sắc cho đời.

    Cảm ơn Haanh, Chúc các bạn nữ cười thật tươi nhân ngày 20 - 10.

     

    cvoff20091_69.jpg

     

    Thiep xin gửi tặng các mem nữ 1 bài hát của Lê Hựu Hà nhân ngày 20 - 10 nhé.

     

    Hãy Ngước Mặt Nhìn Đời

     

    Sáng tác: Lê Hựu Hà

     

    Cười lên đi em ơi

    Dù nước mắt rớt trên vành môi

    Hãy ngước mặt nhìn đời

    Nhìn tha nhân ta buông tiếng cười

    Ta không cần cuộc đời

    Toàn những chê bai và ganh ghét

    Ta không cần cuộc đời

    Toàn những khoe khoang và thấp hèn

     

    Cười lên đi em ơi

    Cười để giấu những dòng lệ rơi

    Hãy ngước mặt nhìn đời

    Nhìn đổi thay ta vang tiếng cười

    Ta không thèm làm người

    Thà làm chim trên rừng hoang vắng

    Ta không thèm làm người

    Thà làm mây bay khắp phương trời

     

    Yêu thương gì loài người

    Ngoài những câu trau chuốt với đời

    Ngoài những toan tính trong tiếng cười

    Và những âm mưu dọn thành lời

    Ta chỉ cần một người

    Cùng với ta đợi chết mỗi ngày

    Rồi hóa thân trong loài hoa dại

    Để muôn đời không biết đớn đau

     

    Cười lên đi em ơi

    Cười để giấu những dòng lệ rơi

    Hãy ngước mặt nhìn đời

    Chờ ngày xuôi tay xong kiếp người

    Yêu thương gì cuộc đời

    Toàn những chê bai và ganh ghét

    Yêu thương gì cuộc đời

    Toàn những phô trương và thấp hèn


  4. Bạn tìm xem có file *.bak không? nếu có đổi đuôi thành *.dwg ( với điều kiện là bạn phải để chế độ autosave và thời gian ngắn thôi, nếu bạn để t = 30phút hay 1h thì chịu :bigsmile:

    Theo kinh nghiệm thì nên tập cho mình thói quen là khi vẽ xong một công đoạn thì save lại, công đoạn được chia ngắn hay dài thì tuỳ, nhưng cứ sau khoảng 10 lệnh save là đẹp :bigsmile:

    Bác duonghung1210 bị nhầm rồi, file có đuôi *.sv$ mới đúng, file này thường mặc định trong c:\Documents and Settings\Administrator\Local Settings\Temp\

    các bác ơi giờ em save file ở dạng *.dwg là nó tự nhiên có một file *.bak suất hiện cùng cái file *.dwg của mình

    Còn file *.bak khi nào save thì file cũ tự động đổi thành đuôi *.bak, tuy nhiên nếu người dùng đặt biến hệ thống ISAVEBAK =0 khi không thích Cad lưu file *.bak này thì không có file *.bak

    • Vote tăng 1

  5. Bạn xem load lại xem thế nào chứ mình đã thử trên: pline, spline, line, arc, circle điều đúng cả. Cách giải quyết của bác ssg đơn giản mà dể hiểu mình có thể chôm để làm nhiều việc khác :bigsmile:

    Lỗi ở chỗ khi User chọn khoảng cách vượt quá chiều dài curve tính từ điểm mốc 0,0 theo hướng đo! Như vậy phải thêm:

    Nếu: k> d (chiều dài curve tính từ điểm mốc 0,0 theo hướng đo) thì thông báo ....

    còn không thì thực hiện tìm điểm p2...


  6. Hình như bạn Thiep chưa hiểu đúng ý Duy? Duy tham khảo code sau và hoàn thiện thêm (kiểm tra giá trị user nhập vượt quá phạm vi curve...):

    (defun C:POC( / c p1 oldos ph k d1 dh p2) ;;;Point On Curve
    (vl-load-com)
    (setq
     c (car (entsel "\nChon curve:"))
     p1 (getpoint "\nDiem chuan tren curve:")
     oldos (getvar "osmode")
    )
    (entmake (list (cons 0 "POINT") (cons 10 p1)))
    (setvar "osmode" 512)
    (setvar "pdmode" 34)
    (setq
     ph (getpoint p1 "\nDiem dinh huong tren curve:")
     k (getreal "\nKhoang cach:")
     d1 (vlax-curve-getDistAtPoint c p1)
     dh (vlax-curve-getDistAtPoint c ph)
    )
    (if (> dh d1) (setq d2 (+ d1 k)) (setq d2 (- d1 k)))
    (setq p2 (vlax-curve-getPointAtDist c d2))
    (entmake (list (cons 0 "POINT") (cons 10 p2)))
    (setvar "osmode" oldos)
    (princ)
    )
    

    Chào bác SSG, cảm ơn bác, vâng Thiep đã hiểu sai về điểm chuẩn trên curve, do bác Duy782006 không nói rõ đó là mốc 0,0 từ đó bắt đầu đo khoảng cách. Tuy nhiên lisp của bác đôi khi nó báo lỗi: ; error: bad DXF group: (10)... Thiep chưa rõ lỗi này?


  7. Mình cũng đang lấn cấn cái vụ này nên xin đưa ra yêu cầu mang tích tổng quát nhất mọi người có thể giúp mình viết lisp với.

    -Chọn đối tượng (spline, line, lpine, arc....).

    -Chọn 1 điễm cơ sở (thuộc đối tượng do mình pick).

    -Hỏi khoảng cách muốn xác định.

    -Hỏi hướng cần xác định.

    -Vẽ 1 point tại điểm đó.

    Cám ơn!

    Chào bác duy782006, Lisp dpo.lsp Thiep viết gần đáp ứng yêu cầu của bác. Thiep đề nghị một số ý như sau:

    - Chọn 1 điểm cơ sở (thuộc đối tượng do mình pick) cũng chính là điểm pick khi chọn đối tượng, và cũng dùng điểm này để xác định vị trí đầu curve (từ endpoint hay từ startpoint) từ đó để đo khoảng cách để cần xác định điểm point (giống như trong lệnh ME). Đây là lisp Thiep đã chỉnh sửa:

    (defun c:dpo (/ po dis en len dis dis1 pick)
     (setq olos (getvar "osmode"))
     (setvar "osmode" 8)
     (setvar "pdmode" 34)
     (setvar "pdsize" 1)
     (setq pick (entsel "\nPick a curve: "))
     (while (null pick)
       (princ "\nIncorect curve, Pick a curve again:")
       (setq pick (entsel "\nPick a curve:: "))
     )
     (setq	en   (car pick)
    dis1 (vlax-curve-getDistAtPoint
           en
           (vlax-curve-getClosestPointTo en (cadr pick))
         )
     )
     (command ".LENGTHEN" en "")
     (setq len (getvar "perimeter"))
     (setq dis (getreal "\nEnter distance: "))
     (if (<= dis len)
       (progn
         (if (> dis1 (/ len 2))
    (setq dis (- len dis))
         )
         (setq po (vlax-curve-getpointAtdist en dis))
         (entmake (list (cons 0 "POINT") (cons 10 po)))
         (princ po)
       )
       (princ (strcat "\nKhoang cach dua vao > chieu dai cua curve vua chon (= "
    	   (rtos len 2 2)
    	   ")"
       )
       )
     )
     (setvar "osmode" olos)
     (princ)
    )


  8. Chào Thiep

    Mình thấy đoạn Code có 2 nhược điểm lớn như sau :

    1 . Phải nhớ số lần thực hiện lệnh

    2 . Khi phát lệnh move -> thực hiện Unmove thì Lisp sẽ đưa đối tượng về vị trí cũ sau khi move. Tuy nhiên, ta muốn unmove nhiều lần thì Lisp không thể làm được.

     

    Cụ thể như thế này :

    Ta Move 1 tập hợp chọn là SS -> ta Unmove 1 tập hợp chọn là SS1 là tập hợp con của SS,

    và sau khi Unmove SS1 thì ta nhận thấy trong tập hợp con còn lại SS2 (SS - SS1),

    ta thấy có 1 số đối tượng trong SS2 có 1 số đối tượng bị Move nhầm -> ta lại thực hiện Unmove trong tập hợp chọn SS2 thì lúc này Lisp không thể làm được

    Chào Tue-NV cảm ơn Tue đã thấy những khuyết điểm của lisp unmove này. Thiep còn phát hiện thêm 1 vài khuyết điểm nữa. Lisp này chỉ là để chữa cháy thôi, nếu để chạy ngon thì phải đầu tư nhiều mã hơn nữa. Chắc là bó tay và bó luôn cả chân nữa thôi.

    • Vote tăng 2

  9. không ý mình là mình từ A fình tìm được điểm B cách đó 15 m,sau đó từ điểm B mình tìm dưọc điểm C cách đó 35m .Làm sao có thể tìm được điểm trên Spl mà khoảng cách mỗi điểm là không = nhau cơ mà .Chứ bằng nhau thì tìm = mesure thì mình biết rồi .dù sao cũng cảm ơn bạn

    Gởi bạn đoạn lisp này:

    (defun c:dpo (/ po dis en len)
     (setq olos (getvar "osmode"))
     (setvar "osmode" 8)
     (setvar "pdmode" 34)
     (setvar "pdsize" 1)
     (prompt "\nSelect a cuver: ")
     (setq en (ssname (ssget '((0 . "*LINE"))) 0))
     (command ".LENGTHEN" en "")
     (setq len (getvar "perimeter"))
     (setq dis (getreal "\nEnter distance: "))
     (if (<= dis len)
       (progn
         (setq po (vlax-curve-getpointAtdist en dis))
         (entmake (list (cons 0 "POINT") (cons 10 po)))
         (princ po)
       )
       (princ (strcat "\nKhoang cach dua vao > chieu dai cua curve vua chon (= "
    	   (rtos len 2 2)
    	   ")"
       )
       )
     )
     (setvar "osmode" olos)
     (princ)
    )


  10. Tôi mới tìm hiểu về Cad nên còn gà về vấn đề này lắm, tôi mong các bạn chỉ giáo giúp: Trong CAD có lện nào để Convert 3D polyline to Polyline. Cảm ơn

    Vẫn còn 1 cách nữa, xin tiếp cận tạo lisp để Convert 3D polyline to Polyline với các các hàm acet-... mà không cần nổ đối tượng:

    ;| Convert 3D polyline to Polyline Lisp
    yeu cau: express tools day du|; 
    (defun c:3d->2d (/ ssg ss lstptmp e L)
     (prompt "\nSelect polyline: ")
     (setq	ssg (ssget '((0 . "POLYLINE")))
    lstptmp	nil
    i 0)
     (while (< i (sslength ssg))
       (setq e (ssname ssg i))
       (setq L (ACET-GEOM-VERTEX-LIST e))
       (foreach ptemp L
         (setq lstptmp (append lstptmp (list(list (car ptemp) (cadr ptemp)))))
       )
       (ACET-LWPLINE-MAKE (List lstptmp))
       (setq i (1+ i)
      lstptmp nil
       )
       (entdel e)
     )
     (princ)
    )

    • Vote tăng 3

  11. Chào anh Thiệp, tại sao trong lisp của anh thỉnh thoảng báo lỗi "bad argument type: lselsetp "? Anh có thể sửa lại để không bị lỗi này nữa được ko?

    Thêm 1 điều nữa là tại sao khi đưởng thẳng chạy qua 1 bộ XREF và Hatch nào đó thì khi dùng lisp này nó lại xóa luôn cả bộ XREF và Hatch đó chứ ko còn là trim nữa?

    Nhờ anh xem giúp, xin cảm ơn :bigsmile:

    Chào study_foreve, bạn có thể gửi file DWG của bạn để Thiep xem trong bản vẽ của bạn có gì lạ không! Ví dụ, các đối tượng không đồng phẳng, đang bị khóa lớp, ...?


  12. Bạn hãy dùng công thức tính diện tích bằng tọa độ. Nếu kq quả là dương là ngược chiều kim đồng hồ. kq âm là thuận chiều kim đồng hồ

    Công thức tính diện tích bằng tọa độ viết bằng lisp hình như là vậy, bạn kiểm tra lại, mình kg nhớ rõ

    .......

    TRUNGNGAMY, cảm ơn bạn.

    Thuật toán này thật tuyệt và đơn giản, Thiệp đã áp dụng thành công:

    ;| Lisp xac dinh Lwpolyline duoc tao co cac dinh theo thu tu
      thuan chieu hay nguoc chieu kim dong ho
      Yeu cau: Express tools duoc cai dat day du|;
    (defun tinhdientich (lis / dt i)
     (setq dt 0.0)
     (setq i 0)
     (setq lis (append lis (list (car lis))))
     (repeat (- (length lis) 1)
       (setq dt (+	dt
    	(- (* (car (nth i lis)) (cadr (nth (1+ i) lis)))
    	   (* (cadr (nth i lis)) (car (nth (1+ i) lis)))
    	)
         )
       )
       (setq i (1+ i))
     )
     (/ dt 2.0)
    )
    (defun c:clockwise (/ en lstp dt)
     (setq	en   (ssname (ssget '((0 . "LWPOLYLINE"))) 0)
    lstp (ACET-GEOM-VERTEX-LIST en)
     )
     (If (minusp (tinhdientich lstp))
       (princ
         "\LWP duoc tao co thu tu dinh NGUOC chieu kim dong ho"
       )
       (princ
         "\LWP duoc tao co thu tu dinh THUAN chieu kim dong ho"
       )
     )
     (princ)
    )

    Thiệp thử dùng cái này

    (defun c:tabcord(/ aCen cAng cCen cPl cRad cReg

    (princ "\n Type TABCORD to fill table of LwPolyline coordinates ")

    tivanteo, Cảm ơn bạn.

    Lisp của bạn cho thiep rất tuyệt, rất có ích cho các nhà Địa chính, trắc đạc. Nó tạo ra 1 TABLE tọa độ các góc ranh, và rất tuyệt khi đưa các tên điểm ranh ra ngoài ranh.


  13. Vấn đề của bạn là làm sao xác định đuợc tâm của đa tuyến (vị trí gắn kim đồng hồ ấy mà).

    Sau khi có tâm, lần luợt duyệt qua các đỉnh -> tính góc của đỉnh.

    phụ thuộc vào số đo các góc tăng hay giảm -> các đỉnh được tạo theo thứ tự ngược chiều kim đồng hồ hay thuận chiều kim đồng hồ.

    Thuật toán của Giabach hay lắm, Thiep sẽ làm ngay.


  14. Thiệp viết hơi bị khó hiểu.

    có phải là : ghi Text tại đỉnh Pline theo thứ tự vị trí cùng chiều hay ngược chiều kim đồng hồ.

    Không phải là ghi text tại đỉnh đa tuyến đâu bác Gia_bach ạ, mà là làm sao xác định được đa tuyến có các đỉnh được tạo theo thứ tự ngược chiều kim đồng hồ hay không?


  15. Nhờ các anh em giúp cho Thiep 1 đoạn mã lisp: làm sao khi pick vào 1 đa tuyến kín, thì Cad sẽ in ra màn hình đa tuyến được tạo bởi các điểm theo thứ tự vị trí cùng chiều hay ngược chiều kim đồng hồ.

    Đây là 1 hình ảnh đa tuyến được tạo bởi các điểm theo thứ tự vị trí ngược chiều kim đồng hồ:

    chieutaodatuyen.jpg


  16. thanks bạn, đúng cái mình cần đây rồi :bigsmile: :bigsmile:

    bạn có thể cho mình hỏi thêm cách bỏ đi các lựa chọn xóa đối tượng gốc và chọn layer thì phải xóa đi đoạn code nào??

    Thanks!

    Chào hdg2318, đây là file multioffset, thiep chỉnh sửa lại để không còn hỏi lớp, và hỏi có xóa đối tượng gốc không:

    http://www.cadviet.com/upfiles/2/multioffs...ong_hoi_lop.lsp


  17. Vâng Eem sẽ thử, nhưng mà anh cho Eem thêm cái file dữ liệu *.csv nữa, nhớ thiết kế cho N hàng ứng với N khung tên nhé, với trình tự tiêu đề cột trong file *.csv như sau: TENBANVE; TENTUYEN; BANVESO; KYHIEU; TYLE; TENBANVE,

    Trong khi chờ đợi Thaistreet, các bạn dùng ví dụ về file *.csv này thử:

    http://www.cadviet.com/upfiles/2/ttattribute.zip

    trong file *.csv này có 6 hàng dữ liệu tương ứng với 6 blockref, các bạn copy block khungten thêm 5 nữa,

    Khi lisp yêu cầu: Select objects, các bạn dùng chế độ chọn là fence "f", làm như vậy để đối tượng nào dính fence trước sẽ được lisp xử lý trước,

    Còn đây là file lisp:

    ;| Lisp thay doi gia tri thuoc tinh cua cac block reference
                CHANGE-ATTRIB.LSP V1:  10-2009                
    ---------------------------------------------------------|;
    (defun serapate	(row sym /  st1 row)
     (setq L nil)
     (while (setq vitri (vl-string-search sym row 1))
       (setq st1 (substr row 1 vitri))
       (setq L (append L (list st1)))
       (setq row (vl-string-left-trim st1 row))
       (setq row (vl-string-left-trim sym row))
     )
     (append L (list row))
    )
    (defun SS-enlst	(ss / c L)
     (setq c -1)
     (repeat (sslength ss)
       (setq L (cons (ssname ss (setq c (1+ c))) L))
     )
     (reverse L)
    )
    (defun getatt (itm)
     (vlax-safearray->list
       (vlax-variant-value
         (vla-GetAttributes itm)
       )
     )
    )
    
    ;;;-----------------------------------------------------------
    (vl-load-com)
    ;;;------- Main Program -----------
    (defun c:chattCSV (/ fn f L blSet objbl attLst i n m)
     (setq fn (getfiled "Select data file" "c:/" "csv" 0))
     (setq f (open fn "r"))
     (read-line f)
     (princ "<<< Select blocks to change attributes >>>")
     (if (setq blSet (ssget '((0 . "INSERT") (66 . 1))))
       (setq blSet (mapcar 'vlax-ename->vla-object (SS-enlst blSet)))
     )
     (setq	n 0
    m (length blSet))
     (while (and (setq S (read-line f)) (< n m))
       (setq L	 (serapate S ",")
      objbl	 (nth n blSet)
      attLst (getatt objbl)
      i	 0
       )
       (foreach att attLst
         (vla-put-textstring att (nth i L))
         (setq i (1+ i))
       )
       (setq n (1+ n))
     )
     (cond ((and (< n m) (not (read-line f)))
     (alert "\nThe Numbers of blocksrefs more than the numbers of data rows.
    	\n                   Finish input data from file. ")
     )
    ((read-line f)
      (alert
        "\nThe Numbers of data rows more than the numbers of blocksrefs.
        \n                    Finish input data from file. "
      )
    )
    (t (alert "\n             Lisp's mission accomplished !
    	  \n              Finish input data from file.
    	  \nTHANK YOU FOR USE LISP CHANGE ATTRIBUTES FOR BLOCKS. THIEP"))
     )
     (close f)
     (princ)
    )

    Chúc các bạn thành công!!!

    • Vote tăng 1

  18. Chào thiep. Không thể dùng cái này được

    (command "undo" 1)
    ....
    -> (command "redo")

     

    Vì khi ta zoom hoặc Pan bằng chuột giưã -> để kéo rê hoặc phóng to thu nhỏ

    thì khi (command "redo") sẽ trả về hành động mà ta Zoom hoặc Pan -> chứ không phải trả về hành động Move

     

    Command: u INTELLIPAN

    Command: U INTELLIPAN

     

    -> Reply trả lởi bài viết của thiep ở dưới :

    Zoom hoặc PAN bằng chuột giữa để kéo rê hoặc phóng to thu nhỏ đối tượng thì làm sao để biết mình sử dụng lệnh bao nhiêu lần hở Thiep?????

    Rep: Chào Tue_NV, khi dùng bánh xe lăn thì cad hiểu đã phát ra 1 lệnh chính thức, bấm vào chuột trái để chọn đối tượng kiểu windows thì coi như cũng đã phát ra 1 lệnh rồi. Các trường hợp này, mình phải nhớ đã pick bao nhiêu lần mới được.


  19. Em tthử với cái khung tên của em xem thế nào nhé :bigsmile:

    Những chỗ em khoanh tròn là các Attribute

    Vâng Eem sẽ thử, nhưng mà anh cho Eem thêm cái file dữ liệu *.csv nữa, nhớ thiết kế cho N hàng ứng với N khung tên nhé, với trình tự tiêu đề cột trong file *.csv như sau: TENBANVE; TENTUYEN; BANVESO; KYHIEU; TYLE; TENBANVE,


  20. Cảm ơn anh Thiệp đã nhiệt tình giúp đỡ, em đã dùng thử qua và thấy lisp anh viết đã gần như là đạt được mong muốn, tuy nhiên nếu có thể thì anh có thể fix lại những đặc điểm này giúp em được không ạ:

    - Sau khi dùng lệnh Move, nếu như mình dùng chế độ zoom bản vẽ hoặc ấn phím ESC (Cancel) thì sau đó lệnh Unmove của lisp không còn tác dụng.

    - Mỗi lần move chỉ được 1 đối tượng, có cách nào có thể select nhiều Object để unmove thì hay quá.

    Nhờ các anh xem giúp, em xin cảm ơn :bigsmile:

    Tại Hai_1410 nói "vừa mới move" nên lisp chỉ đúng cho trường hợp "vừa mới move", nghĩa là sau khi enter lệnh MOVE thì không có lệnh nào được gọi tiếp. Còn sau lệnh move User đã enter N lệnh thì dùng lisp đã update sau:

    (defun dxf (id en) (cdr (assoc id (entget en))))
    (defun c:unmove	(/ en1 p1 en2 p2 ss)
     (setq	k (cond	(k)
    	(0)
      )
     )
     (setq oldk k)
     (setq
       k (getint
    (strcat	"\nNumber of command entered after move: <"
    	(itoa oldk)
    	"> : "
    )
         )
     )
     (if (null k)
       (setq k oldk)
     )
     (setq	en1 (entlast)
    p1  (dxf 10 en1)
     )
     (command ".undo" (+ k 1))
     (setq	en2 (entlast)
    p2  (dxf 10 en2)
     )
     (repeat (+ k 1) (command ".redo"))
     (princ "\n<<< Pick objects to undo move >>>")
     (setq ss (ssget))
     (command ".move" ss "" p1 p2)
     (princ)
    )
    

    Hai nên nhớ bấm Esc cũng là đã enter 1 lệnh rồi đó.

    • Vote tăng 2

  21. Cách dùng Undo của bạn là một ý tưởng hay. Tuy nhiên nó chỉ đúng với 1 đối tượng (nếu vậy thì dùng luôn lệnh Undo luôn có phải nhanh hơn không). Ý bạn Hai_1410 là Move một số đối tượng nhưng trong số đó có chọn nhầm vài đối tượng không cần Move.

    Chào nataca, vâng, 1 số đối tượng không cần move và nó lỡ bị move rồi, bây giờ dùng lisp của Thiep sẽ đưa nó về vị trí cũ. Vẫn đúng với nhiều đối tượng vừa bị move chứ nataca?


  22. Thiep có 1 ý tưởng như thế này: Bản vẽ chèn block có nhiều thuộc tính: ví dụ: TENBANVE, NGUOIVE, NGUOIKIEMTRA, GIAMDOC, SOBANVE,... Các số liệu thuộc tính này của từng bản vẽ được lưu và đã hoàn thịện trước ở trong 1 file excel chuyển qua đuôi *.csv; các cột thuộc tính được sắp xếp đúng trình tự trước sau của các thuộc tính có trong block. ví dụ như sau:

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

    Tạo lisp để tải file dữ liệu *.csv, pick lần lượt từng block 1, các dữ liệu từng hàng 1 từ trên xuống dưới trong file *.csv sẽ nhảy vào các thuộc tính trong block và tự động update ngay không cần phải regen.

    .... không biết ý tưởng này có hay không? mời các bạn cùng Thiep tham gia viết lisp nhé.

    Không ai có khen chê, bình luận ý tưởng này gì à?, Thiep đã có mã rồi, chỉ còn chờ các bạn hưởng ứng thôi. Nếu bạn nào hưởng ứng với ý tưởng này thì up cho mình file dwg và cả file *.csv để mình test lisp nhé.

×