Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#3561 tomboy

tomboy

    biết vẽ polygon

  • Members
  • PipPip
  • 72 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 06 June 2011 - 01:08 PM

Bạn tomboy chú ý đây là khu vực viết lisp theo yêu cầu: nên lisp viết ra phục vụ cho ng yêu cầu là chính (1 mục đích) ng khác thấy dùng dc thì down về edit lại để xài.

Theo yêu cầu của bạn -> Bạn nên tạo thread mới chẳng hạn: viết software theo yêu cầu sau đó tập hợp nhiều ý tưởng cho từng chuyên ngành cụ thể -> viết soft để giải quyết tất cả những yêu cầu đó.

mình không tán thành với cách nói của bạn, thực ra diễn đàn là để chia sẻ và học hỏi, mình tham gia diễn đàn cũng vì mục đích này, mình thấy đây là sân chơi bổ ích, ai cũng có thể tham gia vì ai cũng có khiếm khuyết hay những lỗ hổng trong kiến thức của mình vì vậy đây là sân chơi lành mạnh nhằm củng cố kiến thức cho ngưòi chơi là chính . Nếu bạn nói "đây là khu vực viết lisp theo yêu cầu " có nghĩa là đây là một xưởng chuyên gia công các loại mặt hàng theo yêu cầu của khách hàng, nếu ai không phải là khách hàng của xưởng này thì xin mời đi chỗ khác hoặc là không được có ý kiến gì phải không bạn. Nói như bạn thì các bạn là thầy hết rồi, giỏi hết rồi không cần phải học nữa mà chỉ đi dậy người ta thôi.
  • 0

#3562 3d.decor

3d.decor

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 06 June 2011 - 01:47 PM

trích dẫn tomboy
chịu thua, chưa 1 lisp nào có thể tẩy được layer của bản vẽ mà thuộc tính của Block được giữ nguyên, nói chung bạn phải định nghĩa lại block của bạn bằng phương pháp thủ công trước khi bạn sử dụng lệnh dlay của bạn
bạn có chắc dùng lisp để tẩy hết các layer thừa trong bản vẽ trong khi các blocl của bản vẽ đó vẫn giữ nguyên thuộc tính được không?

bác ơi bác dùng thử lisp này xem


