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

[Yêu cầu] nhờ viết lisp biến MLINE thành PLINE. Help!!!

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

Mình có một ý tưởng như thế này, trong đó có cần 1 lisp biến MLINE thành PLINE.

Trước hết các bác cứ hộ mình cái lisp sau đó thử bình phẩm ý tưởng này xem dư lào nhé:

+ Lisp:

mp.lsp

biến mline thành pline có hình dạng trùng với mline đầu nhưng bịt 2 đầu của mline lại. Ý tưởng minh họa như file đính kèm.

http://www.mediafire.com/file/pyvyimj543ulj6d/minh%20hoa.dwg

 

ứng dụng vẽ MB kết cấu, không cần trim đoạn giữa các dầm giao nhau.

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ưởng hay, tuy nhiên ketxu góp ý thế này, nếu đã vẽ xong Mline, hãy kích đúp vào Mline, chọn chế độ Merge hoặc Open, kích kích kích.... cũng được vậy. Dù có thủ công, n vẽ KC quan trọng bước này, tự động quá mà hỏng thì e buồn :(

  • Vote tăng 1

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ưởng hay, tuy nhiên ketxu góp ý thế này, nếu đã vẽ xong Mline, hãy kích đúp vào Mline, chọn chế độ Merge hoặc Open, kích kích kích.... cũng được vậy. Dù có thủ công, n vẽ KC quan trọng bước này, tự động quá mà hỏng thì e buồn :(

 

Thanks ketxu đã góp ý nhé. Làm vậy hay đấy vì vẫn giữ nguyên hiện trạng được các mline phục vụ khi chỉnh sửa. Tuy nhiên nếu có cái lisp kia đc phục vụ một số trường hợp cũng tốt. Pác có time viết dùm mình ko với?? hay Có bác pro nào viết dùm mình với. Mình cảm ơn nhiều :)

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

Thanks ketxu đã góp ý nhé. Làm vậy hay đấy vì vẫn giữ nguyên hiện trạng được các mline phục vụ khi chỉnh sửa. Tuy nhiên nếu có cái lisp kia đc phục vụ một số trường hợp cũng tốt. Pác có time viết dùm mình ko với?? hay Có bác pro nào viết dùm mình với. Mình cảm ơn nhiều :)

Hề hề hề,

Các "bác Pro" chưa viết thì có "chú nonePro" viết chơi thế này có được không hỉ??? Nếu chưa ưng ý thì chớ giận nghen và hãy post cái chưa ưng lên nhé.

(defun c:chml (/ oldos ssml e en elm plst el p e1 e2 e3 e4 wid pls1 pls2)
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setq ;;;;elm (entget (car (entsel "\n Chon mline can thay doi")))
       ssml (acet-ss-to-list (ssget (list (cons 0 "mline")))) )
