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

conghoa

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

    568
  • Đã tham gia

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

  • Ngày trúng

    14

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


  1. Góp ý chút xíu thôi nhé. Không có ý chê bai gì. 

    Mình chỉ thấy là tốn thời gian mất công cái này làm gì. Theo hệ thống thì cứ layout, sheetset, Xref, Publish là in ấn hàng loạt theo ISO. Quan trọng là hệ thống đã có và bắt những người Joint hệ thống phải làm theo. Đỡ mất công sức.

     

    Loay hoay tốn time chỉ để cho những "người không chuyên nghiệp" nghịch thì không nên.

     

    Bác cứ đùa, chủ yếu là các công ty có dính đến nước ngoài mới làm layout thôi bác. Biết là làm chuyên nghiệp thì vẫn tốt nhưng mà đó là bác làm với nhưng công trình đã layout, sheetset từ đầu. Nếu bác nhận được bản vẽ để vẽ tiếp mà người ta đã làm trên model rồi, mà từ đó lại bắt đầu chuyển vô sheetset với layout thì ... 

     

    Theo quan điểm của em thì layout thực sự có lợi với các bộ môn cơ điện. Còn đối với kiến trúc thì cũng không hẳn là hay lắm :)


  2.  

    Thử lisp này, thay lệnh test tùy ý nhé. ^_^

     

    https://youtu.be/6NyEJFNnIwM

    (defun c:test (/ ss lst _angle)
      (vl-load-com)
      (command "undo" "be")
      (if (setq ss (ssget '((0 . "DIMENSION"))))
        (progn
          (setq lst	(vl-remove-if
    		  '(lambda (e) (> (cdr (assoc 42 (entget e))) 900.))
    		  (vl-remove-if
    		    'listp
    		    (mapcar 'cadr (ssnamex ss))
    		  )
    		)
          )					;setq
          (setq _angle (angle (cdr (assoc 11 (entget (car lst))))
    			  (cdr (assoc 11 (entget (cadr lst))))
    		   )
          )
          (cond
    	((or (= _angle 0)
    	     (= _angle pi)
    	 )
    	 (dim_hor lst)
    	)				;#cond1
    	((or (= _angle (/ pi 2))
    	     (= _angle (* pi 1.5))
    	 )
    	 (dim_ver lst)
    	)				;#cond2
    	(_angle
    	 (dim_ lst _angle)
    	)				;#cond3
          )					;#cond
        )					;progn
        (princ "\nBan da khong chon dim.!")
      )					;if
      (command "undo" "end")
      (princ)
    )
    (defun dim_hor (l / lst pt)
      (setq	lst (vl-sort l
    		     '(lambda (e1 e2)
    			(< (car (cdr (assoc 11 (entget e1))))
    			   (car (cdr (assoc 11 (entget e2))))
    
    			)
    		      )
    	    )
      )
      (foreach x lst
        (if	(= (rem (vl-position x lst) 2) 0)
          (progn
    	(if (>=	(cadr (cdr (assoc 10 (entget x))))
    		(cadr (cdr (assoc 14 (entget x))))
    	    )
    
    	  (setq	pt (polar (cdr (assoc 11 (entget x)))
    			  (* pi 1.5)
    			  (* 2 (txt_height x))
    		   )
    	  )
    	  (setq	pt (polar (cdr (assoc 11 (entget x)))
    			  (/ pi 2)
    			  (* 2 (txt_height x))
    		   )
    	  )
    	)
    	(vlax-put (vlax-ename->vla-object x) 'TextPosition pt)
          )					;progn
        )					;if
      )					;foreach
    )					;defun
    (defun dim_ver (l / lst pt)
      (setq	lst (vl-sort l
    		     '(lambda (e1 e2)
    			(< (cadr (cdr (assoc 11 (entget e1))))
    			   (cadr (cdr (assoc 11 (entget e2))))
    
    			)
    		      )
    	    )
      )
      (foreach x lst
        (if	(= (rem (vl-position x lst) 2) 0)
          (progn
    	(if (>=	(car (cdr (assoc 10 (entget x))))
    		(car (cdr (assoc 14 (entget x))))
    	    )
    
    	  (setq	pt (polar (cdr (assoc 11 (entget x)))
    			  pi
    			  (* 2 (txt_height x))
    		   )
    	  )
    	  (setq	pt (polar (cdr (assoc 11 (entget x)))
    			  0.0
    			  (* 2 (txt_height x))
    		   )
    	  )
    	)
    	(vlax-put (vlax-ename->vla-object x) 'TextPosition pt)
          )					;progn
        )					;if
      )					;foreach
    )
    (defun dim_ (l ang / lst pt)
      (setq	lst (vl-sort l
    		     '(lambda (e1 e2)
    			(< (cadr (cdr (assoc 11 (entget e1))))
    			   (cadr (cdr (assoc 11 (entget e2))))
    
    			)
    		      )
    	    )
      )
      (foreach x lst
        (if	(= (rem (vl-position x lst) 2) 0)
          (progn
    	(if (>=	(car (cdr (assoc 10 (entget x))))
    		(car (cdr (assoc 14 (entget x))))
    	    )
    
    	  (setq	pt (polar (cdr (assoc 11 (entget x)))
    			  (+ ang (* pi 1.5))
    			  (* 2 (txt_height x))
    		   )
    	  )
    	  (setq	pt (polar (cdr (assoc 11 (entget x)))
    			  (+ ang (* pi 1.5))
    			  (* 2 (txt_height x))
    		   )
    	  )
    	)
    	(vlax-put (vlax-ename->vla-object x) 'TextPosition pt)
          )					;progn
        )					;if
      )					;foreach
    )
    (defun txt_height (ename / BlkEnt EntData height)
      (if
        (and
          (= (cdr (assoc 0 (setq EntData (entget ename))))
    	 "DIMENSION"
          )
          (setq BlkEnt (tblobjname "block" (cdr (assoc 2 EntData))))
        )
         (while (setq BlkEnt (entnext BlkEnt))
           (if (= (cdr (assoc 0 (setq EntData (entget BlkEnt)))) "MTEXT")
    	 (setq height (cdr (assoc 40 EntData)))
           )
         )
      )
      height
    )
    (princ)
    

    Thanks Bee nhiều! Lisp của bạn rất hay :D


  3. Bác Tue_NV ơi! LISP của bác thật hay khi sử dụng cho hàng loạt DIM, với một DIM thì dùng lệnh STRETCH?! TEXT vẫn còn nằm trong (hoặc nằm trên) đường dim!

    Tuy nhiên, với mục đích tách loạt Dim choáng chỗ, nếu em muốn Bác sửa thế này có được không?!

     

    Input: 1. Chọn vùng Dim cần thao tác

              2. Nhập vào số bậc hiệu chỉnh <1;2;3>

              3. Hướng thực hiện <T;P>: Nếu T, DIM đầu tiên bên TRÁI làm chuẩn không thay đổi, bắt đầu thay đổi từ DIM thứ 2 trở đi, từ TRÁI sang PHẢI, và ngược lại cho lựa chọn P.

     

    Mô tả:

    118347_song_nhi_2.jpg118347_song_nhi_1_1.jpg

     

    Và đây là kích thước tường minh, tương quan chiều cao TEXT và các bước nhảy:

    118347_88888.jpg

     

    Nếu thực hiện được trên phương xiên nữa thì thật là tuyệt vời!

    Cám ơn các Bác đã quan tâm đến vấn đề của em, thành thật xin lỗi nếu sự chỉnh sửa (bài viết) này gây ra trở ngại!!!

     

    Vấn đề move text Dim này cũng khá hay, mong mọi người giúp đỡ lisp này nhé.

     

    Yêu cầu lisp bên trên cũng khá lằng nhằng, mong muốn của em nó đơn giản hơn chút:

     

    - Chạy lisp, lisp yêu cầu chọn dãy dim cần dãn text trùng

    + Người dùng chọn dãy dim

    - Lisp nhận diện các text bị đè lên nhau và move text trùng xuống dưới hàng dim (khoảng cách move bằng 2 lần chiều cao text). Kết thúc lệnh

     

    File ví dụ:

    http://www.mediafire.com/file/4oczix0pcd0dred/Vidu2.dwg


  4. Chào các bạn, 

     

    Hiện tại mình có 1 bản vẽ với nhiều polyline kín, công việc là phải offset có hình đó ra một khoảng cách nhất định (offset ra phía ngoài hình đó) và chuyển đối tượng vừa được offset về layer hiện hành, các bạn viết giúp mình lisp sau nhé :

     

    - Chạy lisp, lisp yêu cầu nhập khoảng cách cần offset (khoảng cách này được ghi nhớ cho lần chạy lisp sau)

    + Người dùng nhập khoảng cách

    - lisp yêu cầu chọn đối tượng cần offset (chọn được nhiều đối tượng 1 lúc)

    - Sau khi người dùng chọn xong đối tượng thì lisp sẽ tự động offset các đối tượng đó ra bên ngoài với khoảng cách đã được nhập và chuyển đối tượng vừa được offset sang layer hiện hành rồi kết thúc lệnh

     

    File mình họa

    http://www.mediafire.com/file/j9fb5b20fk7l177/Muilti+Offset.dwg

     

    Cảm ơn các bạn!


  5. - Lip-no thì dùng Import, Export thôi! Vì Export ra được nhiều file và lưu trữ những file này (đặt tên cho nó để dễ nhớ) => Lưu theo thư mục thì nảy sinh vấn đề phức tạp.

    - Nút màu xanh là lấy tính chất 1 text trên bản vẽ hiện hành (Layer, Height, Width...) để gán vào hộp thoại (gần giống lệnh MA).

    - Ở dòng nhắc có nhiều tính năng truy cập bằng cách gõ các ký tự thấy ở đó, (Tab là nhấn phím Tab).

    Ý mình không phải là lưu theo folder, mà chỉ là nhận dạng các Lib-no đã được tạo trong Folder có sẵn để cập nhật vào cái phần List của Lib-no 1 lần đầu tiên khi chạy lisp.

    Diễn giải:

    - Mình có sẵn các file (A1.dat, A2.dat, .... An.dat)

    - Khi copy sang máy mới thì sẽ phải vào nút mầu đỏ để tạo các tên Lib-no là "A1.dat, A2.dat, .... An.dat", sau đó phải chọn từng A*.dat rồi import lần lượt từng cái một. Như thế sẽ khá lằng nhằng :)

     

    Nói dài dòng như thế tóm lại là: Quocmanh sẽ làm thế nào để lisp cập nhật được các file.dat mà mình đã tạo được khi dùng với một máy mới?


  6. @conghoa: Sử dụng bản này xem (Thi triển hết ý tưởng)=>

     

    Link:https://drive.google.com/file/d/0B2LetfHDljPGcThlcmhvdURCU1E/view?usp=sharing

     

    Thanks Quocmanh,

    Mình đã dùng mà thấy ổn rồi, hiện tượng "re" lúc bị lúc không nên cũng ko rõ như nào :D

     

    Tính năng Lib-no bạn có thể thêm cho nó tự nhận dữ liệu *.dat theo folder chỉ định được không? Nghĩa là khi bấm vào Mầu đỏ lần đầu thì nó sẽ yêu cầu đưa thư mục lưu trữ các Lib-no (lưu đường dẫn để lần sau vào không yêu cầu nữa), rồi nó tự động cập nhật các tên file.dat thành các Lib-no theo thứ tự.

     

    Việc xóa Lib-no mới thêm vào như nào?

     

    Cái ô mầu xanh có tính năng gì thế Quocmanh?


  7. Thanks! Lsp đồ sộ quá!

     

     

    Với mỗi lần chỉ 1 dòng string thì chậm, nếu phân loại thành từng khối text để chèn cả cụm thì có phần nào an ủi. Và có thể phân loại Library... (ngoài ra prop của text được ghi nhớ khi chèn lần tiếp theo). Xây dựng thư viện 1 lần và dùng mãi mãi...

    myCbaf.jpg

     

    Bác QuocManh phát triển thêm phần Lib-No_0 đi, để có thể gom các ghi chú theo từng chủng loại. :)

    Thêm nữa là có thể làm sao để khỏi phải dùng lệnh "re" sau mỗi lần insert được không? hiện tại lisp đang không insert liên tục được.

    Thanks!


  8.  

    Command: ap
    APPLOAD CRT_KT_CH.fas successfully loaded.
     
     
    Command:
    :: Create TEXT from Library | © QuocManh04tt 2016 - www.CadViet.com ::
    :: Type "CRT" to Invoke ::
    Command:
    Command: CRT
    Lib-str10
     
    Error: bad argument type: streamp nil
    Command:
     
     
    Bác hôm nay khó ở ah, nó hiện lên cái bảng đó rồi out luôn :|

     

    Bác hôm nay khó ở ah, nó hiện lên cái bảng đó rồi out luôn :|

  9. Command: ap

    APPLOAD CRT_KT_CH.fas successfully loaded.

     

     

    Command:

    :: Create TEXT from Library | © QuocManh04tt 2016 - www.CadViet.com ::

    :: Type "CRT" to Invoke ::

    Command:

    Command: CRT

    Lib-str10

     

    Error: bad argument type: streamp nil

    Command:

     

     

    Bác hôm nay khó ở ah, nó hiện lên cái bảng đó rồi out luôn :|


  10.  

    @QuocManh04tt

     

    Command: AP
    APPLOAD CRT_KT_CH.fas successfully loaded.
    
    
    
    
    Command:
    :: Create TEXT from Library | © QuocManh04tt 2016 - www.CadViet.com ::
    :: Type "CRT" to Invoke ::
    Command:
    Command: CRT
    Lib-str10
    
    
    Error: bad argument type: streamp nil

    Bị lỗi luôn đó bác, test với cad 2017

     

    Bị lỗi luôn đó bác, test với cad 2012, 2017


  11. @QuocManh04tt

     

    Command: AP
    APPLOAD CRT_KT_CH.fas successfully loaded.
    
    
    
    
    Command:
    :: Create TEXT from Library | © QuocManh04tt 2016 - www.CadViet.com ::
    :: Type "CRT" to Invoke ::
    Command:
    Command: CRT
    Lib-str10
    
    
    Error: bad argument type: streamp nil

    Bị lỗi luôn đó bác, test với cad 2017


  12. @Kieu Tan,conghoa

    https://drive.google.com/file/d/0B2LetfHDljPGMlFBcktDWU0ybms/view?usp=sharing

    Hướng dẫn:

    1. Lệnh CRT

    2. Các nút điều khiển trên hộp thoại có thể xem ở Clip ở trên.

    3. Sau khi chọn String và OK => trước khi chọn điểm đặt Text, có thể điều chỉnh Text như sau:

        a. Gõ phím S: để thay đổi chiều cao text của dòng đầu tiên, các dòng thứ 2 trở đi giữ nguyên theo giá trị trên hộp thoại.

        b. Nhấn giữ hoặc gõ phím: + , - để thay đổi khoảng cách giữa các dòng.

        c. Nhấn giữ hoặc gõ phím: > , < để thay đổi Width của text.

        d. Nhấn giữ hoặc gõ phím: [ , ] để thay đổi chiều cao text các dòng thứ 2 trở đi.

        e. Nhấn giữ hoặc gõ phím: R, O để xoay text.

    P/s: - Khi tạo thư viện String từ nút Get-str: Thì tất cả các string được chuyển sang mã UNICODE.

           - Khi xuất String->Text: Đối với các font .TTF (thuộc các bảng mã: TCVN3, VNI) thì lisp tự chuyển đổi => Có nghĩa: Sau khi chọn các string, dùng TextStyle nào cũng được (Uni, Tcvn, Vni <=> font: *.ttf).

    Bác chấp nhận cái request mail zùm nhé.

     

    Trân trọng!


  13. Hơi khác yêu cầu của bạn một chút, bạn lấy về dùng tạm cũng được

    http://www.cadviet.com/forum/topic/30524-can-le-text-mtext-can-le-doi-tuong/?p=123433

     

    Đến bao giờ bạn có quy luật đầy đủ cho việc thế nào gọi là sắp xếp thẳng hàng thì mình sẽ viết giúp bạn, không hề khó :)

    http://www.mediafire.com/file/1o99rqj2z5ufdjp/align+All_ala.lsp

     

    Đây là lisp align tất cả các đối tượng, nhưng nó đang bị hạn chế là chỉ chọn được từng đối tượng một, các bác giúp em thêm tính tăng chọn theo kiểu gom một lúc nhiều đối tượng nhé.

     

    Trân trọng!

×