(defun c:clear(/ nla)
(vl-load-com)
(command "undo" "be")
(setvar "cmdecho" 0)
(setq nla "funitures")
(if (not (tblsearch "layer" nla))(command "layer" "n" nla "c" "31" nla "lt" "continuous" nla ""))
(setvar "clayer" nla)
(command "change" (ssget "X") "" "p" "la" nla "c" "31" "")
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for block (vla-get-blocks adoc)
(if (not (wcmatch (strcase (vla-get-name block) t) "*_space*"))
(vlax-for ent block
(progn
(vla-put-color ent "31")
(vla-put-layer ent "funitures")
)
)
)
)
(acet-sysvar-set (list "dimclrt" 256 "dimclre" 256 "dimclrd" 256 "INSUNITS" 4 "INSUNITSDEFSOURCE" 4 "INSUNITSDEFTARGET" 4))
(command "dim1" "update" (ssget "X" '((0 . "Leader"))) "")
(vla-regen adoc acactiveviewport)
(command "-purge" "a" "" "N")
(command "undo" "e")
(princ))

[/quote]

hehe em lại tạm chế được rồi
lisp clear.lsp của pro ketxu em lock những layer ko cần chuyển
sau đó chạy lisp
những layer lock sẽ không bị chuyển
kakaka
em rất cám ơn các pro đã nhiệt tình giúp thành viên amater như em
bác nào không giúp thì em lại tìm cách tạm chế
bằng cách không hiểu về lập trình nhưng em copy các dòng lisp các pro viết sẵn để chế với nhau
không thành công cũng thành nhân vậy
  • 0

#3563 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 06 June 2011 - 01:49 PM

mình không tán thành với cách nói của bạn, thực ra diễn đàn là để chia sẻ và học hỏi, mình tham gia diễn đàn cũng vì mục đích này, mình thấy đây là sân chơi bổ ích, ai cũng có thể tham gia vì ai cũng có khiếm khuyết hay những lỗ hổng trong kiến thức của mình vì vậy đây là sân chơi lành mạnh nhằm củng cố kiến thức cho ngưòi chơi là chính . Nếu bạn nói "đây là khu vực viết lisp theo yêu cầu " có nghĩa là đây là một xưởng chuyên gia công các loại mặt hàng theo yêu cầu của khách hàng, nếu ai không phải là khách hàng của xưởng này thì xin mời đi chỗ khác hoặc là không được có ý kiến gì phải không bạn. Nói như bạn thì các bạn là thầy hết rồi, giỏi hết rồi không cần phải học nữa mà chỉ đi dậy người ta thôi.

Phần màu đỏ: Ai cũng có quyền yêu cầu -> ai cũng là khách hàng của xưởng nhưng ko phải yêu cầu nào cũng dc đáp ứng Hình đã gửi


Chỉ nhắc bạn yêu cầu nhầm chỗ thôi, bạn tạo cái topic mới giống mình vừa tạo đây : http://www.cadviet.c...showtopic=44425
Ko thể chỉ vì 1 yêu cầu sửa 1 biến hệ thống mà bắt ng viết lisp (viết dùm) care hết tất cả các trường hợp -> xài ở đâu cũng dc.

p/s: bạn nhạy cảm với các bài viết có ý kiến ngược với mình như vậy thì khó mà học tập dc ở nơi mà đúng sai lẫn lộn như môi trường forum lắm. Chúc bạn vui.
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#3564 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 06 June 2011 - 02:03 PM

mình không tán thành với cách nói của bạn, thực ra diễn đàn là để chia sẻ và học hỏi, mình tham gia diễn đàn cũng vì mục đích này, mình thấy đây là sân chơi bổ ích, ai cũng có thể tham gia vì ai cũng có khiếm khuyết hay những lỗ hổng trong kiến thức của mình vì vậy đây là sân chơi lành mạnh nhằm củng cố kiến thức cho ngưòi chơi là chính . Nếu bạn nói "đây là khu vực viết lisp theo yêu cầu " có nghĩa là đây là một xưởng chuyên gia công các loại mặt hàng theo yêu cầu của khách hàng, nếu ai không phải là khách hàng của xưởng này thì xin mời đi chỗ khác hoặc là không được có ý kiến gì phải không bạn. Nói như bạn thì các bạn là thầy hết rồi, giỏi hết rồi không cần phải học nữa mà chỉ đi dậy người ta thôi.

Hề hề hề,
Không phải thế , không phải thế. Bác Tomboy chớ nóng.
Chỉ là góp ý với nhau thôi mà, đúng là mọi người đều có quyền góp ý, ý kiến của bác cũng rất tuyệt, tuy nhiên do thời gian có hạn và với mục tiêu là giúp đỡ được người cần sớm nhất nên mình cũng chưa nghĩ sâu hơn được. Rất cám ơn bác để mình sẽ nghĩ tiếp và hoàn chỉnh nó.
Còn bác detailing góp ý cũng chỉ là nhắc bác rằng do tính chất đặc biệt của chuyên mục mà thôi, chả phải phân biệt khách hành với chủ hàng chi đâu, và càng chả phải có ý không tôn trọng bác đâu.
Hề hề hề, Chớ giận, chớ giận nghen bá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.

#3565 tomboy

tomboy

    biết vẽ polygon

  • Members
  • PipPip
  • 72 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 06 June 2011 - 02:30 PM

Hề hề hề,
Không phải thế , không phải thế. Bác Tomboy chớ nóng.
Chỉ là góp ý với nhau thôi mà, đúng là mọi người đều có quyền góp ý, ý kiến của bác cũng rất tuyệt, tuy nhiên do thời gian có hạn và với mục tiêu là giúp đỡ được người cần sớm nhất nên mình cũng chưa nghĩ sâu hơn được. Rất cám ơn bác để mình sẽ nghĩ tiếp và hoàn chỉnh nó.
Còn bác detailing góp ý cũng chỉ là nhắc bác rằng do tính chất đặc biệt của chuyên mục mà thôi, chả phải phân biệt khách hành với chủ hàng chi đâu, và càng chả phải có ý không tôn trọng bác đâu.
Hề hề hề, Chớ giận, chớ giận nghen bác.

hì hì, chỉ là trò đùa thôi mà.
Mình tham gia diễn đàn cũng lâu rồi, mình thường xuyên theo dõi diễn đàn này, nhất là ở chủ đề viết lisp theo yêu cầu và mình cũng học hỏi được rất nhiều từ diễn đàn. mình thấy một chương trình hoàn chỉnh là phải tính tới tất cả các điều kiện của bài toán, sai lầm lớn nhất của người lập trình là ở chỗ đó, bạn thử nghĩ xem nếu mình đưa ra bài toán giải pt bậc 2 như sau 7x2+15x+8=0 nếu chỉ là bài toán với các tham số có sẵn như thế này và người lập trình chỉ cần gán biến A=7, B=15 và C=8 thì chuyện gì sẽ sảy ra khi mình lại có bài toán khác nhỉ, không lẽ người sử dụng lại phải mò vào mã code để chỉnh sửa lại hay sao. cũng từ bài toán này mình có thể suy rộng ra thôi, do vậy trong chủ đề này mình cũng có đóng góp ý kiến chân thành rất mong các bạn thông cảm
  • 0

#3566 tomboy

tomboy

    biết vẽ polygon

  • Members
  • PipPip
  • 72 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 06 June 2011 - 03:11 PM

(defun c:clear(/ nla)
(vl-load-com)
(command "undo" "be")
(setvar "cmdecho" 0)
(setq nla "funitures")
(if (not (tblsearch "layer" nla))(command "layer" "n" nla "c" "31" nla "lt" "continuous" nla ""))
(setvar "clayer" nla)
(command "change" (ssget "X") "" "p" "la" nla "c" "31" "")
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for block (vla-get-blocks adoc)
(if (not (wcmatch (strcase (vla-get-name block) t) "*_space*"))
(vlax-for ent block
(progn
(vla-put-color ent "31")
(vla-put-layer ent "funitures")
)
)
)
)
(acet-sysvar-set (list "dimclrt" 256 "dimclre" 256 "dimclrd" 256 "INSUNITS" 4 "INSUNITSDEFSOURCE" 4 "INSUNITSDEFTARGET" 4))
(command "dim1" "update" (ssget "X" '((0 . "Leader"))) "")
(vla-regen adoc acactiveviewport)
(command "-purge" "a" "" "N")
(command "undo" "e")
(princ))
hehe em lại tạm chế được rồi
lisp clear.lsp của pro ketxu em lock những layer ko cần chuyển
sau đó chạy lisp
những layer lock sẽ không bị chuyển
kakaka
em rất cám ơn các pro đã nhiệt tình giúp thành viên amater như em
bác nào không giúp thì em lại tìm cách tạm chế
bằng cách không hiểu về lập trình nhưng em copy các dòng lisp các pro viết sẵn để chế với nhau
không thành công cũng thành nhân vậy

mình test trên bản vẽ này báo lỗi: http://www.cadviet.c.../test_clear.dwg
Ôi chao, sao mà máy em function có tiếp đầu ngữ Vla lại không có trong phần Help trong máy mình nhỉ, lạ thật ấy vậy mà nó vẫn chạy vù vù các bác ạ, về phần này bác nào pro chia sẻ cho em với
  • 0

#3567 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 06 June 2011 - 05:01 PM

Vì bạn không chịu đọc bài mình nói

Cái theo yêu cầu Nhờ anh tạo lại cái lisp Nut vẫn sử dụng lệnh PE nhưng vào thẳng "Specify location for new vertex:"
không phải gõ "e" -> "i"


Update code : cho phép bạn chèn liên tiếp, đến bao giờ ấn Esc thì thôi!

(defun C:pe(/ ent) (setq ent (car(entsel "\n Chon doi tuong"))) 
(cond ((=(cdadr (entget ent)) "LINE")
(command "pedit" ent "" "E" )
(while (< 0 (getvar "CMDACTIVE")) (command "I" pause))
)
((=(cdadr (entget ent)) "LWPOLYLINE")
(command "pedit" ent "E")
(while (< 0 (getvar "CMDACTIVE")) (command "I" pause))
)
))

Theo cái sự biết + nghe ngóng của mình thì với lisp nút như trên chưa tính tới điểm muốn tạo mới nó nằm ở phân đoạn nào của pline nên đỉnh được chèn thên cứ được nối với đỉnh đầu của block thì phải.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3568 beba

beba

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 06 June 2011 - 08:48 PM

Anh Duy ơi ! cái lisp nội suy cao độ em dùng rất tốt, nhờ nó em đỡ biết bao nhiêu. Thành thật rất cảm ơn anh rất nhiều
Nhưng sao từ Tết đến giờ anh không vào http://duy782006.blogspot.com/2009/08/yeu-cau-viet-lisp.htmlgiúp mọi người nữa vậy. Mọi người chờ anh miết :rolleyes:
  • 0

#3569 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 June 2011 - 09:33 PM

mình test trên bản vẽ này báo lỗi: http://www.cadviet.c.../test_clear.dwg
Ôi chao, sao mà máy em function có tiếp đầu ngữ Vla lại không có trong phần Help trong máy mình nhỉ, lạ thật ấy vậy mà nó vẫn chạy vù vù các bác ạ, về phần này bác nào pro chia sẻ cho em với

Mình thấy hơi buồn nếu bạn dùng xref làm chuẩn mực test khi đang nói về Block :)
Mình xin khẳng định lisp clear không có tác dụng với Xref

Còn câu bạn nói mình chưa kịp lĩnh hội đã phải đi công trường rồi, giờ mới dám hỏi bạn : theo bạn, thuộc tính của block gồm những gì, và tại sao không thể thay đổi layer các đối tượng bên trong mà không làm thay đổi thuộc tính của block ??
  • 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


#3570 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 07 June 2011 - 06:49 AM

trích dẫn tomboy
chịu thua, chưa 1 lisp nào có thể tẩy được layer của bản vẽ mà thuộc tính của Block được giữ nguyên, nói chung bạn phải định nghĩa lại block của bạn bằng phương pháp thủ công trước khi bạn sử dụng lệnh dlay của bạn
bạn có chắc dùng lisp để tẩy hết các layer thừa trong bản vẽ trong khi các blocl của bản vẽ đó vẫn giữ nguyên thuộc tính được không?

bác ơi bác dùng thử lisp này xem

hehe em lại tạm chế được rồi


Hoặc đi theo hướng khác là dùng laymrg như thế này xem sao ? Mình viết vội, hi vọng bạn tiếp tục chế thêm được.lstLay-Re là danh sách các Layer giữ lại, bạn cứ thêm vào nhé ^^
(defun c:clay(/ clay lstLay lstCmd)
(command "undo" "be")
(setvar "cmdecho" 0)
(setq lstLay-Re '("defpoints" "KCVN-HATCH") ;Danh sach layer giu lai
Lay-dich "Test" ;Ten layer chuyen tat ca ve
color "100" ;Mau
ltype "continuous" ;Linetype
lstLay-Del (table "Layer")
lstLay-Del (vl-remove-if '(lambda (i) (or (vl-position i lstLay-Re ) (= i Lay-dich))) lstLay-Del ))

(if (= (tblsearch "layer" Lay-dich) nil)
(command "layer" "n" Lay-dich "c" color Lay-dich "lt" ltype Lay-dich "")
)
(setq lstCmd (strcat "-laymrg\r"
(apply 'strcat (mapcar '(lambda(x) (strcat "N\r" x "\r")) lstLay-Del))
"\r"
"N\r"
Lay-dich
"\rY\r"
))
(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) lstCmd)
(command "undo" "en")
)
(defun Table (s / d r)
(while (setq d (tblnext s (null d)))
(setq r (cons (cdr (assoc 2 d)) r))
)
)

  • 0

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


#3571 beba

beba

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 07 June 2011 - 08:22 AM

Nhờ anh Ketxu xem lại giúp em : cái lisp PE làm trên Cad 2007 thì không vấn đề gì,
nhưng sao làm trên Cad 14 hay 2002 nếu mình chọn PLine thì nó báo " Chon doi tuongnil " rồi thoát luôn
Phần mềm Nova nó chạy ổn trên Cad 14 hay 2002 nên em vẫn phải dùng nó.
Anh sửa lại sao cho dùng được 2 bản Cad này giúp em.
Cảm ơn anh nhiều
  • 0

#3572 3d.decor

3d.decor

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 June 2011 - 09:46 AM

Hoặc đi theo hướng khác là dùng laymrg như thế này xem sao ? Mình viết vội, hi vọng bạn tiếp tục chế thêm được.lstLay-Re là danh sách các Layer giữ lại, bạn cứ thêm vào nhé ^^

(defun c:clay(/ clay lstLay lstCmd)
(command "undo" "be")
(setvar "cmdecho" 0)
(setq lstLay-Re '("defpoints" "KCVN-HATCH") ;Danh sach layer giu lai
Lay-dich "Test" ;Ten layer chuyen tat ca ve
color "100" ;Mau
ltype "continuous" ;Linetype
lstLay-Del (table "Layer")
lstLay-Del (vl-remove-if '(lambda (i) (or (vl-position i lstLay-Re ) (= i Lay-dich))) lstLay-Del ))

(if (= (tblsearch "layer" Lay-dich) nil)
(command "layer" "n" Lay-dich "c" color Lay-dich "lt" ltype Lay-dich "")
)
(setq lstCmd (strcat "-laymrg\r"
(apply 'strcat (mapcar '(lambda(x) (strcat "N\r" x "\r")) lstLay-Del))
"\r"
"N\r"
Lay-dich
"\rY\r"
))
(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) lstCmd)
(command "undo" "en")
)
(defun Table (s / d r)
(while (setq d (tblnext s (null d)))
(setq r (cons (cdr (assoc 2 d)) r))
)
)


thank you pro lisp chạy rất ổn
phần chú thích tiếng việt tạo điều kiện cho amater sửa theo ý thích mỗi người rất dễ hiểu
block tấy sạch tinh layer xong vẫn giữ nguyên thuộc tính
lisp chạy cũng nhẹ không nặng lắm
rất cám ơn pro nhiệt tình giúp dỡ
  • 0

#3573 lenhatanh

lenhatanh

    biết vẽ polygon

  • Members
  • PipPip
  • 75 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 07 June 2011 - 10:27 AM

Công việc của em rất hay phải bổ sung mặt cắt địa dình từ bình đồ
(Bình đồ 2D, chỉ có các đường đồng mức 2D và rất ít Text cao độ).
Mỗi lần vẽ thêm MCN rất mất thời gian và công sức...
Em có ý tưởng lập một lisp như sau: Chuyển bình đồ thành 3D (Các đường ĐM có cao độ Z),
sau khi vạch một đường (Line or Pline) thể hiện vị trí mặt cắt thì CT sẽ chuyển Line or Pline đó
thành Face (hoặc gì gì đó) rồi tìm giao điểm của nó với các đường Đ.Mức để vẽ được mặt cắt ngang
Đ.hình tại vị trí vừa vạch trên B.Đồ.
Em nhờ các Bác tư vấn giúp xem liệu có thể thực hiện được không ?.
Em xin cám ơn trước !
  • 0

#3574 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 07 June 2011 - 03:28 PM

Nhờ anh Ketxu xem lại giúp em : cái lisp PE làm trên Cad 2007 thì không vấn đề gì,
nhưng sao làm trên Cad 14 hay 2002 nếu mình chọn PLine thì nó báo " Chon doi tuongnil " rồi thoát luôn
Phần mềm Nova nó chạy ổn trên Cad 14 hay 2002 nên em vẫn phải dùng nó.
Anh sửa lại sao cho dùng được 2 bản Cad này giúp em.
Cảm ơn anh nhiều

Rất tiếc mình không có 2 CAD này để kiểm tra giúp bạn. Do lisp dùng command nên có nguy cơ bị lệ thuộc vào phiên bản rất lớn :) Hi vọng các bác khác dùng CAD 2 đời này sẽ giúp bạn
  • 0

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