(setvar "osmode" 0)
(foreach e ssml
(setq elm (entget e)
       plst (list))
(foreach el elm
   (if (= (car el ) 11)
       (setq plst (append plst (list (cdr el))))
   )
)
(command "pline")
  (foreach p plst
      (command p)
  )
(command "") 
(setq en (entlast)
        wid (cdr (assoc 40 elm)) )
(cond
    ((= (cdr (assoc 70 elm)) 0)
      (if (and (> (angle (car plst) (cadr plst)) 0) (< (angle (car plst) (cadr plst)) pi))
          (progn
                (command "offset" wid en (list (+ (caar plst) wid) (cadar plst)) "" )
                (setq e1 (entlast))
          )
          (progn
                (command "offset" wid en (list (- (caar plst) wid) (cadar plst)) "" )
                (setq e1 (entlast))
          )
      )
      (setq pls1 (acet-geom-vertex-list e1)
              pls2 (acet-geom-vertex-list en)
      )
      (command "pline" (car pls1) (car pls2) "")
      (setq e3 (entlast))
      (command "pline" (last pls1) (last pls2) "")
      (setq e4 (entlast))
      (command "pedit" en "j" e1 e3 e4 "" "")
    )
    ((= (cdr (assoc 70 elm)) 1)
      (if (/= (cadar plst) (cadadr plst))
          (progn
              (command "offset" (/ wid 2) en (list (+ (caar plst) wid) (cadar plst)) "")
              (setq e1 (entlast))
              (command "offset" (/ wid 2) en (list (- (caar plst) wid) (cadar plst)) "" )
              (setq e2 (entlast))
          )
          (progn
              (command "offset" (/ wid 2) en (list (caar plst) (+ (cadar plst) wid)) "")
              (setq e1 (entlast))
              (command "offset" (/ wid 2) en (list (caar plst) (- (cadar plst) wid)) "" )
              (setq e2 (entlast))
          )
      )
      (command "erase" en "")
      (setq pls1 (acet-geom-vertex-list e1)
              pls2 (acet-geom-vertex-list e2)
      )
      (command "pline" (car pls1) (car pls2) "") 
      (setq e3 (entlast))
      (command "pline" (last pls1) (last pls2) "")
      (setq e4 (entlast))
      (command "pedit" e1 "j" e2 e3 e4 "" "")
    )
    ((= (cdr (assoc 70 elm)) 2)
      (if (and (> (angle (car plst) (cadr plst)) 0) (< (angle (car plst) (cadr plst)) pi))
          (progn
                (command "offset" wid en (list (- (caar plst) wid) (cadar plst)) "" )
                (setq e1 (entlast))
          )
          (progn
                (command "offset" wid en (list (+ (caar plst) wid) (cadar plst)) "" )
                (setq e1 (entlast))
          )
      )
      (setq pls1 (acet-geom-vertex-list e1)
              pls2 (acet-geom-vertex-list en)
      )
      (command "pline" (car pls1) (car pls2) "")
      (setq e3 (entlast))
      (command "pline" (last pls1) (last pls2) "")
      (setq e4 (entlast))
      (command "pedit" en "j" e1 e3 e4 "" "")
    )
    (t nil)
)
(command "region" (entlast) "")
)
(setvar "osmode" oldos) 
(command "undo" "e")
(princ)
)

Hề hề hề,

Cái lisp ni dùng để chuyển các mline có mlstyle là Standard như trên bản vẽ bạn post thành các region. Việc union các region này bạn phải tự làm vì mình không biết bạn cần union những chú nào cả.

Với các mline có mlstyle khác thì mình không đảm bảo lisp sẽ hoạt động đúng do mình chưa biết cách lấy ra các properties của mlstyle. Cái mlstyle Standard mà bạn dùng có 2 elements với khoảng cách offset là 1. Còn các mlstyle khác thì mình chả biết nó sẽ là bao nhiêu nên tạm thời thua nó đã.

Hề hề hề,

Chúc bạn vui.

  • Vote tăng 1

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

Mình có một ý tưởng như thế này, trong đó có cần 1 lisp biến MLINE thành PLINE.

Trước hết các bác cứ hộ mình cái lisp sau đó thử bình phẩm ý tưởng này xem dư lào nhé:

+ Lisp:

mp.lsp

biến mline thành pline có hình dạng trùng với mline đầu nhưng bịt 2 đầu của mline lại. Ý tưởng minh họa như file đính kèm.

http://www.mediafire.com/file/pyvyimj543ulj6d/minh%20hoa.dwg

 

ứng dụng vẽ MB kết cấu, không cần trim đoạn giữa các dầm giao nhau.

Ý kiến của Tue_NV giống ý Ketxu vậy.

Đường Mline rất đẹp, sao bạn lại "phá" nó ra?

Bạn biến thành region thì kết cục bạn phải explode nó ra để chỉnh sửa vì region không thể stretch được?? Ý tưởng trên chỉ sử dụng vẽ mặt bằng kết cấu trong 1 lần thì mới nhanh? Nhưng mặt bằng kết cấu nào có phải vẽ chỉ 1 lần là xong? Phải sửa tới sửa lui theo ý của Chủ đầu tư nữa? Phải thay đổi khi nó không phù hợp?

 

Với Đường Mline -> Mình có thể thay đổi chổ đóng mở chổ giao, có thể thay đổi bề rộng "Dầm" 1 cách linh hoạt. Theo Tue_NV mình nên "Xây" chứ không nên "phá".

 

