nguoi_tho_mo
-
Số lượng nội dung
41 -
Đã tham gia
-
Lần ghé thăm cuối
Bài đăng được đăng bởi nguoi_tho_mo
-
-
lisp di động
trong AutoLisp
-Hôm nào mínheẽ làm theo ý 2 của bạn.-Lisp của mình toàn nguyên si đấy có mã hóa cài gì đâu mừ?
Anh Duy bớt chút thời gian vào gúp em với
Cảm ơn anh
-
Bạn thử cái này nhé. Mình để chiều cao Dim mặc định là bằng 1/150 chiều rộng (ngắn) của blok khung tên. Chiều cao Text cao hơn Dim là 1,2 lần(defun BatDau() (setq OldOs (getvar "osmode")) (setvar "osmode" 0)) (defun KetThuc() (setvar "osmode" OldOs)(princ)) (defun moddxf (dxf chdxf ss) (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss)))) ;=========== FIX DIM TEXT ===========; ;Chinh chieu cao cua dim & text theo ; ;chieu rong(ngan) cua block khung ten; ;Mac dinh la = 1/150 chieu rong k/ten; ;====================================; (defun c:ft (/ Rec pt1 pt2 rpt1 rpt2 rpt3 rpt4 dis12 dis14 dis toadodinh caodim tilechu textgap dimxtend i el1 el ssd en OldOs OldEcho ) (vl-load-com) (setq OldEcho (getvar "cmdecho")) (setvar "cmdecho" 0) (command "undo" "be") (princ "\n From nguyentuyen6 @CadViet ") (princ "\n Cai Express-Tools truoc khi su dung!!!") (setq Rec (acet-ent-geomextents (car (entsel "\nChon block khung ten:"))) pt1 (nth 0 Rec);lay dinh *-----pt2 pt2 (nth 1 Rec);lay dinh | khung | i 0);setq pt1-----* ;-----acet-ent-geomextents:diem thap nhat trai va cao nhat phai, ve hcn (BatDau) (command "RECTANG" pt1 pt2) (KetThuc) (setq el1 (entlast));el1 ;-----lay tile, mac dinh la :1 (setq tileft (cond (tileft) (1)) tileftold tileft tileft (getreal (strcat "\nChon ty le <"(rtos tileftold 2 2)">: ")) ) (if (= tileft nil) (setq tileft tileftold)) ;-----lay dinh HCN = acet-geom-vertex-list (setq toadodinh (acet-geom-vertex-list el1); rpt4----rpt3 rpt1 (nth 0 toadodinh);lay dinh | el1 | rpt2 (nth 1 toadodinh);lay dinh rpt1----rpt2 rpt3 (nth 2 toadodinh);lay dinh rpt4 (nth 3 toadodinh);lay dinh dis12 (distance rpt1 rpt2) dis14 (distance rpt1 rpt4));setq ;----- Chia truong hop khung ngang va khung doc (if (> dis12 dis14) (setq caodim (* tileft (/ dis14 150)));T (setq caodim (* tileft (/ dis12 150)));F ) ;if (setq textgap (/ caodim 2); k/c tu Text den duong Dim dimxtend (/ caodim 2);k/c dau dim tilechu (* caodim 1.2); cao Text so voi cao Dim(text) ) ;----- (command "ERASE" el1 "");xoa hcn (princ (strcat "\nDim:<" (rtos caodim 2 0) ">. Text:<" (rtos tilechu 2 0) ">. Chon Dim & Text can Fix:")) ;======================= M A I N ============================= (setq ssd (ssget '((0 . "DIMENSION,TEXT")))); loc dim text (while (< i (sslength ssd)) (setq en (ssname ssd i)) ;---- Text ----- (if (= (cdr (assoc 0 (entget en))) "TEXT") (moddxf 40 tilechu en) );if ;-- DIMENSION ----- (if (= (cdr (assoc 0 (entget en))) "DIMENSION") (progn (setq el (vlax-ename->vla-object en)) (vlax-put-property el 'ScaleFactor 1); chinh Scalefactor (vlax-put-property el 'textheight caodim); chieu cao text trong dim (vlax-put-property el 'textgap textgap); k/c tu Text den duong Dim (vlax-put-property el 'ArrowheadSize dimxtend); do lon mui ten (vlax-put-property el 'DimensionLineExtend dimxtend);k/c 2 ben duong dim (vlax-put-property el 'ExtensionLineExtend dimxtend);k/c duong giong dim -> duong dim (vlax-put-property el 'Arrowhead1Block "ArchTick"); loai mui ten (vlax-put-property el 'Arrowhead2Block "ArchTick"); loai mui ten );progn );if (setq i (1+ i)) );while ;--------------- (command "undo" "e") (KetThuc) (setvar "cmdecho" OldEcho) (princ "\n...Done...") (princ) );defun
Rất hiệu quả.
Xin cảm ơn bác.
Chúc bác nghiên cứu thêm nhiều ứng dụng hơn nữa
- 1
-
Chào bạn nguoi_tho_mo. Không biết bạn đã làm đc cái Block chứa FIELD kia chưa. Nếu chưa thì để mình hướng dẫn luôn.Còn vấn đề vẽ trong MODEL mà ta hay scale khung với tỉ lệ khung bất kỳ mà khi muốn in ra các DIM và TEXT luôn bằng nhau thì mình cũng đã từng mắc phải. Mình có viết 1 lisp để làm việc này. Nếu bạn cần thì mai mình úp lên cho bạn tham khảo. Khi dùng líp này thì dù khung có scale bao nhiêu đi nữa thì in ra TEXT và DIM vẫn cứ bằng nhau. hề hề.
Cảm ơn bác Nguyentuyen6
Field em làm dc từ ngay lúc đó.
có lisp thì càng tuyệt vời hơn
Rất mong bác sớm up lên sớm cùng chia sẻ và hoàn thiện.
-
Chắc phải nhờ các bác thạo về lisp viết thôiCách làm thủ công của em là:
Tạo thêm một kiểu Dim mới bằng cách thay đổi giá trị trong:
1- Use overall scale op: (Trong thẻ Fit)
2 - Scale factor ( Trong thẻ Primary Units
Sau khi Scale hình vẽ xong ta dùng lệnh MA quét kích thước theo một kích thước của kiểu dim vừa tạo là được.
Dim của em để trong block thì ko dc nữa bác nhé
-
Cái này dùng FIELD là đc mà bạn. Mình thử 1 cái này xem có đúng ý bạn ko nhé. Scale xong thi` REGEN nhe'Chào bác nguyentuyen6
Rất cảm ơn bác
Chính xác bác ạ.
Vậy là số 1 này có thuộc block khung tên hay không hử nguoi_tho_mo????Khi scale thì chọn cả khung tên và cái số 1 ấy à??? Các text khác trong khung tên thì sao????
Hề hề hề, nghĩ cho kỹ rồi đặt yêu cầu chứ đừng có Phát sinh kiểu nớ, khó đoán lắm.....
dùng các này ta có thể lựa chọn dim, text... phù hợp để khi in ra giấy chiều cao chữ là tieu chuẩn mà không phải thử nhiều lần các bác nhá.
"Hề Hề Hề" không cần nhìn nick bít ngay là bác rồi
nghĩ cho kỹ rồi đặt yêu cầu chứBác nguyentuyen6 nghĩ giúp bác cháu ta rồi
Bác nào giải quyết giúp vụ khi scale luôn là số đặc biệt (1, 2, 4, 5, 10, 20,) được không ạ
-
Chào nguoi_tho_mo,Bạn hãy thử dùng lisp xem sao. Theo mình lisp có thể giải quyết tốt yêu cầu của bạn...
Vâng em đi kiếm không ra, còn tự viết thì phải đợi một thời gian nữa vì "Quá gà"
EM block dim (không có chân) mừng hụt bác ạ. được cái này thì mất cái kia
EM trình bày rõ mục đích các bác giúp em khác phục khó khăn này:
em đặt số 1 vào block khung tên khi scale khung tên bao nhiêu lần thì số 1 thay đổi giá trị và kích thước theo.
-
Ý,Bác cứ xoáy em.Việc nối lại trơn tru thì quả có khó,vì đã đi theo con đường 1 chiều r,quay lại là dễ bị tóm ngay ^^.N Chẳng phải đâu cao xa,nếu là e,cứ động đến đường nào thì e jp,jl ngay nó lại,còn những đường khác k đụng đến thì...kệ nó ^^ . Nói vui vậy chứ,nếu muốn ng ta khó chịu khi chỉnh xửa thì cũng có thể chuyển ngay file đấy thành dạng file ảnh,hoặc pdf rồi mới gửi :leluoi:,còn mình thì cứ giữ file gốc,tội j đâu nào ^^. Vote bác 1 phiếu đã,htrước e wênIn ra bản giấy nếu chưa tin vào đối tác các bạn ạ, xem xong rồi >>> xé trước mặt cho chắc.
Một giải pháp thô nhưng an toàn. còn không thì cứ gửi bản vẽ đầy đủ cho họ nể.
-
MediaFire AutoCAD Drawing Shredder: AutoCAD Drawing ShredderChương trình này sẽ cắt vụn các line, arc, polyline, circle trong bản vẽ ra thành nhiều mảnh. Bản vẽ vẫn in được nhưng muốn chỉnh sửa edit thì sẽ rất khó chịu :cheers:
Sử dụng:
1. Gõ lệnh App
2. Appload file dvd ACAD Drawing Shredder vào
3. Run Macro (Alt + F8), chọn macro tên ShredDwg
VBA project mở. Bạn có thể vào chỉnh sửa theo ý thích. Hộp hội thoại tớ đề tên tớ. Nhưng các bạn thích có thể thay tên mình vào.
Khi nào cần chương trình nối lại các line arc circle polyline thì email cho tớ. Nhưng khi đó sẽ không còn miễn phí nữa đâu :leluoi:
Cám ơn bạn đã xây dựng diễn đàn.
Diễn đàn này nhiều nguời tài lắm bạn ạ
Nói vui nhé bản vẽ giấy bị cắt bạn nối đựoc không nhỉ
-
Bạn dùng lệnh "field" trong tag Field category bạn tìm mục Object sau đó bấm vào nút chọn phía tag Object type (nút có mũi tên) Cad sẽ cho bạn chọn đối tượng; khi chọn xong Cad sẽ liệt kê 1 loạt các loại dữ liệu cho bạn chọn (bạn cứ làm thử sẽ hiểu) -> bấm Ok Cad sẽ hỏi tại dòng lệnh chiều cao chữ -> gõ H enter -> gõ 2.5. Khi bạn phóng to lên bạn regen lại sẽ có kết quả như ý.Cám ơn meohang
Chưa phải bác ạ.
em muốn có chữ số mà khi dùng lệnh SCale thì cả kích thước và giá trị sẽ thay đổi bác nhé.
-
Dữ liệu bên cad bác ạ và vì vậy cần phải xuất sang excel tính toán chính xác và thuận tiện hơn. Cám ơn BácNếu không phải là "bí mật quốc gia" bạn upload file cad của bạn đang làm lên diễn đàn mọi ngưòi giúp ( xóa những phần không liên quan)
-
Nhờ các anh trên diễn đàn giúp em cách scale chữ số:
- Số được đặt trong block ví dụ số 1 hay số 5 chiều cao chữ là 2.5
- Scale block đó lên n lần thì chiều cao của số 1 hay số 5 to ra n lần =2.5*n
- Số 1 hay số 5 sẽ thay đổi thành giá trị n hay 5n (nếu n=2 số 1 sẽ thành 2 hay ssó 5 sẽ thành 10)
EM nghĩ trong lênh "field" làm được nhưng tìm không ra
Nếu ghi số 1 hay 5 bằng Dli thì khi scale chỉ thay đổi được giá trị còn chiều cao không thay đổi, dùng lệnh sc số 1hay số 5 thì chiều cao thay đổi nhưng giá trị lại giữ nguyên.
cám ơn mọi người
-
Tạo bình thường mà bạn. Trước khi tạo bạn phải xoá bỏ cái rectang bao ngoài và cái hình sản phẩm đi không thì lisp chay sai.Được rồi anh Tú ạ
Bạn nào dùng thì down file của anh Tú về thử nhé
Cảm ơn anh
-
Bạn thử lại cái này xem sao:;; free lisp from cadviet.com (defun c:bao () (vl-load-com) (setq ss (ssget)) (if (= (tblsearch "block" "b_temp") nil) (command "block" "b_temp" "0,0" ss "") (command "block" "b_temp" "y" "0,0" ss "") ) (command "-insert" "b_temp" "0,0" "" "" "") (setq rec (acet-ent-geomextents (setq el (entlast)))) (setq p1 (car rec)) (setq p2 (cadr rec)) (setq p1 (polar p1 (+ (/ pi 4) pi) 50)) (setq p2 (polar p2 (/ pi 4) 50)) (setq p (polar p1 (/ pi 4) 25)) (command "rectang" p1 p2) (setq el1 (entlast)) (command "boundary" p "" (if (/= (getvar "cmdactive") 0) (alert "khong tao duoc duong bao ban hay kiem tra lai hinh ve") ) ) (command "erase" el1 "") (setq ss (ssget "w" p1 p2 (list (cons 0 "LWPOLYLINE")))) (command "change" ss "" "p" "c" "2" "") (setq ss (acet-ss-to-list ss)) (setq lar (list)) (foreach n ss (setq dt (dientich n)) (setq lar (append (list (list dt n)) lar)) ) (setq lar (vl-sort lar '(lambda (x y) (> (car x) (car y)) ) ) ) (setq rm (cadr (cadr lar))) (Setq ss (vl-remove rm ss)) (setq ss (acet-list-to-ss ss)) (command "erase" ss "") (acet-explode el) ) (defun dientich (name / are ob ll) (command "region" name "") (setq ob (vlax-ename->vla-object (setq ll (entlast)))) (setq are (vla-get-area ob)) (command "undo" 1) are )
Em chưa tạo được anh Tú ạ
-
Em xin nhờ các bác: Bác Hoanh, Bác Tue_NV, bác PhanthanhBinh, bác phantuHuong, bác KSPhanthanhtu và toàn thể các bác cao thủ trên diễn đàn giúp em với .Em trân thành cám ơn các bácBạn nên nêu rõ đầu bài và file cụ thể (thực tế) >> sẽ có cách khác nhau để giải quyết mục đích của bạn
-
MÌNH CŨNG ĐANG CHỜ LISP NÀY HIHI :leluoi:up
Nghe chừng khó và nên dùng phần mềm chuyên dụng thì đúng hơn
-
Test trong chính cái file mà bạn gửi lên đó. Bạn chú ý là xung quanh đối tượng mà bạn chọn không có đối tượng thừa nào. bạn thử move cái hình đó ra ngoài và dùng lisp xem.Cảm ơn sự nhiệt tình của anh Tú. em dùng lisp trên chính file đó cũng được. em vẽ một hình khác kín hoàn toàn cũng không được.
Em upload lại file một lần nữa nhờ các Anh giúp đỡ.
Nội dụng: viết lisp vẽ một đường bao quanh theo viền của hình trong filemau.dwg
http://www.cadviet.com/upfiles/3/filemau.dwg
Cảm ơn anh
-
Chào các pác!Hiện tại em đang tạo thử nghiệm những menu mới cho cty.
Vì vậy cái này lúc xài, lúc thì không cần nên em tạo ra một cái Profile mới, khi nào mình cần thì vào Opptions-> chọn tab Profile-> chọn profile mình vừa tạo. lúc này Cad sẽ hiện những menu (.cui) và lisp di kèm với nó. Và em muốn tạo một folder riêng để chứa các menu (.cui) và các lisp. VD: ở ổ đĩa D:\newmenu
Vấn đề là không phải máy nào cũng có cái profile em tạo này và cũng ko phải khi nào cũng dùng. Vì thế nếu vào options ở tab file chọn đường dẫn D:\newmenu thì ở mỗi máy đều phải tạo đường dẫn này (tốn thời gian), và nó nằm cố định ở đây luôn. Như vậy không hay lắm.
Em muốn khi nào em chọn profile new thì cad tự tạo đường dẩn đến các lisp, block trong folder D:\newmenu, còn khi em chọn profile bình thường (mọi người đang dùng) thì cad chỉ tạo những đường dẫn bình thường thôi. (nghĩa là đường dẫn trong options đi theo profile mà mình chọn)
Rất mong các pác quan tâm giúp đỡ!
http://www.cadviet.com/forum/index.php?sho...ic=5597&hl=
Chúc bạn thành công
- 1
-
Bạn dùng thử cái này xem có đúng ý bạn không nhé. Chú ý hình của bạn phải như bác Tue_VN đã nói ở trên.(defun c:bao () (vl-load-com) (setq ss (ssget)) (if (= (tblsearch "block" "b_temp") nil) (command "block" "b_temp" "0,0" ss "") (command "block" "b_temp" "y" "0,0" ss "") ) (command "-insert" "b_temp" "0,0" "" "" "") (setq rec (acet-ent-geomextents (setq el (entlast)))) (setq p1 (car rec)) (setq p2 (cadr rec)) (setq p1 (polar p1 (+ (/ pi 4) pi) 50)) (setq p2 (polar p2 (/ pi 4) 50)) (setq p (polar p1 (/ pi 4) 25)) (command "rectang" p1 p2) (setq el1 (entlast)) (command "boundary" p "" (if (/= (getvar "cmdactive") 0) (alert "khong tao duoc duong bao ban hay kiem tra lai hinh ve") ) ) (command "erase" el1 "") (setq ss (ssget "w" p1 p2 (list (cons 0 "LWPOLYLINE")))) (setq ss (acet-ss-to-list ss)) (setq lar (list)) (foreach n ss (setq dt (dientich n)) (setq lar (append (list (list dt n)) lar)) ) (setq lar (vl-sort lar '(lambda (x y) (> (car x) (car y)) ) ) ) (setq rm (cadr (caddr lar))) (Setq ss (vl-remove rm ss)) (setq ss (acet-list-to-ss ss)) (command "erase" ss "") (acet-explode el) ) (defun dientich (name / are ob ll) (command "region" name "") (setq ob (vlax-ename->vla-object (setq ll (entlast)))) (setq are (vla-get-area ob)) (command "undo" 1) are )
Chào anh phamngoctukts
Nay em mới ở quên lên
Trước tiên em cảm ơn anh đã giúp em viết lisp này.
Em đã test với nhiều hình khác nhau, nhưng chưa thấy tạo ra đường bao xung quanh viền (như đường mầu vàng). anh cho em xin bản vẽ mà anh đã tạo đương bao để em biết đường ứng dụng nhé
Cảm ơn anh
-
Chào bạn nguoithomo cùng bạn phamngoctuĐọc qua code của bạn Tue_NVthấy ý tưởng của bạn giống ý của Tue_NV đấy
Tức là ý như thế này :
1. Giả sử có 1 hình A cần vẽ đường bao
2. Ta vẽ thêm 1 đa giác kín sao cho đa giác kín này nằm ngoài hình A cần vẽ này.
3. Sử dụng lệnh Bo để tạo 1 đa giác kín với điểm pick nằm giữa miền tạo bởi đa giác kín với hình A
=> Như vậy đường bao ngoài hình A sẽ được xác định qua lệnh Boundary này
4. Xoá cái đa giác kín đi.
Cái đa giác kín mà bạn Tú xác định là hình chữ nhật nằm ngoài cái hình cần xác định đường bao
Với cách xác định đa giác kín là hình chữ nhật thì trong 1 số trường hợp là không ổn vì điểm pick p rất có thể không nằm giữa miền tạo bởi hình chữ nhật và hình cần xác định đường bao mà có thể nằm giữa "miền" khác
Để User tự vẽ và xác định mới chính xác nhất
- Việc này sử dụng CAD, không cần sử dụng đến Lisp là chắc ăn nhất
Xin lỗi vì mình đã sử dụng từ hơi khó hiểu nhưng nếu bạn đọc kĩ sẽ thấy được ý của mình
Cảm ơn anh Tue_nv
Cảm ơn anh phamngoctukts
Em kon biết nên cảm tạ các bác thế nào mới phải đây ạ
Lại một lần nữa máy tính ko cài cad, i'm sorry!
Nhiều khi mình vẽ 3D suất sang cad 2d nhiều hình rắc rối nếu ko cần thể hiện rõ thì dùng lisp này cho đơn giản hình vẽ.
Mình về quê vài hôm chắc rất nhớ diễn đàn
Chúc cả nhà ngày nghỉ cuối tuần vui vẻ
-
Chúc mừng Admin
Chúc diễn đàn ngày một phát triển
- 1
-
Nếu với bài toán trên của bạn với điều kiện là các điểm mút của các đoạn màu blue ( tạo nên đường bao màu vàng) chạm nhau tạo thành Đường kín thì việc giải bài toán sẽ đơn giản hơn(chấp nhận luôn nếu đối tượng là Block nếu nó thỏa mãn điều kiện mà Tue_NV nêu ra.Nhưng ở đây các điểm mút của bạn không tạo thành PLINE kín sẽ trở nên rất khó xác định đấy. :iluvyousmiley:
Cảm ơn anh Tue_nv
File trên là mẫu ví vụ, thường thường thì điểm nút là viền kín, còn nếu không cứ chỗ nào kín thì đường bao bám theo, đường thẳng thò ra (ví dụ đường tâm .. sẽ được bỏ qua ).
đối tựng tạo ra là block cũng được (mầu mặc định cũng ko sao không nhất thiết phải là mầu vàng) miễn là có thế lựa chọn riêng để tách khỏi hình blue ban đầu
em chưa biết về lisp. nếu có thể giải quyết bài toán theo cách này ko anh:
1.tạo đường bao của các vùng kín
2.Cộng các đường bao vừa được tạo (nếu đường bao giao nhau) để thành đường bao có diện tích lớn nhât >>> kết quả của bài toán nhưng chắc chương trình sẽ nặng
3.nếu đường bao ko giao nhau thì để nguyên (áp dụng cho lựa chọn nhiều đối tượng cùng lúc)
Cảm ơn anh đã giúp đỡ
-
Xin chào cả nhà
Em nhờ các bác viết giúp em lisp vẽ đường bao xung viền một chi tiết nhé (đường màu vàng minh họa)
Đường này là một đối tượng kín hoặc block để có thể lực chọn copy dễ dàng.
Em cám ơn nhiều
-
Cảm ơn anh gia_bach
-
1.Đồng ý với bạn, chỉ nên vẽ đúng tỉ lệ 1:1 dù có in ra các bản vẽ có tỉ lệ khác nhau.2.Sử dụng layout là tối ưu, một layout bạn có thể tạo ra bao nhiêu bản vẽ tuỳ ý chứ đâu nhất thiết 1 layout chỉ có 1 bản vẽ.Số bản vẽ sẽ bằng số viewport mà bạn tạo bên layout, dùng chức năng Annotation để đặt tỉ lệ bản vẽ, tỉ lệ text, dim tương ứng giúp khi in ra các dim, text vẫn bằng nhau dù cho tỉ lệ bản vẽ có khác nhau và model chỉ vẽ một tỉ lệ 1:1
3. Cái này mình tạo ra một khung in cố định cho từng loại giấy định in ra, xref khung tên này vào layout và in theo windows
4. Ngoài khả năng của mình :iluvyousmiley:
Chào bạn codered8x
Khi in hoặc cầm bản vẽ giấy thì mode và layout không khác nhau nhiều. còn khi xem bản vẽ trên cad thì mode hay hơn nếu ta sử dụng dim và khung tên hợp lý. vì zoom, pan... ko ảnh hưởng tới bản vẽ (nhìn được trực quan và tổng thể hơn) phải không các bác?
4. Em nhờ các bác viết lisp hay có cách nào để số hiển thị tại vị trí của tỷ lệ bản vẽ trong khung tên thay đổi khi sc khung tên (quy về số chẵn 1,2,4,5,10 ...theo tiêu chuẩn) dù sc 1.5 hay 1.99
Thanks
lisp di động
trong AutoLisp
Đã đăng · Trả lời báo cáo
Cảm ơn anh nhiều, măm mới tết đến rồi. cv ai cũng gấp rút.
Em sẽ làm theo hướng dẫn của anh và dùng như thế vì anh còn nhiều việc khác nên ko dám hỏi thêm nữa ,
khi nào em nghiên cứu dc nhiều nhiều một chút sẽ share lên diễn đàn
Chúc anh vui vẻ