#3575 3d.decor

3d.decor

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 07 June 2011 - 10:48 PM

pro nào viết hộ em lisp dùng lệnh WIPEOUT kiểu như hach được không
chứ chon lần lượt mất công quá
kiểu như chỉ vào vùng chon và ok là được
cảm ơn
  • 0

#3576 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 07 June 2011 - 11:15 PM

pro nào viết hộ em lisp dùng lệnh WIPEOUT kiểu như hach được không
chứ chon lần lượt mất công quá
kiểu như chỉ vào vùng chon và ok là được
cảm ơn

Bạn thử đoạn này xem:

(defun c:Wo()
(setq p (getpoint "chon diem tao wipeout: "))
(command "-boundary" p "")
(command "wipeout" "p" (entlast) "y")
)

  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#3577 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 08 June 2011 - 05:56 AM

Mình chưa rõ cái lisp của bạn cop nó mần chi, lẽ nào Pedit cả tập chọn ss ^^.
Mình sửa lại như thế này, làm mỗi lần 1 điểm, nếu bạn thích giống CAD thì bỏ phần pause "x" "" đi.

(defun C:nut()
(setq ent (car(entsel "\n Chon doi tuong")))
(cond ((=(cdadr (entget ent)) "LINE")(command "pedit" ent "" "E" "I" pause "x" ""))
((=(cdadr (entget ent)) "*POLYLINE")(command "pedit" ent "E" "I" pause "x" ""))
)
)