Nếu bạn nói bình phẩm ý tưởng trên : Mình nói là 1 ý tưởng hay nhưng thật sự là chưa hiệu quả lắm, và hy vọng bạn sẽ có nhiều ý tưởng hay hơn nữa để công việc hiệu quả hơn

  • Vote tăng 1

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ảm ơn tất cả các bác nhé. Việc vẽ của em sẽ tự thành lập một form riêng cho mình. Còn về ý tưởng thì em cũng thích đưa ra ý tưởng và hy vọng có ý nghĩa được một phần nào đó trong một công việc nào đó của mọi người. Mỗi tội không biết viết lisp :D Có j các bác giúp em thêm nhé.

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

Ý kiến của Tue_NV giống ý Ketxu vậy.

Đường Mline rất đẹp, sao bạn lại "phá" nó ra?

Bạn biến thành region thì kết cục bạn phải explode nó ra để chỉnh sửa vì region không thể stretch được?? Ý tưởng trên chỉ sử dụng vẽ mặt bằng kết cấu trong 1 lần thì mới nhanh? Nhưng mặt bằng kết cấu nào có phải vẽ chỉ 1 lần là xong? Phải sửa tới sửa lui theo ý của Chủ đầu tư nữa? Phải thay đổi khi nó không phù hợp?

 

Với Đường Mline -> Mình có thể thay đổi chổ đóng mở chổ giao, có thể thay đổi bề rộng "Dầm" 1 cách linh hoạt. Theo Tue_NV mình nên "Xây" chứ không nên "phá".

 

Nếu bạn nói bình phẩm ý tưởng trên : Mình nói là 1 ý tưởng hay nhưng thật sự là chưa hiệu quả lắm, và hy vọng bạn sẽ có nhiều ý tưởng hay hơn nữa để công việc hiệu quả hơn

Chào bác Tue_NV và các bác,

Mình có một vấn đề muốn hỏi các bác là:

Khi mình gõ mlstyle trên dòng command thì CAD hiện ra thông báo là "acad.dcl" Can't find file.

Vậy cái file này có thể tìm thấy ở đâu và làm sao để load nó vào CAD được????

Khi mình tìm hiểu trong help của cad thì thấy:

 

Loads a multiline style from an MLN file. The default file name is acad.mln. If acad.mln does not exist, or if it exists but AutoCAD cannot find it, choose File to specify another file or file location.

 

Nhưng trong thư mục acad2004 của mình chỉ thấy có file acad.mnl chứ không thấy có acad.mln. Vậy hai file này có phải là một không?? Nếu không thì phải tìm kiếm file acad.mln ở đâu???

 

Ngoài ra còn một vấn đề khác nữa là làm sao để lấy được các properties của mlstyle và đưa vào sử dụng trong lisp????

 

Rất mong các bác chỉ bảo thêm.....

Cám ơn các bác trước.

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ó cảm giác CAD của bác có vấn đề hay sao ý. Từ hồi vụ base.dcl ý. File acad.dcl thì em có đây, nhưng không rõ bác lấy về có dùng được không..

Đường dẫn trong Thư mục cài CAD\userdatacache\Support hoặc Profile\Appdata\Roaming\Autodesk.........enu\support

 

Mline thì bác xài tạm 2 hàm này xem có ưng được không

;Tra ve ename cua MLine Style Name
;(entget(ST:Mline-Style-Get "Standard"))
(defun ST:Mline-Style-Get (NAME / tmpDict eName)
 (if(setq tmpDict(dictsearch(namedobjdict) "ACAD_MLINESTYLE"))
   (while (and tmpDict
               (not (setq eName (if(and(assoc 3 tmpDict)
                                     (=(strcase(cdr(assoc 3 tmpDict)))(strcase NAME))
                                 )
                               (list (strcase NAME)
                                     (cdr(cadr(member(assoc 3 tmpDict)tmpDict)))
                               )
                             )
                     )
             )     
         )   
     (setq tmpDict (cdr(member(assoc 3 tmpDict)tmpDict)))
   ) 
 )
 (cadr eName)
)

