Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
11 replies to this topic

#1 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 22 July 2011 - 02:23 PM

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...6d/minh hoa.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.
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 22 July 2011 - 03:15 PM

Ý 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 :(
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 22 July 2011 - 05:12 PM

Ý 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 :)
  • 0

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 July 2011 - 01:12 AM

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.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 25 July 2011 - 06:26 AM

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...6d/minh hoa.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
  • 1

#6 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 25 July 2011 - 12:21 PM

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é.
  • 0

#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 July 2011 - 03:47 PM

Ý 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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 25 July 2011 - 04:06 PM

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
)

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#9 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 July 2011 - 08:53 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#10 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 25 July 2011 - 10:16 PM

Bạn dùng file này thử rồi edit mline -> pick, pick, pick :rolleyes:
http://www.cadviet.c.../test_mline.dwg
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#11 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 01 August 2011 - 01:32 PM

Ý 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.
  • 0

#12 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 01 August 2011 - 03:33 PM

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ề,...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.