Update code : cho phép bạn chèn liên tiếp, đến bao giờ ấn Esc thì thôi!

(defun C:pe(/ ent) (setq ent (car(entsel "\n Chon doi tuong"))) 
(cond ((=(cdadr (entget ent)) "LINE")
(command "pedit" ent "" "E" )
(while (< 0 (getvar "CMDACTIVE")) (command "I" pause))
)
((=(cdadr (entget ent)) "LWPOLYLINE")
(command "pedit" ent "E")
(while (< 0 (getvar "CMDACTIVE")) (command "I" pause))
)
))

Nhờ anh Ketxu xem lại giúp em : cái lisp PE làm trên Cad 2007 thì không vấn đề gì,
nhưng sao làm trên Cad 14 hay 2002 nếu mình chọn PLine thì nó báo " Chon doi tuongnil " rồi thoát luôn
Phần mềm Nova nó chạy ổn trên Cad 14 hay 2002 nên em vẫn phải dùng nó.
Anh sửa lại sao cho dùng được 2 bản Cad này giúp em.
Cảm ơn anh nhiều

Chào Ketxu, beba
Tue_NV không sử dụng CAD 2002 và R14, nhưng mình biết bạn BeBa đang sử dụng đối tượng là POLYLINE để vẽ
- Ở dòng code này của Ketxu : Lisp nut.lsp
((=(cdadr (entget ent)) "*POLYLINE")(command "pedit" ent "E" "I" pause "x" ""))
Ketxu sử dụng hàm (=(cdadr (entget ent)) "*POLYLINE") thì kết quả luôn trả về NIL vì chẳng có anh nào (cdadr (entget ent)) là = "*POLYLINE" cả. Hàm = nó kiểm tra từng kí tự một. Nếu trùng nhau hoàn toàn mới có kết quả là T. Ketxu thay bằng hàm wcmatch thì được.
- Ở dòng code này của Ketxu : Lisp pe.lsp
(=(cdadr (entget ent)) "LWPOLYLINE") -> Bạn Beba lại đang sử dụng đối tượng là POLYLINE => cũng chẳng thỏa mãn -> kết quả trả về nil
CAD2007 của Beba sử dụng không có vấn đề gì vì lí do là CAD 2007 mặc định là sử dụng LWPOLYLINE để vẽ và bạn đang sử dụng LWPOLYLINE để vẽ đó

