phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 6 7, 2011 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") ) 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
Tue_NV 3915 Báo cáo bài đăng Đã đăng Tháng 6 7, 2011 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 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
ketxu 3000 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 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 ^^ 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
3d.decor 1 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 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) ) 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
nhocbabi 3 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 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.com/upfiles/3/vi_du_5.dwg 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
lenhatanh 2 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 Chào cả Nhà ! xin cho mình hỏi trong CAD có thể viết Lisp tìm được giao của đường (LWPolyline có cao độ Z=/0) với mặt (3D Face) không ? 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
ketxu 3000 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 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! Của bạn đây, mình code gấp, hi vọng ít lỗi : (defun C:lText (/ h ent str num truoc sau so inc pt i msp) (setq ent (car(entsel "Ch\U+1ECDn text :"))) (if (=(cdadr (entget ent)) "TEXT" ) (progn (redraw ent 3) (setq str (cdr(assoc 1 (entget ent))) num (getint "\nThay \U+0111\U+1ED5i ch\U+1EEF th\U+1EE9 m\U+1EA5y ? :")) (if (distof (substr str num 1)) (progn (setq truoc (substr str 1 (1- num)) sau (substr str (1+ num)) so (atof (substr str num 1)) inc (getint "\nT\U+0103ng m\U+1EA5y l\U+1EA7n ? :") pt (getpoint "\nList ra :") i -1 h (* (getvar "dimtxt")(getvar "dimscale")) msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) ) (repeat inc (vla-addtext msp (strcat truoc (rtos (setq so (1+ so)) 2 0) sau) (vlax-3d-point (polar pt (/ pi -2) (* 1.5 (setq i (1+ i)) h))) h ) ) ) (princ "\nCh\U+1EEF ch\U+1EC9 \U+0111\U+1ECBnh kh\U+00F4ng ph\U+1EA3i s\U+1ED1!") ) ) ) (redraw ent 4) (princ) ) 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
nhocbabi 3 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 Của bạn đây, mình code gấp, hi vọng ít lỗi : (defun C:lText (/ h ent str num truoc sau so inc pt i msp) (setq ent (car(entsel "Ch\U+1ECDn text :"))) (if (=(cdadr (entget ent)) "TEXT" ) (progn (redraw ent 3) (setq str (cdr(assoc 1 (entget ent))) num (getint "\nThay \U+0111\U+1ED5i ch\U+1EEF th\U+1EE9 m\U+1EA5y ? :")) (if (distof (substr str num 1)) (progn (setq truoc (substr str 1 (1- num)) sau (substr str (1+ num)) so (atof (substr str num 1)) inc (getint "\nT\U+0103ng m\U+1EA5y l\U+1EA7n ? :") pt (getpoint "\nList ra :") i -1 h (* (getvar "dimtxt")(getvar "dimscale")) msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) ) (repeat inc (vla-addtext msp (strcat truoc (rtos (setq so (1+ so)) 2 0) sau) (vlax-3d-point (polar pt (/ pi -2) (* 1.5 (setq i (1+ i)) h))) h ) ) ) (princ "\nCh\U+1EEF ch\U+1EC9 \U+0111\U+1ECBnh kh\U+00F4ng ph\U+1EA3i s\U+1ED1!") ) ) ) (redraw ent 4) (princ) ) Mình đã dùng thử lisp của bạn cho, nhưng không hiểu sao lúc lisp hỏi "list ra" thì mình không thể chọn được điểm để đặt các text tiếp theo. Không biết mình có làm sai chỗ nào không. Nhờ bạn kiểm tra lại giúp ạ! 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
ketxu 3000 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 Mình đã dùng thử lisp của bạn cho, nhưng không hiểu sao lúc lisp hỏi "list ra" thì mình không thể chọn được điểm để đặt các text tiếp theo. Không biết mình có làm sai chỗ nào không. Nhờ bạn kiểm tra lại giúp ạ! Mình viết để list ra hàng loạt 1 phát luôn, chứ không phải giống Copy tăng. Liệu có phải ý bạn là cứ copy tăng hoài ??? (vì trong bản vẽ cũng không nói phương thức "list" ra) Thông báo lỗi của bạn là gì ??? P/S : cũng là vì bạn không thể hiện ý kiến 1 cách đầy đủ, nên để bài viết qua lại cứ nhiều lên từng giờ, mà topic thì ngày một loãng đi.. 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
nhocbabi 3 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 Mình viết để list ra hàng loạt 1 phát luôn, chứ không phải giống Copy tăng. Liệu có phải ý bạn là cứ copy tăng hoài ??? (vì trong bản vẽ cũng không nói phương thức "list" ra) Thông báo lỗi của bạn là gì ??? P/S : cũng là vì bạn không thể hiện ý kiến 1 cách đầy đủ, nên để bài viết qua lại cứ nhiều lên từng giờ, mà topic thì ngày một loãng đi.. Ý mình là làm theo kểu copy đấy ạ, mỗi một lần copy thì số trong text sẽ tăng dần. Điểm đặt của các text sẽ do mình chọn. Còn lisp bạn cho mình, khi chọn text, chọn số muốn tăng, chọn số lần tăng xong, thì dòng lệnh lại về command. Mình cũng ko muốn viết bài qua lại nhiều lần đâu, vừa mất thời gian của mọi người vừa làm ảnh hưởng đến diễn đàn. Nhưng thực sự, mình chỉ biết diễn đạt đến vậy. Nên nếu có gì, mong bạn và mọi người thông cảm dùm mình, mình cũng không cố ý 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
ketxu 3000 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 Ý mình là làm theo kểu copy đấy ạ, mỗi một lần copy thì số trong text sẽ tăng dần. Điểm đặt của các text sẽ do mình chọn. Còn lisp bạn cho mình, khi chọn text, chọn số muốn tăng, chọn số lần tăng xong, thì dòng lệnh lại về command. Mình cũng ko muốn viết bài qua lại nhiều lần đâu, vừa mất thời gian của mọi người vừa làm ảnh hưởng đến diễn đàn. Nhưng thực sự, mình chỉ biết diễn đạt đến vậy. Nên nếu có gì, mong bạn và mọi người thông cảm dùm mình, mình cũng không cố ý mà! Mình bôi đỏ dòng "Thông báo lỗi của bạn là gì", không biết bạn để ý không. Vì như bạn nói thì đến tạo text lisp mình cũng không làm đc, trong khi bên máy mình lại được, nên cũng chẳng biết sao nữa. Còn cái vụ copy với "list", mình đã mất 2 lần hỏi bạn từ "list" của bạn có nghĩa là gì, đến bây giờ nó mới lòi ra là COPY...haiza... Mình sửa thành copy, thực chất là tạo text mới theo text style hiện hành. Nếu bạn không ưng, có thể sửa thành copy đối tượng gốc. Lần này nếu dùng mà không được như ý, mong bạn nhấn F2 ngay lúc thực hiện lisp bị lỗi và copy nó lên đây nhé (defun C:lText (/ h ent str num truoc sau so pt msp) (setq ent (car(entsel "Ch\U+1ECDn text :"))) (if (wcmatch(cdadr (entget ent)) "*TEXT" ) (progn (redraw ent 3) (setq str (cdr(assoc 1 (entget ent))) num (getint "\nThay \U+0111\U+1ED5i ch\U+1EEF th\U+1EE9 m\U+1EA5y ? :")) (redraw ent 4) (if (distof (substr str num 1)) (progn (setq truoc (substr str 1 (1- num)) sau (substr str (1+ num)) so (atof (substr str num 1)) h (* (getvar "dimtxt")(getvar "dimscale")) msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) ) (while (setq pt (getpoint "\nList ra :")) (vla-addtext msp (strcat truoc (rtos (setq so (1+ so)) 2 0) sau) (vlax-3d-point pt) h ) ) ) (princ "\nCh\U+1EEF ch\U+1EC9 \U+0111\U+1ECBnh kh\U+00F4ng ph\U+1EA3i s\U+1ED1!") ) ) ) (princ) ) P/S : copy đối tượng gốc bác Tuệ đã làm bên dưới, có thêm phần bước nhảy ("tăng mấy lần ^^"), nếu có Express thì bạn có thể dùng 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
Tue_NV 3915 Báo cáo bài đăng Đã đăng Tháng 6 8, 2011 Ý mình là làm theo kểu copy đấy ạ, mỗi một lần copy thì số trong text sẽ tăng dần. Điểm đặt của các text sẽ do mình chọn. Còn lisp bạn cho mình, khi chọn text, chọn số muốn tăng, chọn số lần tăng xong, thì dòng lệnh lại về command. Mình cũng ko muốn viết bài qua lại nhiều lần đâu, vừa mất thời gian của mọi người vừa làm ảnh hưởng đến diễn đàn. Nhưng thực sự, mình chỉ biết diễn đạt đến vậy. Nên nếu có gì, mong bạn và mọi người thông cảm dùm mình, mình cũng không cố ý mà! Bạn thử code này : (defun C:lText (/ dich ent str num truoc sau so inc) (setq ent (car(entsel "Ch\U+1ECDn text :"))) (if (= (cdr (assoc 0 (entget ent))) "TEXT" ) (progn (setq ins (cdr (assoc 10 (entget ent))) str (cdr(assoc 1 (entget ent))) num (getint "\nThay \U+0111\U+1ED5i ch\U+1EEF th\U+1EE9 m\U+1EA5y ? :") inc (getint "\nT\U+0103ng m\U+1EA5y l\U+1EA7n ? :") truoc (substr str 1 (1- num)) sau (substr str (1+ num)) so1 (atof (substr str num 1)) ) (setq dich (acet-ss-drag-move (ssadd ent (ssadd)) ins "\n Diem dich Move" t)) (while dich (setq so (strcat truoc (rtos (setq so1 (+ so1 inc)) 2 0) sau) ) (if (distof (substr str num 1)) (progn (command "copy" ent "" ins dich) (setq ent (entlast)) (entmod (subst (cons 1 so) (assoc 1 (entget ent)) (entget ent))) (setq ins (cdr (assoc 10 (entget ent))) ) (setq dich (acet-ss-drag-move (ssadd ent (ssadd)) ins "\n Diem dich Move" t)) (setq str (cdr(assoc 1 (entget ent))) ) ) ) ) )) (princ) ) 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
nhocbabi 3 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 Mình bôi đỏ dòng "Thông báo lỗi của bạn là gì", không biết bạn để ý không. Vì như bạn nói thì đến tạo text lisp mình cũng không làm đc, trong khi bên máy mình lại được, nên cũng chẳng biết sao nữa. Còn cái vụ copy với "list", mình đã mất 2 lần hỏi bạn từ "list" của bạn có nghĩa là gì, đến bây giờ nó mới lòi ra là COPY...haiza... Mình sửa thành copy, thực chất là tạo text mới theo text style hiện hành. Nếu bạn không ưng, có thể sửa thành copy đối tượng gốc. Lần này nếu dùng mà không được như ý, mong bạn nhấn F2 ngay lúc thực hiện lisp bị lỗi và copy nó lên đây nhé (defun C:lText (/ h ent str num truoc sau so pt msp) (setq ent (car(entsel "Ch\U+1ECDn text :"))) (if (wcmatch(cdadr (entget ent)) "*TEXT" ) (progn (redraw ent 3) (setq str (cdr(assoc 1 (entget ent))) num (getint "\nThay \U+0111\U+1ED5i ch\U+1EEF th\U+1EE9 m\U+1EA5y ? :")) (redraw ent 4) (if (distof (substr str num 1)) (progn (setq truoc (substr str 1 (1- num)) sau (substr str (1+ num)) so (atof (substr str num 1)) h (* (getvar "dimtxt")(getvar "dimscale")) msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) ) (while (setq pt (getpoint "\nList ra :")) (vla-addtext msp (strcat truoc (rtos (setq so (1+ so)) 2 0) sau) (vlax-3d-point pt) h ) ) ) (princ "\nCh\U+1EEF ch\U+1EC9 \U+0111\U+1ECBnh kh\U+00F4ng ph\U+1EA3i s\U+1ED1!") ) ) ) (princ) ) P/S : copy đối tượng gốc bác Tuệ đã làm bên dưới, có thêm phần bước nhảy ("tăng mấy lần ^^"), nếu có Express thì bạn có thể dùng Mình đã dùng lisp bác cho, nhưng không hiểu sao nó vẫn báo lỗi. Lỗi như sau ạ: Command: ltext Chọn text : Thay đổi chữ thứ mấy ? :5 ; error: no function definition: VLAX-GET-ACAD-OBJECT Command: Command: ltext Chọn text :6 ; error: bad argument type: lentityp nil Command: Command: ltext Chọn text :3 ; error: bad argument type: lentityp nil Trong trường hợp này, text của mình là ABC1234ABC. Mình đã thử đi thử lại vẫn không được! Vì thực chất mình cũng không biết gì về lisp cả, chỉ biết đi xin và sử dụng thôi. Nên chắc còn phải nhờ mọi người giúp đỡ dài dài! Còn lisp của bác Tue_NV cho, mình đã sử dụng rồi, và suôn sẻ bạn ạ! 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
Tue_NV 3915 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 Mình đã dùng lisp bác cho, nhưng không hiểu sao nó vẫn báo lỗi. Lỗi như sau ạ: Command: ltext Chọn text : Thay đổi chữ thứ mấy ? :5 ; error: no function definition: VLAX-GET-ACAD-OBJECT Command: Command: ltext Chọn text :6 ; error: bad argument type: lentityp nil Command: Command: ltext Chọn text :3 ; error: bad argument type: lentityp nil Trong trường hợp này, text của mình là ABC1234ABC. Mình đã thử đi thử lại vẫn không được! Vì thực chất mình cũng không biết gì về lisp cả, chỉ biết đi xin và sử dụng thôi. Nên chắc còn phải nhờ mọi người giúp đỡ dài dài! Còn lisp của bác Tue_NV cho, mình đã sử dụng rồi, và suôn sẻ bạn ạ! Bạn thêm dòng (vl-load-com) vào trong Lisp của Ketxu là được. (defun C:lText (/ h ent str num truoc sau so pt msp) (vl-load-com) (setq ent (car(entsel "Ch\U+1ECDn text :"))) ..... 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
tranhoangxd 2 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 nhờ các bác viết hộ em một cái lisp mà nó thực hiện như sau vd nếu đoạn trước mình move một đoạn 100 thì đoạn move sau cũng vậy hay stretch cung vậy ( đại loại là nếu thực hiện những lệnh nào liên quan đến chuyển khoảng cách thì nó sẽ nhớ đc khoảng cách trước đó mà mình đã thưc hiên) 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
beba 0 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 Em đã sửa " (wcmatch (cdadr (entget ent)) "*POLYLINE") " và đã dùng ngon rồi Cảm ơn Tue_NV Cảm ơn Ketxu 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
phamthanhbinh 3147 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 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) ) Hề hề hề, Chả biết mình có lẩm cẩm không, nhưng nếu như mình hiểu đúng yêu cầu của bạn thì bạn chỉ cần chọn các đối tượng cần nối là Ok mà. Vì trong lisp này tập đối tượng tdt là do bạn có quyền lựa chọn. Những thằng nào bạn không muốn nối thì chỉ việc cóc thèm chọn nó là xong. 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
ketxu 3000 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 nhờ các bác viết hộ em một cái lisp mà nó thực hiện như sau vd nếu đoạn trước mình move một đoạn 100 thì đoạn move sau cũng vậy hay stretch cung vậy ( đại loại là nếu thực hiện những lệnh nào liên quan đến chuyển khoảng cách thì nó sẽ nhớ đc khoảng cách trước đó mà mình đã thưc hiên) cảm ơn các bác trươc Theo mình nghĩ là khó ! 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
3d.decor 1 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 Hề hề hề, Chả biết mình có lẩm cẩm không, nhưng nếu như mình hiểu đúng yêu cầu của bạn thì bạn chỉ cần chọn các đối tượng cần nối là Ok mà. Vì trong lisp này tập đối tượng tdt là do bạn có quyền lựa chọn. Những thằng nào bạn không muốn nối thì chỉ việc cóc thèm chọn nó là xong. Hề hề hề.... không được bác à kể cả ẩn layer khác chạm vào đầu line chọn nó cũng nối nữa ko tin bác dùng thử thì biết em toàn chon một line và ok thì line nào chạm nó nối tất em tạm thời lock layer không nối để dùng tạm thì đượ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
ketxu 3000 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 không được bác à kể cả ẩn layer khác chạm vào đầu line chọn nó cũng nối nữa ko tin bác dùng thử thì biết em toàn chon một line và ok thì line nào chạm nó nối tất em tạm thời lock layer không nối để dùng tạm thì được Bạn dùng tạm cái này. Lisp bạn post chủ đích của bác Hoành là làm nó nối tất mà chỉ cần chọn 1 Line đầu, giờ bạn lại muốn k xài cái đặc ích của nó thì quả không phù hợp, chi bằng viết cái khác :) (defun c:jj (/ lstSS lstEt ss) (setq lstSS (acet-ss-to-list (setq ss(ssget))) lstEtype (mapcar 'cdadr (mapcar 'entget lstSS))) (if (or (vl-position "LINE" lstEtype) (vl-position "ARC" lstEtype)) (command ".pedit" "m" ss "" "Y" "J" 0 "") (command ".pedit" "m" ss "J" 0 "") )) 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
phamthanhbinh 3147 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 không được bác à kể cả ẩn layer khác chạm vào đầu line chọn nó cũng nối nữa ko tin bác dùng thử thì biết em toàn chon một line và ok thì line nào chạm nó nối tất em tạm thời lock layer không nối để dùng tạm thì được Hề hề hề, Bạn thử xài cái này coi sao hỉ??? (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 ss /) (if (MoPL ssdt) (command ".PEDIT" ssdt "J" ss "" "X") ) ) (defun NoiLC (ssdt ss/) (command ".PEDIT" ssdt "Y" "J" ss "" "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 tdt) ) (if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC")) (NoiLC ssdt tdt) ) ) (command "osnap" "end,cen,mid,ins,int,nea,nod,qua,per,tan,app,ext,par" ) (princ) ) Hy vọng đúng ý bạn. 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
hakhoailang 2 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 (Đă chỉnh sửa) các bác ai có cái lisp tính khoảng cách cho em xin với ý tưởng của em là : 1) pick vào điểm A 2) pick vào điểm B 3)pick vào text cần thay đổi ( nếu có bước 3 thì kết thúc luôn không cần bước 4 ) 4) nếu không có text cầ thay đổi thì chọn điểm ghi text mới và em có 1 cái lisp với nội dung như dưới đây , nhưng khi em dùng nó thì nó chống với các lisp khác , có cao thủ nào chỉnh sửa nó hộ em vơi . cái lisp đó là lisp tính cao độ . nội dung : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq sc 1) (setvar "dimzin" 0) (defun c:os () (setvar "osmode" 545)) ;;;;;=============================== ;; Silent load. (princ) (defun c:e1 () (command "erase" "all" "")) (defun c:+++++ () (command "'.zoom" "8x")) (defun c:++++++ () (command "'.zoom" "16x")) (defun c:++++ () (command "'.zoom" "4x")) (defun c:+++ () (command "'.zoom" "2x")) (defun c:++ () (command "'.zoom" "1.5x")) (defun c:+ () (command "'.zoom" "1.2x")) (defun c:- () (command "'.zoom" "0.9x")) (defun c:-- () (command "'.zoom" "0.5x")) (defun c:--- () (command "'.zoom" "0.2x")) (defun c:---- () (command "'.zoom" "0.1x")) (defun c:----- () (command "'.zoom" "0.05x")) (defun c:------ () (command "'.zoom" "0.01x")) (defun c:1 () (ssget) (command "change" "p" "" "p" "c" "1" "")) (defun c:2 () (ssget) (command "change" "p" "" "p" "c" "2" "")) (defun c:3 () (ssget) (command "change" "p" "" "p" "c" "3" "")) (defun c:4 () (ssget) (command "change" "p" "" "p" "c" "4" "")) (defun c:5 () (ssget) (command "change" "p" "" "p" "c" "5" "")) (defun c:6 () (ssget) (command "change" "p" "" "p" "c" "6" "")) (defun c:7 () (ssget) (command "change" "p" "" "p" "c" "7" "")) (defun c:8 () (ssget) (command "change" "p" "" "p" "c" "8" "")) (defun c:9 () (ssget) (command "change" "p" "" "p" "c" "9" "")) (defun c:10 () (ssget) (command "change" "p" "" "p" "c" "10" "")) (defun c:11 () (ssget) (command "change" "p" "" "p" "c" "11" "")) (defun c:0 () (ssget) (command "change" "p" "" "p" "c" "BY LAYER" "")) ;********************************************************************** (defun c:goc () (setvar "cmdecho" 0) ;(setq osm (getvar "osmode")) (if (= sc nil)(setq sc (getreal (strcat"\nChon ty le ve (=kt ve/kt Autocad):")))) (prompt "\n*****Chu y: Ty le hien tai la*****:")(princ sc) ;(if (/= sc2 nil)(setq sc sc2)) (command ".zoom" "e") ;(setq sspl (SSGET "c" '(10.5 20.25) '(10.5 27.5) (LIST(CONS 0 "lwpolyline"))));su dung khi ban ve co 1 cn o toa do co dinh ;(if (= th nil) (setq th (ssget "w" '(10.5 19.25 0) '(11.5 18.00 0) (list(cons 0 "TEXT"))))) (command "zoom" "p") (if (and (= a nil)(/= sspl nil))(setq a (cdr(assoc 10 (entget (ssname sspl 0)))))) (IF (= a nil) (setq a (Getpoint "\n Chon mot diem lam chuan (co cao do):")) (progn (setq kitu nil) (initget "Co Khong") (setq kitu (getkword "\n Ban co chon lai diem chuan khong?[Co/Khong]:<K>")) (If (= kitu "Co")(setq a (Getpoint "\n Chon lai diem lam chuan (co cao do):"))) ) ) ;(if (and(= nil g)(/= nil th)) (setq g (atof (cdr (ASSOC 1 (ENTGET (SSNAME th 0))))))) (IF (= nil g) (progn (prompt "Khong co cao do tai vi tri can tim!") (setq g (Getreal "\n Nhap cao do diem chuan [bang ban phim/Chon tren man hinh]:<Chon>" )) (if (= nil g) (progn (setq sscd (entsel "\n Moi ban chon cao do tren man hinh:")) (setq g (atof (cdr (assoc 1 (entget (car sscd)))))) (prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:")) ) ) ) (If(= kitu "Co") (progn (setq g (Getreal "\n Nhap lai cao do diem chuan [bang ban phim/Chon tren man hinh]:<Chon>" )) (if (= nil g) (progn (setq sscd (entsel "\n Moi ban chon lai cao do tren man hinh:")) (setq g (atof (cdr (assoc 1 (entget (car sscd)))))) (prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:")) ) ) ) ) ) ) ;;============Tinh cao do khi biet cao do diem chon lam c:goc==================== (defun c:tcd () (PROMPT "\n(Lenh tinh toa do & K/C 1 diem bat ky)") (c:goc) (setq xa (* sc (car a))) (setq ya (* sc (cadr a))) (setq l1 xa) (setq l3 ya) (While (setq b (Getpoint "\n Chon diem can tinh:")) (setq xb (* sc (car B))) (setq x (- xb xa)) (setq yb (* sc (cadr B))) (setq y (+ g (- yb ya))) (setq ypr (rtos y 2 3)) (setq l2 xb) (setq l4 yb) (setq dy (- l4 l3)) (setq l3 l4) (setq l (- l2 l1)) (setq ypr1 (rtos L 2 3)) (setq l1 l2) (Prompt "\nCao do diem vua chon:") (princ (rtos y 2 3)) (Prompt "\nK/C x le:") (princ (rtos l 2 3)) (Prompt " _ K/C x den diem goc:") (princ (rtos x 2 3)) (if (= 0 l) (Prompt " _ Do doc doan vua chon: E%") (Progn (setq dd (* 100 (/ dy l))) (Prompt " _ Do doc doan vua chon:")(princ (rtos dd 2 3))(princ "%") ) ) ;(setq pt2 (getpoint "\nDiem ghi cao do vua tinh duoc :")) ;(command "TEXT" pt2 "" "90" ypr) ;(setq pt3 (getpoint "\nDiem ghi K/C le vua tinh duoc :")) ;(command "TEXT" pt3 "" "90" ypr1) ;(setq a '(0 0 0) g 0) (setq thchon (nentselp"\nChon text can thay the:")) (if (/= nil thchon) (progn (setq ens (car thchon)) (COMMAND "CHANGE" ens "" "" "" "" "" ""(rtos y 2 2)) (COMMAND "CHANGE" ens "" "p" "c" "6" "") ) ) (princ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chỉnh sửa Tháng 6 9, 2011 theo ketxu Nhắc bạn hakhoailang lần sau post code thì cho vào thẻ code! 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
ketxu 3000 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 các bác ai có cái lisp tính khoảng cách cho em xin với ý tưởng của em là : 1) pick vào điểm A 2) pick vào điểm B 3)pick vào text cần thay đổi ( nếu có bước 3 thì kết thúc luôn không cần bước 4 ) 4) nếu không có text cầ thay đổi thì chọn điểm ghi text mới Của bạn : (defun c:kc (/ kc ent A) (vl-load-com) (setq kc (rtos (distance (setq A (getpoint "\nDiem A :"))(getpoint A "\nDiem B :")) 2 2)) (if (setq ent (car(entsel "\n Chon text sua :"))) (vla-put-TextString (vlax-ename->vla-object ent) kc) (vla-addtext (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) kc (vlax-3d-point (getpoint "\n Diem dat text :")) (* (getvar "dimtxt")(getvar "dimscale"))) )) 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
790312 5 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 các bác ai có cái lisp tính khoảng cách cho em xin với ý tưởng của em là : 1) pick vào điểm A 2) pick vào điểm B 3)pick vào text cần thay đổi ( nếu có bước 3 thì kết thúc luôn không cần bước 4 ) 4) nếu không có text cầ thay đổi thì chọn điểm ghi text mới Cái này dùng dim vẫn được sao phải dùng lisp 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
3d.decor 1 Báo cáo bài đăng Đã đăng Tháng 6 9, 2011 Bạn dùng tạm cái này. Lisp bạn post chủ đích của bác Hoành là làm nó nối tất mà chỉ cần chọn 1 Line đầu, giờ bạn lại muốn k xài cái đặc ích của nó thì quả không phù hợp, chi bằng viết cái khác :) (defun c:jj (/ lstSS lstEt ss) (setq lstSS (acet-ss-to-list (setq ss(ssget))) lstEtype (mapcar 'cdadr (mapcar 'entget lstSS))) (if (or (vl-position "LINE" lstEtype) (vl-position "ARC" lstEtype)) (command ".pedit" "m" ss "" "Y" "J" 0 "") (command ".pedit" "m" ss "J" 0 "") )) quá đúng ý em thank pro yêu cadviet quá 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