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

BuiHuuNghia

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

    17
  • Đã tham gia

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

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


  1. Ai giúp mình sửa lisp xtrr.lsp này lại thành xtrr1.lsp với nội dung cần sửa nằm ở 2 hình bên dưới.
     
    Hình 1: Sau khi dùng lisp xtrr.lsp, quét 1 lần hết tất cả các giá trị trong màn hình thì nhận được kết quả như hình 1 (theo như mình thấy thì xtrr.lsp nhận giá trị trong cad theo thứ tự từ phải qua trái, nhận hết giá trị hàng bên dưới rồi mới nhận giá trị từ phải qua trái của hàng trên, rồi xuất ra excel theo thứ tự từ trên xuống dưới).

      - Nhờ các cao thủ trên diễn đàn sửa thành xtrr1.lsp với 3 thay đổi sau:

         +Khi quét tất cả thì nhận giá trị trong cad theo thứ tự từ trái qua phải, nhận hết giá trị hàng bên dưới rồi mới nhận giá trị từ trái qua phải 

           của hàng trên rồi xuất ra excel theo thứ tự từ trên xuống dưới như hình 2.

         +Sau khi có file excel thì tự động mở file excel đó lên luôn.

         +Các dữ liệu số trong excel (VD: 1 hay -9690.54 là dữ liệu số, UNIT 106 là dữ liệu chữ) phải ở dạng number chứ không phải general, dữ

           liệu chữ ở dạng general (cái này mình nghĩ lisp không làm được đâu, nhưng vẫn đề xuất thử, không được thì để tất cả ở dạng general  

           cũng được).              127110_xtrr2__copy.jpg
     
     
     
    Hình 2: Lisp xtrr.lsp cũng có thể làm được như hình 2 nhưng phải chọn từng giá trị, mà một lần mình làm rất nhiều giá trị nên không thể làm vậy được. Cũng có cách khá nhanh là dùng xtrr.lsp, rồi vào excel chọn 6 row 2->7 sort theo cột A giảm dần, tương tự với 6 row 8->13, xong sửa cột STT lại từ 1->12 là từ hình 1 trở thành hình 2. Tuy nhiên do làm nhiều bản vẽ nên có lsp sẽ nhanh hơn nhiều. Mong các bạn giúp.127110_xtrr2__copy__copy_4.jpg

     

    Hi, tự dưng mình quên up file. File cad, excel đã dùng sort và lisp (chính là lisp xtrr.lsp ở trên, mình chỉ copy xuống thôi):

    http://www.cadviet.c...127110_vdcl.dwg

    http://www.cadviet.com/upfiles/3/127110_excel_ã_dùng_sort_1.rar

     

     

    (

    defun c:xtrr( / ss i fn fh item Pnt TEXT) (vl-load-com) (setq ss (acet-ss-to-list (ssget (list (cons 0 "TEXT"))))) (setqi 1) (setq fn (getfiled "Text Export File" "" "csv" 1)) (setq fh (open fn "w")) (write-line (strcat "STT" "," "X" ",""Y"" "" "" "") fh) (foreach item ss (setq temp (entget item) Pnt (cdr (assoc 10 temp)) TEXT (cdr (assoc 1 temp)) ) (write-line (strcat (rtos i 2 0) "" (rtos (car Pnt) 2 3) "" (rtos (cadr Pnt) 2 3)"" (rtos (caddr Pnt) 2 3) "" TEXT) fh) (setq i (1+ i)) ) (close fh) (princ) )


  2. Vãi, đúng hàng mình cần rồi. Cám ơn ndtnv nhìu nhìu nha. Nếu được, bạn giúp mình tạo thêm sbsp2.fas nữa để dổi 2 block tên 1 và 2 trong file dưới đây nha, tên lệnh vẫn là sb và sp (không hiểu sao 2 block 1 và 3 giống y như nhau, cả trong block editor cũng giống nhau luôn, mà rotation của 2 block lại khác nhau, 1 cái 90 độ, 1 cái 270 độ như hình bên dưới). Mình có nhiều bản vẽ chứa block 1 và 2, và nhiều bản vẽ khác chứa block 2 và 3. Những bản vẽ chứa block 2 và 3 thì file sbsp.fas của ndtnv đã làm được rồi. Còn các bản vẽ chứa block 1 và 2 thì tuy đổi block được nhưng cũng bị đổi rotation luôn (từ 90 độ thành 270 độ).

    Load sbsp.fas

    Có 2 lệnh:

    SB: Đổi tên 2 block

    SP: Đổi vị trí 2 block

    http://www.cadviet.com/upfiles/3/19626_sbsp.rar

    http://www.cadviet.com/upfiles/3/127110_hoan_doi_block_2.dwg

    127110_replace_block.jpg

     

    127110_replace_block__2.jpg


  3. Sory về sự cẩu thả của mình. Lisp mình cần giúp dùng để thay thế cho các thao tác trong hình 3 bên dưới:

    -Trong hình 1 có 2 block khác nhau (rotation của cả 2 block đều bằng 0) và 1 đường polyline.

    -Trong hình 2, mình đã xoay block 1 (nằm bên trái bản vẽ, rotation = 270 độ), block 2 (rotation = 180 độ) rồi đặt lên đường polyline.

    -Ở hình 3, mình muốn block 1 có rotation là 180 độ và nằm ở vị trí của block 2 trong hình 2. Còn block 2 thì có rotation là 270 độ và nằm ở vị trí của block 1 trong hình 2 (bình thường thì mình phải rotate 2 block, đánh dấu vị trí 2 block rồi đổi vị trí cho nhau).

     

    Hình 1. Block 1 (bên trái, có rotation = 0), block 2 (ở giữa, có rotation = 0) và một đường polyline (bên phải)127110_hoan_doi_block__1_2.jpg

     

     

    Hình 2. Xoay block 1 (rotation = 270 độ) và đặt lên phần thẳng đứng của polyline cách góc của polyline 1'6" (1 feet 6 inch), Xoay block 2 (rotation = 180 độ) và đặt lên phần nằm ngang của polyline cách góc của polyline 1'10"

    127110_hoan_doi_block__2.jpg

     

     

     

    Hình 3. xoay block 2 (rotation = 270 độ) và đặt lên phần thẳng đứng của polyline cách góc của polyline 1'6" (1 feet 6 inch), Xoay block 1 (rotation = 180 độ) và đặt lên phần nằm ngang của polyline cách góc của polyline 1'10". (lisp mình cần giúp chỉ cần chọn 1 lúc 2 block trên rồi enter là từ hình 2 thành hình 3)

    127110_hoan_doi_block_3_1.jpg


  4. Bạn tạo "WIPEOUT" cho Block là được 

    Mình vừa thử tạo wipeout theo lời bạn nói, mà sao nó chỉ che được những đoạn thẳng vẽ truớc đó, còn những đoạn thẳng vẽ sau vẫn nằm trên nó. Với lại mình không tạo wipeout cho đường tròn được. Khi thoát ra save lai rồi mở lại thì thấy đường thẳng lại nằm trên block tiếp. Nếu không có cách nào cho block luôn luôn nằm ở trên thì bạn có thể viết lisp giúp mình được không?

    http://www.cadviet.com/upfiles/3/127110_taphop_recept_ttext_blockthuonga2__copy.dwg

     

    127110_dim2.jpg


  5. Bạn tạo Block rồi đặt Arrow của mũi tên là Block đó cũng tạm được mà :)

    Cám ơn bạn ketxu đã góp ý. Mũi tên của block thì chỉ cố định 1 hình dạng à. Nhiều khi mạng điện chi chít mình phải rẽ cho mũi tên dài ra hay ngắn đi để né không bị chạm những thứ khác (vì đầu mũi tên mình phải copy 1 đoạn text vào đó nữa nên mũi tên có khi phải kéo dài ra để text tránh đụng vật khác ). Mà nếu copy mũi tên có sẵn gạch ngang qua, xoay cho nó chỉ về hướng mình muốn rồi lại kéo cho đuôi của mũi tên chạm vào vật mình muốn, rồi phải chỉnh lại điểm đầu và điểm giữa của mũi tên để không bị chạm vật khác. Làm hết mấy bước đó trong không gian hẹp với số lượng nhiều mất thời gian lắm. Còn nếu có lisp vẽ mũi tên có sẵn gạch ngang thì chỉ cần click 3 điểm là thoả hết các điều kiện trên. 


  6. Hiện tại để được như hình thứ 2 bên dưới thì mình phải dùng lệnh trim --> chọn block enter --> chọn arc hay polyline. Nhưng làm vậy cho từng block thì lâu quá. Nhờ các cao thủ trên diễn đàn làm giúp lisp khi bao chọn tất cả rồi enter thì sẽ trở thành như hình 2.

     

    http://www.cadviet.com/upfiles/3/127110_trim_1.dwg

     

    127110_trim1.jpg

     

    127110_trim2.jpg

     


  7. Lisp này giống như lệnh qleader, khác ở chỗ là có thêm 2 dấu gạch ở đầu mũi tên (2 dấu gạch này có chiều dài 7" (7 inch), cách nhau 2", và cách đầu mũi tên 3" như hình bên dưới, góc giữa đầu mũi tên với 2 dấu gạch là 90 độ hay 110 độ). Vẽ xong mũi tên là kết thúc lệnh không cần tạo text như qleader. Mũi tên này làm mình mất khá nhiều thời gian (khoảng 10 giây một mũi tên). Rất mong các bạn giúp đỡ!

     

    À quên, 2 dấu gạch này không cần phải liên kết với mũi tên (khi vẽ mũi tên xong mà điều chỉnh lại hướng của đầu mũi tên thì 2 đấu gạch không cần tự động di chuyển theo).

    http://www.cadviet.com/upfiles/3/127110_qleaderexample__copy__copy.dwg127110_mi_t%C3%AAn_1.jpg


  8.  

    Mình không rành nhiều về lisp nên chỉ biết viết cho bạn cái lệnh này,bạn dùng thử xem có được không

    (defun c:dmla ()
    (command "undo" "begin")
    (command "change" "all" "" "p" "c" "bylayer" "LT" "bylayer" "LW" "bylayer" "" "")
    (command "undo" "end")
    (princ)
    )
    

    Ai giúp sửa lisp này thành lisp có thể chuyển cả màu của mũi tên (vẽ bằng lệnh qleader)  và màu của đo kích thước  thành bylayer với (cả thân mũi tên và đầu mũi tên đều về bylayer nha, hình bên dưới do mình không biết cách chuyển màu của đầu mũi tên về bylayer nên vẫn giữ màu đỏ).

    127110_ketquadim__copy.jpghttp://www.cadviet.com/upfiles/3/127110_dim.dwg

  9. Hề hề hề,

    Bạn thử dùng cái này coi sao nhé.

    Cái bán kính tối đa của vùng dịch chuyển sẽ do bạn nhập vào khi lisp yêu cầu nhập khoảng cách di dời tối đa.

    Text sẽ chuyển về vị trí chưa phải là gần nhất do mình cho text di chuyển theo bước nhẩy. Tuy nhiên nếu bạn muốn nó gần bao nhiêu cũng được bằng cách thay đổi bước nhảy này. Hiện tại mình mặc định bước nhảy này là 1/5 khoảng cách di dời tối đa.

    Với những text không thể chuyển được với khoảng cách di chuyển tối đa bạn đã chọn , lisp sẽ đổi màu text này thành màu đỏ để bạn nhận biết và có phương án di chuyển thích hợp cho text này sau đó.

    http://www.cadviet.com/upfiles/3/5194_movetexttospace.lsp

    Hi, cám ơn bạn. Đúng là move text ra khỏi chỗ bị chạm rồi, nhưng sao những text không bị chạm cũng bị move luôn. Giúp mình chỉnh lại những text không bị chạm vẫn giữ nguyên vị trí và chỉ những text bị chạm mà không move được thì mới chuyển thành màu đỏ. Không thì tách thành lisp chuyển thành màu đỏ những chỗ text bị chạm để mình dùng tay move cũng được. Bên dưới là kết quả sau khi mình chạy lisp movetexttospace.lsp

     

    127110_truoc_khi_move_2.jpg127110_sau_khi_move_1.jpg127110_ketqua_1.jpg


  10. vba co duoc khong? xin file cad cu the

     

    http://www.cadviet.com/upfiles/3/127110_taphop_recept_ttext_blockthuonga__copy.dwg

     

    Dùng gì cũng được cả. Gửi bạn file cad cụ thể, bên trong có 3 chỗ text bị chạm là "A"-4 chạm với mũi tên, F4 chạm với đường dây màu đỏ, text "A"-18,20 chạm với text "A"-15. 


  11. Nhờ AE trong diễn đàn viết giúp lisp dời text đến vị trí bất kỳ gần nhất khi bi chạm với text khác hay vật khác (hướng dời text là Đông, Nam, Tây, Bắc, Đông Bắc... đều được, miễn sao vị trí sau khi dời phải cách vị trí đầu trong bán kính 3' (3 feet) và càng gần vị trí đầu càng tốt (không nhất  thiết phải sắp xếp đẹp như hình bên dưới mà chỉ cần không chạm nhau là ok). Thanks AE trước nha.

     

    127110_lisp_move_khi_cham.jpg


  12. Lệnh le (qleader) bình thường là chọn toạ độ điểm đầu, thân và đuôi rồi đánh nội dung của text.

    Lisp mình cần giúp cũng giống qleader ở trên. Khác ở chỗ là:

         + Tự động vẽ thêm 2 dấu gạch ngang như hình bên dưới, khoảng cách 2 dấu gạch này là 2" (2 inch), chiều dài mỗi dấu gạch là 7". Góc nghiêng giữa dấu gạch so với mũi tên là 110 độ (không thì vuông góc với mũi tên cũng được).

         + Text có nội dung cố định sẵn là "A"- 14, nằm ở đầu của mũi tên (lệnh qleader thì nằm ở đuôi của mũi tên). Text này độc lập với mũi tên (lệnh qleader thì text gắn với mũi tên, khi dời text thì đuôi mũi tên bị dời theo). Các thông số của text cho như hình bên dưới (quan trọng nhất là thông số Layer là 1-POW_ELEC_TEXT, Rotation = 0).

         + Mũi tên thì có Layer là 1-POW_CIRC, Leader line là Spline, Arrow head là closed filled, Number of points là 3.

     

    Nói chung là giống với mũi tên trong file cad đính kèm sau đây. Mong các cao nhân trên diễn đàn giúp cho.

     

    http://www.cadviet.com/upfiles/3/127110_qleaderexample_3.dwg

     

     

    127110_thong_so_leader.jpg127110_thong_so_text.jpg

×