-
Số lượng nội dung
1.387 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
117
Bài đăng được đăng bởi Danh Cong
-
-
Dạ nhờ các anh vào chỉnh sửa giúp em với ạ. Em xin cảm ơn
Ý là bạn gõ trực tiếp lên cad câu lệnh : DIMZIN , set giá trị 0 rồi thử lại xem. :) Chứ a @QuocManh từng chữa lỗi này rồi.
-
Có 2 lựa chọn đơn giản nhất :
1: Chọn đối tượng Hatch. Bật Property lên là thấy được diện tích của hình Hatch.
2. Tái tạo lại đường bao đối tượng: Chọn đối tượng Hatch - Phải chuột - Generate Boundary
- 1
- 1
-
Mình làm như bạn hướng dẫn rồi nhưng vẫn chưa được bạn ơi. Nếu bạn pich vào 2 điểm được giá trị khoảng cách là 4 thì khi đó chọn text thay thế hiển thị là 4 chứ không phải 4.00 mặc dù trước đó mình chọn số thập phân là 02 số rồi. Nhở các anh sửa giúp. Em xin cảm ơn
Code như sau:
(defun c:KC (/ p1 p2 txt etxt d)
(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))
(initget 4)
(setq stp (cond ((getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))
((getvar 'USERI1))))
(setvar 'USERI1 stp)
(setq p1 (getpoint "\n Chon diem thu nhat")
p2 (getpoint "\n Chon diem thu hai ")
txt (car (entsel "\n Chon text can thay" ))
d (distance p1 p2)
etxt (entget txt)
etxt (subst (cons 1 (rtos d 2 stp)) (assoc 1 etxt) etxt)
)
(entmod etxt)
(command "change" txt "" "p" "c" 1 "")
(princ)
)
A @QuocManh lỗi cũ kìa :D :D :D
Gõ DIMZIN , set giá trị 0 rồi thử lại xem.
-
À! Là chế độ truy bắt điểm, hình như nó chỉ phụ thuộc vào OSNAP setting và biến APERTURE chứ không phụ thuộc vào đối tượng.
Mãi mà các anh mới chịu hiểu, em chỉ cần bắt điểm thôi :) :)
Mình nghĩ soi nhầm là do Zoom chưa đủ lớn thôi, nên chăng bạn tạo một option để RE bản vẽ khi bạn không thể zoom tiếp được nữa, rồi lại tiếp tục chọn điểm
Dạ, em vẫn phải làm y như anh nói. Cứ Zoom to rồi soi, soi ko dc lại Zoom., ko tránh khỏi thỉnh thoảng kích nhầm.. :D :D :D Do đó mí nhờ các anh đưa cao kiến xem cải thiện tình hình có khá khẩm hơn ko ạ.
-
Em gửi ảnh minh họa. NIck em bị lỗi, ko up ảnh trực tiếp được. Anh xem qua link sau ạ.
https://drive.google.com/file/d/0B8Wyt0hkwi0yZkVyTHVPdG1fbVE/view
Tức là em sử dụng, thì vẫn bị bắt biểm ngoài A, nên ko đúng ý em muốn.
Mục đích là cái chế độ bắt điêm bây giờ chỉ bật cho đối tượng A thôi. :blink: :blink: :blink:
Chưa thử, nhưng đọc qua lsp thì đúng yêu cầu rồi còn gì??? (điểm đầu, điểm cuối chính là bước 2)
-
Em vừa load thử. Nhưng ko đúng ý anh ạ.
Ý em là
B1. Chọn đối tượng A.
B2. Chọn điểm 1 và điểm 2 nằm trên A
Tức là em muốn trong B2. thì 2 điểm phải nằm trên đối tượng A., không cho phép nó bắt điểm vào bất kỳ đối tượng nào khác ngoài A. :( :(
Tôi tưởng bạn chỉ cần "gợi ý" :
(defun c:DC(/ Ent dis dis1 dis2 pt pt1 pt2) (if (and (setq Ent (car (entsel "\nChon doi tuong can do :"))) (wcmatch (cdr (assoc 0 (entget ent))) "*LINE,ARC,CIRCE") (setq pt1 (getpoint "\nDiem dau :" )) (setq pt2 (getpoint pt1 "\nDiem cuoi :" ))) (progn (setq pt11 (vlax-curve-getClosestPointTo ent pt1) dis1 (vlax-curve-getDistAtPoint Ent pt11) pt12 (vlax-curve-getClosestPointTo ent pt2) dis2 (vlax-curve-getDistAtPoint Ent pt12)) (setq dis (abs(- dis2 dis1))) (princ (strcat "\nKhoang cah :" (rtos dis))) ) ) (princ))
-
Bạn tham khảo hàm vlax-curve-getClosestPointTo
Anh có ví dụ cụ thể nào ko ạ. Cho em tham khảo với : ) em chưa hiểu biết nhiều về hàm VLax. :D :D :D
-
Gợi ý cho bạn chút thôi.
Muốn tính theo phương X thì thay đoạn: d (distance p1 p2) bằng d (abs (- (car p1) (car p2)))
Muốn thay đổi số chữ số sau dấu phẩy thì có thể thay: (rtos d 2 X) với x là số chữ số sau dấu phẩy.
- 1
-
Em cần các anh chị gợi ý cho đôi chút:
Ý định của em thế này:
- Em đang có 1 đối tượng như Line,SPline LWpoline, Circle, Arc..., và 1 đoạn code lisp đo dài.
Giả sử em chọn đối tượng Line tên là A. Bây giờ em muốn chọn 1 khoảng cách trên đối tượng A bằng cách pick 2 điểm ( chỉ bắt điểm trên đối tượng A, tuy nhiên vẫn giữ được các điểm giao cắt của các đối tượng khác với A là Intersec ) , mà ko bị bắt điểm lung tung sang đối tượng khác.
Cách thủ công em vẫn làm là bật chết độ Intersec rồi zoom bản vẽ lên, soi điểm giao của A với đối tượng khác. Tuy nhiên thỉnh thoảng vẫn bị soi nhầm... :wacko: :wacko:
Mong anh chị gợi ý. :) :) :)
-
Câu hỏi khó nhỉ. :) :) :) khó ở đây là khi in thì cad bạn có thông báo lỗi không? Các thao tác khi in thì như thế nào, hay là in ra thì bản vẽ bị làm sao...vvv.....
Trích xuất câu bác @Ha : "Đi khám bệnh mà cứ gửi căn cước và than sắp chết thì ko bác sỹ nào cứu nổi bạn đâu" ..... :D
-
Bạn lạm dụng lisp quá !. Có mỗi vài lần offset đường thẳng nó ra là xong. Nhiều thì pick để copy nó ra chỉnh chỉnh sửa sửa. Cần gì lisp giết gà dùng dao mổ trâu !!!
-
Cảm ơn bác nhé. Đúng là Em có sử dụng lisp SPA. Em đã remove và thành công rồi ạ./.
Áy náy quá :( :( .....Vì mỗi cái Viewport mà bảo bạn gỡ lisp của bác @Hoành thì áy náy quá, kẻo bác ý lại ghét tôi thì chết. :blink: :blink: Phải tôn trọng những người viết lisp bạn ạ.
Thôi thế này: Bạn tìm trong lisp SPA của bác ý, xóa mỗi dòng ("MAXACTVP" 4), thì bạn vẫn xài lisp tốt. B) B)
-
cũng chưa đc luôn bác ơi
post bản vẽ lên coi nào. :) :) :) Bạn có thấy bác sĩ nào khám bệnh mà chỉ nghe bệnh nhân nói ko?
-
Tình hình là em bị lỗi như thế này ở dim kích thước, và kể cả những nét yêu cầu độ dày như thế cũng bị trống như vậy.Mong các bác giúp đỡ.
Thử : FILLMODE , set giá trị về 1 rồi Regen bản vẽ lại .
-
Help Vấn Đề Group
trong AutoLisp
^^. Như kiểu F8 ạ . : ))) Hì, em quên mất chỉ cần ON với OFF , nên lỡ cho thành 2 lệnh luôn :blink: :blink:
Cho 2 lệnh thành 1 như thế này tiện hơn ko e :)
(defun c:ge () (if (= (getvar "PICKSTYLE") 0) (setvar "PICKSTYLE" 1) (setvar "PICKSTYLE" 0)) (princ) )
-
Help Vấn Đề Group
trong AutoLisp
Cách 2: AB và AC. hoặc bạn ko ưng thì đổi tự tên cho phù hợp.
Cách 1: Lôi họ hàng nhà group ra: Tools--- Toolbars---- Autocad ---- Group. Đủ tiện ích của họ hàng nhà group cho bạn chọn.
Cách 2:
(defun c:AB ()(setvar "pickstyle" 0)(princ))(defun c:AC ()(setvar "pickstyle" 1)(princ)) -
Help Vấn Đề Group
trong AutoLisp
Cách 1: Lôi họ hàng nhà group ra: Tools--- Toolbars---- Autocad ---- Group. Đủ tiện ích của họ hàng nhà group cho bạn chọn.
Cách 2:
(defun c:AB ()(setvar "pickstyle" 0)(princ))(defun c:AC ()(setvar "pickstyle" 1)(princ)) -
Các cao thủ có thể sửa giúp em làm sao để ghi ra kết quả nó theo đơn vị met được không ạ. chứ em thực hiện lệnh xong thì phần chữ số vẫn theo đơn vị mm :((. EM cảm ơn các bro trước.
Được voi đòi 2 bà Trưng đây. Lạm dụng lisp nhiều quá ko tốt đâu nhé.
Sửa thì dễ, nhưng bạn có thể thủ công thêm 1 dấu chấm sau 3 chữ số mà ! Cứ thích yêu cầu 1 nháy chuột ăn ngay cơ :D :D :D.
-
Em cảm ơn bác nhé. Được rồi ạ. Nhưng có vấn đề là mỗi lần bật cad lên lại phải sử dụng lệnh đó.
Bác có cách nào làm một lần mà được luôn không ạ?
MAXACTVP là biến hệ thống trong cad. Đã nhập là giá trị sẽ không thay đổi sau khi nhập. Trừ khi bạn tác động bằng 1 hình thức nào đó.
Đoán lỗi: Bạn sử dụng 1 lisp nào đấy , có đoạn code thay đổi giá trị MAXACTVP = 4 . Như lisp "SPA" của bác @Hoanh . là ví dụ điển hình.
Nếu bạn ko rành lisp thì cách duy nhất là tìm lisp đó và gỡ nó ra thôi. :( :( :( Ko tìm được thì xui cho bạn rồi , mỗi lần mở là Cành cạch gõ lại thôi :D :D !!!!
-
Em cũng bị lỗi này. Cứ tạo thêm một khung nhìn mới thì các khung nhìn cũ lại bị ẩn phải dùng mv/on mới hiển thị lại.
Nếu Em có 5 hay 10 mv thì cũng chỉ có thể nhìn thấy được 4 mv thôi ạ. Em xem máy của các bạn Em thì 20 khung MV vẫn không vấn đề gì.
Các Anh ai giúp Em vấn đề này với ạ. Em cảm ơn ạ.
Đoán lỗi do điều chỉnh số ViewPort hiển thị trên cad:
Gõ MAXACTVP nhập giá trị 64 xem thế nào:
- 1
- 1
-
Đã chỉnh sửa cả 2 lisp.
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)));;;--------------------------------------------------------------------(defun C:TL( / ss L e)(setqss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))L 0.0)(vl-load-com)(while (setq e (ssname ss 0))(setq L (+ L (length1 e)))(ssdel e ss));;;;; Chon text thay ket qua(setq sstext (car (entsel "Chon Text Thay Ket Qua ")))(setq sstext (subst (cons 1 (strcat "L=" (rtos L 2 2) " M" )) (assoc 1 (entget sstext)) (entget sstext)))(ENTMOD sstext)(princ))(defun c:gb(/ p ss S frome cur toe tt)(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :")ss (ssadd) S 0)(while p(setq frome (entlast))(command ".boundary" p "")(setq toe (entlast));;(setq cur frome)(while (not (eq cur toe))(setq cur (entnext cur)ss (ssadd cur ss))(command "area" "S" "O" ss "" "")(setq tt (getvar "area"))(setq S (+ S tt)))(command "area" "A" "O" "L" "" "")(setq tt (getvar "area"))(setq S (+ S (* tt 2)))(sssetfirst ss ss)(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :")))(if (> (sslength ss) 0)(progn(princ (strcat "Area = " (rtos S 2 2)));;;;; Chon text thay ket qua(setq sstext (car (entsel "Chon Text Thay Ket Qua ")))(setq sstext (subst (cons 1 (strcat "A=" (rtos S 2 2) " M2" )) (assoc 1 (entget sstext)) (entget sstext)))(ENTMOD sstext))(alert "\n Ban chua Pick vao mien kin nao ca "))(command "erase" ss "")(Princ))- 1
-
Sửa lần 2:
Cả cái lisp GB bác làm giúp em nữa. Bác thêm cho em chèn vào text/Mtext theo font có trước với nhé.
Bác giữ cả cái tiền tố và hậu tố giúp em
Thx bác
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)));;;--------------------------------------------------------------------(defun C:TL( / ss L e)(setqss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))L 0.0)(vl-load-com)(while (setq e (ssname ss 0))(setq L (+ L (length1 e)))(ssdel e ss));;;;; Chon text thay ket qua(setq sstext (car (entsel "Chon Text Thay Ket Qua ")))(setq sstext (subst (cons 1 (strcat "L=" (rtos L 2 2) " M" )) (assoc 1 (entget sstext)) (entget sstext)))(ENTMOD sstext)(princ))(defun c:gb(/ p ss S frome cur toe tt)(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :")ss (ssadd) S 0)(while p(setq frome (entlast))(command ".boundary" p "")(setq toe (entlast));;(setq cur frome)(while (not (eq cur toe))(setq cur (entnext cur)ss (ssadd cur ss))(command "area" "S" "O" ss "" "")(setq tt (getvar "area"))(setq S (+ S tt)))(command "area" "A" "O" "L" "" "")(setq tt (getvar "area"))(setq S (+ S (* tt 2)))(sssetfirst ss ss)(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :")))(if (> (sslength ss) 0)(progn(princ (strcat "Area = " (rtos S 2 2)));;;;; Chon text thay ket qua(setq sstext (car (entsel "Chon Text Thay Ket Qua ")))(setq sstext (subst (cons 1 (strcat "A=" (rtos S 2 2) " M2" )) (assoc 1 (entget sstext)) (entget sstext)))(ENTMOD sstext))(alert "\n Ban chua Pick vao mien kin nao ca "))(command "erase" ss "")(Princ)) -
dĩ nhiên là mình đã chạy lisp của bạn rồi.
trong file demo của mình có 42 vùng khép kín. mỗi vùng có từ 1-5 con số khác nhau
nếu dùng lisp của bạn thì mình chỉ làm việc với mỗi vùng mà thôi, như vậy cũng hơi bất tiện nếu số lượng vùng lớn.
Uhm, cái này thì mình chưa viết được. Trình độ viết lisp chưa sâu nên chỉ giúp bạn được vậy thôi.
Đành chờ các cao nhân khác giúp bạn vậy.
-
bạn xem file demo giúp mình với. ý mình là trong 1 vùng khép kín có những con số. mình xin lisp cộng các số đó lại với nhau ấy.
Bạn đã thử sử dụng lisp mình gửi chưa ! Bạn hiểu thế nào về khái niệm lisp.
Với bạn, thì những con số đó là 1. 2. 3 đơn thuần .... Còn với người lập lisp, đó là những Text với dữ liệu bên trong là số.
Lisp cộng text ở đây: là cộng những con số bên trong Text.
Xin Lisp Gióng Thẳng Hàng Đối Tượng
trong AutoLisp
Đã đăng · Trả lời báo cáo
Ko biết bạn hiểu "Nhiều đối tượng" của bạn ở đây là gì !!! Nhưng với người viết lisp: "Nhiều đối tượng" ở đây có thể là Line, Text, Arc, Circle, Polyne.... vv...vv...
Mỗi đối tượng đó có các điểm tâm khác nhau. Việc quét chọn chúng để sắp xếp thẳng hàng là ko thể. Sắp xếp ko được bản vẽ lại thành tùm lum ra.
----> Yêu cầu của bạn "Nhiều đối tượng" là ko thể nhé ! :) :) :)