;Tao Mline Style moi. Neu thanh cong tra ve ename cua MLine Style, khong tra ve Nil
;(ST:Mline-Style-Add "test" 1 2)
;(ST:Mline-Style-Add "test1" 1 0)
(defun ST:Mline-Style-Add(styName innerGap outerGap / StyEname)
(if
 (not
   (dictadd
(cdar (dictsearch (namedobjdict) "ACAD_MLINESTYLE"))
styName
(setq StyEname(entmakex
(list '(0 . "MLINESTYLE")
'(100 . "AcDbMlineStyle")      
(cons 2 styName)
'(70 . 0)
'(3 . "")
'(62 . 256)
'(51 . 1.5708)
'(52 . 1.5708)
'(71 . 4)
(cons 49  outerGap)
'(62 . 256)
'(6 . "BYLAYER")
(cons 49  innerGap)
'(62 . 1)
'(6 . "BYLAYER")
(cons 49  (* -1 innerGap))
'(62 . 1)
'(6 . "BYLAYER")
(cons 49  (* -1 outerGap))
'(62 . 256)
'(6 . "BYLAYER")))))) 
 (setq StyEname Nil))
StyEname  
 )

  • Vote tăng 1

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ó cảm giác CAD của bác có vấn đề hay sao ý. Từ hồi vụ base.dcl ý. File acad.dcl thì em có đây, nhưng không rõ bác lấy về có dùng được không..

Đường dẫn trong Thư mục cài CAD\userdatacache\Support hoặc Profile\Appdata\Roaming\Autodesk.........enu\support

 

Mline thì bác xài tạm 2 hàm này xem có ưng được không

 

Hề hề hề,

Quả thật là nó có vấn đề. Vấn đề gì thì mình chửa biết. Song khi theo chỉ dẫn của bác, mình tìm thấy mấy cái file acad.mln và acad.dcl mình copy nó vào thư mục support của Cad và khởi động lại thì ngay lập tức nó sử dụng được lệnh mlstyle đúng như hướng dẫn trong help.

Rất cám ơn sự chỉ dẫn của bác và cám ơn cả hai hàm bác đã biếu. Mình sẽ cố gắng ngâm cứu nó thử để ứng dụng.

Chúc bác khỏe và vui.

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ưởng hay, tuy nhiên ketxu góp ý thế này, nếu đã vẽ xong Mline, hãy kích đúp vào Mline, chọn chế độ Merge hoặc Open, kích kích kích.... cũng được vậy. Dù có thủ công, n vẽ KC quan trọng bước này, tự động quá mà hỏng thì e buồn :(

 

Có những lúc mình kích đúp vào mline để edit nhưng sau đó nó không chỉnh sửa được như mong muốn, ví dụ khi 1 cái mline trước đó đã tham gia corner với 1 mline nữa rồi, h chọn giao nhau góc chữ T với mline thứ 3 thì không chọn đc nữa... nhiều trường hợp tương tự khi chỉnh sửa mline số lượng lớn. Hic, thấy mline cũng không ưu việt lắm.

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ó những lúc mình kích đúp vào mline để edit nhưng sau đó nó không chỉnh sửa được như mong muốn, ví dụ khi 1 cái mline trước đó đã tham gia corner với 1 mline nữa rồi, h chọn giao nhau góc chữ T với mline thứ 3 thì không chọn đc nữa... nhiều trường hợp tương tự khi chỉnh sửa mline số lượng lớn. Hic, thấy mline cũng không ưu việt lắm.

Hề hề hề,

Chả biết CAD đời mới của bạn nó ra răng chớ cad còm 2004 của mình xài mledit thoải mái. Cứ chọn kiểu giao mline rồi pick pick pick mệt nghỉ. Chừng nào mỏi tay hay không khoái nữa thì thôi chứ nó chả phân biệt thằng nào đã pick với thằng nào chưa pick cả.

Hề hề hề, có khi trở về thời kỳ "đồ chuối" này lại hay ra phết hử??????

Bạn nên tìm hiểu kỹ hơn về các lệnh mline này bạn nhé. Nó đắc dụng ra phết chứ chả chơi đâu.

Hề hề 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

cần giúp đỡ. lisp của bác #phamthanhbinh  đang cần cho việc của em. nhưng  hiện tại khi dùng lệnh nó tạo thành 1 đường pline  trùng với đường mline ( chứ ko phải biến Ml thành PL )

bác nào giúp em lisp chỉnh lại với ạ

chml.lsp

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  

×