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

Bee

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

    553
  • Đã tham gia

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

  • Ngày trúng

    37

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


  1.  

    Mình có đoạn lsp dùng để viết chữ (chữ mặc định), nhưng sau khi gõ lệnh và dùng thì nó bị lỗi font 

    Mình muốn dùng font arial (bảng mã unicode, kiểu gõ vni)

    Mình muốn ghi ra là chữ" MẶT BẰNG TÔN MÁI 

    Mong mọi người sửa dùm tí, mình xin cảm ơn ! 

    
    (DEFUN C:MB (/ TILE P)
      (IF (= (TBLOBJNAME "STYLE" "ARIAL") NIL)
      	(command ".STYLE" "ARIAL" "VNI-ARIAL" "" "" "" "" "" "")
        )
      (SETQ
    	tile (getint "\nTi le: ")
    	p (getpoint "\nChon diem chen text: ")
    	)
      (COMMAND "TEXT" "S" "ARIAL" "J" "MC" P (* TILE 2) "0" "%%UMẶT BẰNNG TÔN MÁI"
    	            )
    )
    
    
    
    
    

    Thử cái này xem nhé ^_^ máy mình ko có vni-arial nên thay bằng helve

    (DEFUN C:MB (/ tile p)
      (IF (= (TBLOBJNAME "STYLE" "ARIAL") NIL)
    ;(command ".STYLE" "ARIAL" "VNI-ARIAL" "" "" "" "" "" "")
        (entmake '((0 . "STYLE")
    	       (100 . "AcDbSymbolTableRecord")
    	       (100 . "AcDbTextStyleTableRecord")
    	       (2 . "ARIAL")	;style name 
    	       (3 . "VNI-HELVE.TTF")	;font file 
    	       (70 . 0)
    	       (40 . 0.0)
    	       (41 . 1.0)
    	       (50 . 0.0)
    	       (71 . 0)
    	      )
        )
      )
      (SETQ
        tile (getint "\nTi le: ")
        p	 (getpoint "\nChon diem chen text: ")
      )
    ;;;  (COMMAND "TEXT" "S" "ARIAL" "J" "MC" P (* TILE 2) "0" "%%UM?T B?NNG TÔN MÁI"
      (entmake (list
    	     (cons 0 "TEXT")
    	     (cons 1 "MAËT BAÈNG TOÂN MAÙI")
    	     (cons 10 p)
    	     (cons 40 (* tile 2))
    	     (cons 7 "ARIAL")
    	   )
      )
    
    )
    

  2. Cám ơn Bee rất nhiều, còn vài chỗ có thể chỉnh sửa lại dùm mình với

    - cái chân vẽ như hình bên dưới

    - các số liệu chỉ đúng vs trường hợp đặc biệt 1/2 đường tròn, fix lại dùm mình nếu nhỏ hơn 1/2 đttròn thì vẫn đúng góc 45* và kt a

    25dfhB4.png

     

    Chúc bee cuối tuần vui vẽ  ^_^  ^_^

    Đã sửa nhé. Yêu cầu điểm 2 là giữa cung. Chắc đúng yêu cầu ^_^

     

    https://drive.google.com/file/d/0B-3fZ45DSr_XM1lLRlFlMnVOZDA/view?usp=sharing

    • Vote tăng 1

  3. Filter xem ở đây. Có thể search thêm.

    Ở phần select filter chọn mtext. Xong apply quơ hết các bảng vào thôi

     

     

     

    Nếu mình hiểu đúng ý thì đây là link lisp paste data từ excel sang cad.

    Mình không có nhiều thời gian viết kỹ nên dùng tạm cái này nhé.

     

    https://drive.google.com/file/d/0B-3fZ45DSr_XMzl0NGl1TjRFVTA/view?usp=sharing

     

    Untitledf94db.png
     
     xem video thao tác 
     
     
    1.Select cell và copy.

    2.Bên cad sau khi load lisp. Gõ lệnh PAS

    3.Select hàng text (xem ảnh)

    4.Xem thôi ^_^

    Sao web không hiện hết lên mà cứ repply thì mới có nhỉ ^_^


  4. Cảm ơn bạn!

    1/ Bạn có thể hướng dẫn chi tiết hơn 1 chút về cách Filter Mtext được không?

    2/ Dùng Lisp "mat" thì vẫn là copy thay từng giá trị Text 1 khá lâu do file mình đang làm có khá nhiều mặt cắt. Có Lisp copy thay được 1 loạt Text từ bảng Excel vào bảng Cad thì mới nhanh được.

    Filter xem ở đây. Có thể search thêm.

    Ở phần select filter chọn mtext. Xong apply quơ hết các bảng vào thôi

     

     

     

    Nếu mình hiểu đúng ý thì đây là link lisp paste data từ excel sang cad.

    Mình không có nhiều thời gian viết kỹ nên dùng tạm cái này nhé.

     

    https://drive.google.com/file/d/0B-3fZ45DSr_XMzl0NGl1TjRFVTA/view?usp=sharing

     

    Untitledf94db.png
     
     xem video thao tác 
     
     
    1.Select cell và copy.

    2.Bên cad sau khi load lisp. Gõ lệnh PAS

    3.Select hàng text (xem ảnh)

    4.Xem thôi ^_^

    • Vote tăng 1

  5. Bổ sung thêm yêu cầu là sau khi thay thế giữ nguyên định dạng và độ rộng của Text bị thay giá trị trên Cad. Mình loay hoay, hí hoáy mãi cuối cùng chịu nhập tay rồi :). Bạn nào có giải pháp xin trợ giúp  :)

    Filter mtext trong bảng chuyển sang style Hue Arial. Xong rồi dùng lisp mat xem thế nào. Chắc mất 5s. ^_^


  6. Anh em xem có lip nào vẽ 3 đường Mline như bên dưới ko vậy? 

    * thông số A tùy chọn, góc nghiên mặc định 45*, định vị = 3 điểm đánh dấu!

     

    Mong anh em chỉ giúp!

    Xin cám ơn!

    Untitled22149.png

    Nghịch thử cái này xem nào ^_^

     

    Dùng mà dư được nhiều thời gian thì mời ae đi cafe nhỉ ^_^ Lệnh ở dòng command khi load lisp.

     

    https://drive.google.com/file/d/0B-3fZ45DSr_XcGhUTXJHLTRtalU/view?usp=sharing

    • Vote tăng 1

  7. Có cách nào ứng với mỗi đoạn thẳng có chiều dài khác nhau thì nó tự động thể hiện tỷ lệ đứt khác nhau ko mọi người

    Về nguyên tắc: vẽ đối tượng trong model để tỷ lệ  1 hết.

    1. Trong layout: để nét đứt tự động đều như nhau ở các viewport tỷ lệ khác nhau thì đặt: PSLTSCALE là 1. Điều chỉnh LTSCALE  (thường 1->10) để xem khoảng cách nét .

    2. Trong model: với tỷ lệ nét 1 ở trên mà muốn xem được thì MSLTSCALE đặt là 1 và Annotation scale of current view (chọn ở góc dưới bên phải-chỗ khung tỉ lệ ) với tỷ lệ tương ứng vẽ (VD: 1-100, 1-50, 1-10 của từng bản vẽ muốn xem nét đứt).

     

    Túm lại gán các biến sau:

    CELTSCALE=1

    PSLTSCALE=1

    MSLTSCALE=1

    LTSCALE= 1->10

    Và object thường để là 1->10 là đủ.

    --> layout sẽ xem được nét đứt đều như nhau ở các view có tỷ lệ khác nhau.

    --->model muốn xem nét đứt thì chọn tỷ lệ tương ứng Annotation scale of current view (tương ứng lệnh _CANNOSCALE) và regen sau khi thay đổi.

     

    Đấy là nét đứt giống nhau.

     

    Nếu khác nhau trong layout thì PSLTSCALE là 0.

    • Vote tăng 1

  8.  

    Cách 1: Lôi họ hàng nhà group ra:  Tools--- Toolbars---- Autocad ---- Group. Đủ tiện ích của họ hàng nhà group cho bạn chọn.

    Cách 2:

    (defun c:AB ()
      (setvar "pickstyle" 0)(princ))
    (defun c:AC ()
      (setvar "pickstyle" 1)(princ))

     

    Cho 2 lệnh thành 1 như thế này tiện hơn ko e :)

    (defun c:ge  ()
      (if (= (getvar "PICKSTYLE") 0)
        (setvar "PICKSTYLE" 1)
        (setvar "PICKSTYLE" 0))
      (princ)
      )
    

  9. đổi _WP thành _CP thì các text có tọa độ nằm ngoài vùng, mà dính đường biên vẫn đc cộng vào bạn àh. Tất cả các anh em lên đây xin lisp thì mục đích chung vẫn là rút ngắn tg hoàn thành công việc thôi. Xong việc này làm tiếp việc khác, chứ chưa chắc đã nhàn đâu. 

    @quocmanh04tt: bên excel mình có đoạn code VBA kiểm tra đc tọa độ text có nằm trong vùng khép kín hay ko? ko biết nó có giúp ích đc gì cho việc làm lisp này ko nhỉ?

    Vấn đề là Ví dụ text nằm trên line sẽ thuộc vùng chọn trái hay phải , trên hay dưới ??????????


  10. - Nếu đổi thành _CP thì 2 bên đường biên đều được cộng vào.

    - Đang xây dựng lisp quét 1 phát là ăn ngay, chứ không phải dí vào từng Vùng Kín một, thế thì mệt lắm! :D

    Hô hô, mềnh là mềnh thích dí vào từng "vùng kín" :D Một phát quét hết thì chủ thớt hết việc ngồi chơi ah. ^_^ Chỉ việc lên đây xin cái lisp làm hết việc xong đi chơi. Nhàn vãi!


  11. Những text có tọa độ nằm trong vùng, nhưng do dính đường biên nên lisp của bạn ko cộng những text này. bạn có thể sửa lại lisp theo tọa độ text lại giúp mình với đc ko? với tự động đặt text cộng được vào vị trí bất kỳ trong vùng nữa thì hoàn hảo.

    cám ơn bạn đã quan tâm giúp đỡ!!

    Thay "_WP" thành "_CP" thì sẽ chọn được hết text. Điểm chèn text chính là điểm chọn bất kỳ ở dòng command line đó.


  12. mình có file gồm nhiều vùng khép kín, trong mỗi vùng có số lượng text (là số) khác nhau. các bạn giúp mình lisp cộng các số đó lại với.

    Thử lisp này nhé. Vòng lặp chọn điểm đặt text từng vùng 1 nhé. 

    (defun c:test  (/ *error* os pt old_last new_last sum n value)
      (defun *error*  (msg)
        (and os
             (setvar 'osmode os)
             )
        (if (and msg
                 (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,"))
                 )
          (princ (strcat "\nError: " msg))
          )
        )
      (setq os (getvar 'osmode))
      (while (setq pt (getpoint "\nChon diem dat text trong vung kin: "))
        (setvar 'osmode 0)
        (setq old_last (entlast))
        (command "-boundary" pt "")
        (setq new_last (entlast))
        (if (equal old_last new_last)
          (princ "\nVung ban chon khong kin.")
          (progn
            (setq ss (ssget "_WP" (mapcar
                                    (function
                                      (lambda (x) (cdr x))
                                        )
                                    (vl-remove-if-not
                                      (function
                                        (lambda (x) (= (car x) 10))) (entget new_last))
                                    )
                            '((0 . "TEXT")))
                  );setq
            (setq sum 0.)
            (setq n 0)
            (repeat (sslength ss)
              (setq value (atof (cdr (assoc 1 (entget (ssname ss n))))))
              (setq sum (+ sum value))
              (setq n (1+ n))
              );repeat
            (entdel new_last)
            (entmake
              (list (cons 0 "TEXT")
                    (cons 10 pt)
                    (cons 40 (getvar 'textsize))
                    (cons 1 (rtos sum 2 0)) 
                    )
              );entmake
            
            ) ;progn else
          ) ;if
        ) ;while
      (setvar 'osmode os)
      (princ)
      ) ;defun
    

    ^_^


  13. Khám bệnh nhé!

    ở dòng: (while (< 1 (length vLst)) ... => chương trình tiếp tục thực hiện nếu số điểm > 1

    Với số điểm còn lại là 2 thì sao? => Nó không vẽ được Arc và báo lỗi như trên.

    => Giải quyết (while (< 2 (length vLst))

    ​*** Sẽ xảy ra trường hợp như ndtnv nói ở bài trước "Lisp của Bee chỉ đổi 2 đoạn liền nhau thành 1 arc, nếu số đoạn lẻ thì mất đoạn cuối"

    Mất đoạn cuối thì đúng rồi. Nhưng mà máy mình ko báo lỗi nào22222.png

     

    3333.png


  14. Bác Bee ơi.

     

    Cho em hỏi chút. Em chạy Lisp này của bác nhưng bị lỗi sau khi vẽ được 1 cung đầu tiên.

    ; error: bad argument type: fixnump: nil

    Theo em hiểu thì nó báo sai định dạng.

    Em thử atof để chuyển nó về Float cũng không được bác nhỉ. Bác giúp em với. 

    Em dùng ( autocad 2009 mechanical)

    Thanks bác.

    Mình test lisp chạy trên file bạn gửi vẫn ok. ACAD2017. Bạn chạy file lỗi thì up lên mình xem rồi mới sửa lisp của mình được.

    • Vote tăng 1

  15. Kính gửi các bác; Hiện giờ E đang bị lỗi của lệnh filter trong autocad, không biết cách sử lý như thế nào. Các cao nhân chỉ cho E nguyên nhân và phương án xử lý như thế nào với ;

    Command: FI

    FI

    The file filter(.lsp/.exe/.arx) was not found in your search path folders.

    Check the installation of the support files and try again.nil

     

    E sử dụng autocad 2007 với 2015 đều bị như vậy

    10656_untitled_1.jpg

    Search thấy bảo thử biến "Demandload" thành 2 hoặc 3 ^_^ Nhớ khởi động lại CAD.


  16. Hy vọng tool "Chạy lisp trên nhiều bản vẽ không mở" này sẽ giúp bạn Bee.

    http://www.mediafire.com/view/1r487p8prox7224/Run_Lsp_Dwgs.png

    http://www.mediafire.com/file/tza07d944tdv7x3/Run_Lsp_Dwgs.zip

    Thanks  Ha,

     

    Đây cũng là ý tưởng hay, dể dùng chung cho các lisp. Mình hay viết riêng script hoặc DBX cho từng lệnh mà không nghĩ ra cách này. Good idea.

     

    Với lisp của Ha (Hà, Hạ, HHHHH....^_^) mình chạy thử lisp test đi kèm thì vẫn chưa run đc script.

    Lần đầu thì báo: ; error: bad argument type: stringp nil

     

    Lần sau : "Run_Lsp_Dwgs.scr": Can't find file.

     

    Mặc dù đã chọn các file trong list file bên phải, file lisp thì chọn lisp test đi kèm, tên hàm thì gán: C:test.

     

    Không biết fix lỗi kiểu nào.?


  17. Nếu dùng lisp thì mình sẽ làm cách này (Đã có sẵn Block mới - có basepoint giống Block cũ - Tên Blk mới và cũ khác nhau):

    1- Mở file BV, load block mới vào file

    2- Quét tất BLK cũ lấy thông tin cần thiết (VD: Insertpoint, Rotation, Scale... List Attribute...)

    3- Xóa block cũ, chèn Block mới tại điểm chèn của block cũ

    4- Update các dữ liệu lấy ở trên lên block mới. (từ bước 2 đến bước 4 này giống lệnh blockreplace mà lohado đã nói ở trên)

    5- Nếu cần thiết: (không thì thôi)

        a. Delete block cũ trong Record Table.

        b. Rename tên blk mới thành tên blk cũ.

    Ok, mình sẽ tham khảo các bước này.

     

    Thanks.

×