=> Cho nên hãy thay đoạn code này :
(=(cdadr (entget ent)) "*POLYLINE")
thành :
(wcmatch (cdadr (entget ent)) "*POLYLINE")

Chúc các bạn buổi sáng tốt lành :rolleyes:
  • 3

#3578 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 June 2011 - 08:18 AM

Ketxu cũng đã nhận ra chỗ sai nên sửa theo Lwpolyline nhưng k lường được CAD đời thấp hơn nó dùng cái j ^^ Tks bác đã sửa lại ^^
  • 0

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


#3579 3d.decor

3d.decor

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 08 June 2011 - 09:03 AM

rất cảm ơn pro phamngoctukts đã nhiệt tình giúp đỡ
lisp chạy rất ổn

pro nào rảnh chỉnh lại em đoan lisp ko biết pro nào viết
dây là lisp nối line
chỉnh lại là chỉ nối những line được chon được không a
vì lisp này chọn line xong những line nào dính chạm điểm đầu đều nối tất
tuy cũng tiện nhưng cũng có lúc bất tiện
mong các pro giúp đỡ

(defun c:jj (/ tdt ssdt sodt index)
(defun ObjName (ssdt /)
(cdr (assoc '0 (entget ssdt)))
)
(defun MoPL (ssdt /)
(= (cdr (assoc '70 (entget ssdt))) 0)
)
(defun NoiPL (ssdt /)
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" "All" "" "X")
)
)
(defun NoiLC (ssdt /)
(command ".PEDIT" ssdt "Y" "J" "All" "" "X")
)
(setq
tdt (ssget)
sodt (sslength tdt)
index 0
)
(repeat sodt
(setq
ssdt (ssname tdt index)
index (1+ index)
)
(if (or (= (Objname ssdt) "LWPOLYLINE")
(= (Objname ssdt) "POLYLINE")
)
(NoiPL ssdt)
)
(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))
(NoiLC ssdt)
)
)
(command "osnap" "end,cen,mid,ins,int,nea,nod,qua,per,tan,app,ext,par" )
(princ)
)

  • 0

#3580 nhocbabi

nhocbabi

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: -3 (bình thường)

Đã gửi 08 June 2011 - 09:36 AM

Chào cả nhà, em lại có chút việc để nhờ các bác giúp đỡ ạ. Việc của em là như sau:
Ví dụ mình đang có một text ABC1234. Thì có một lisp nào để có thể tự động list ra một loạt các text khác tăng một ký tự bất kỳ trong chuỗi text này không ạ. Chẳng hạn ở đây em muốn tăng dần (hoặc giảm) ký tự thứ 4 trong chuỗi trên, thì sau khi thực hiện lisp sẽ cho kết quả là ABC2234, ABC3234, ABC4234...
Hiện em đã sử dụng lisp đánh số cột nhưng mà chỉ thay đổi được ký tự cuối cùng thôi ạ!
Nhờ các bác giúp ạ, em cảm ơn các bác nhiều!

List ra đâu và tăng đến đâu bạn :)

Chỉ list ra trên cùng một bản vẽ thôi bác ạ. Và có thể tăng đến khi nào mình muốn dừng :lol: . Trong ví dụ trên là ABC1234, em muốn tăng ký tự thứ 4 từ trái sang chẳng hạn, thì khi đến lần tăng thứ 10 nó sẽ có kết quả là ABC10234, đến lần thứ 100 thì sẽ có kết quả ABC100234. Còn phần ký tự ABC thì tạm thời không quan tâm, nên cứ để cố định ạ!


Mình vẫn chưa hiểu ý bạn luôn :) Có lẽ mình chậm hiểu quá :) Ví dụ chẳng may kí tự thứ 4 của bạn nó là chữ thì tăng đến đâu ^^ hết bảng chữ cái mất. Đầu vào như thế nào, đầu ra như thế nào ?Cái số 10, 100 là do bạn nhấn vào hay làm sao ??
List là liệt kê, liệt kê vào đâu ?? Chỉ list ra trên cùng một bản vẽ thôi bác ạ là câu tối nghĩa
Srr bạn mình là dân kỹ thuật nên cái j cũng phải cặn kẽ ^^ Bạn cũng nên cố gắng trình bày khoa học bằng 1 bản vẽ đầu vào, đầu ra, thì chắc là người tối dạ như mình không phải hỏi lại nhiều mà dính vào tội spam ^^


Trước hết sorry vì đã làm bác mất thời gian vì câu hỏi của em. Thú thực khi em hỏi, em cũng chỉ hình dung các thao tác trong công việc của mình để diễn đạt ra thôi nên có thể làm mọi người không hình dung ra được. Em xin gửi lại file cad lên đây để nhờ các bác giúp ạ!
http://www.cadviet.c...s/3/vi_du_5.dwg
  • 0