-
Số lượng nội dung
905 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
30
Bài đăng được đăng bởi Thaistreetz
-
-
Mình coppy được một đoạn lisp dùng để xác định và ghi cao độ, khoảng cách của một điểm bất kỳ so với điểm tim thiết kế trên trắc ngang (http://www.cadviet.com/upfiles/Cdo__Kc_toi_timLenhTN.lsp), nhưng khi sử dụng đã gặp lỗi như sau (Mình không biết gì về lisp cả nên k biết tại sao):- Nó chỉ có tác dụng trên một bản vẽ duy nhất (BV được "lưu truyền" cùng với đoạn lisp).(http://www.cadviet.com/upfiles/BV1.dwg)
- Khi sử dụng đoạn lisp này trên một bản vẽ khác thì nó báo lỗi: error: Function cancelled.(http://www.cadviet.com/upfiles/BV2.dwg).
Vậy nhờ các bạn trên diễn đàn kiểm tra và sửa lại đoạn lisp đó giúp mình với.
Chân thành cảm ơn!
Đây là lisp mình đã rút gọn lại. đồng thời sửa thêm một số chi tiết về nhập số liệu và chế độ bắt điểm để thuận tiện hơn khi sử dụng. Lisp cũng đã tự động load các block cần thiết. bạn chỉ cần copy bản vẽ này vào thư mục D:\Lisp CAD là OK.
(Chú ý là không sử dụng bản vẽ BV1 của bạn nữa nhé. vì các block hơi xấu khi canh lề text, đông thời bản vẽ đó có mấy block không sử dụng nhưng mình không có cách gì purge nó đi được nên lisp load rất chậm)
(defun DXF (code elist) (cdr (assoc code elist)) ) (defun c:tn (); / DZ pt y ptside ang OT sc1 scale) (vl-load-com) (setvar "cmdecho" 0) (if (not scale) (setq scale 1)) (setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:"))) (if sc1 (setq scale sc1)) (SETQ OSLAST (getvar "OSMODE")) (setq DZ (getvar "DIMZIN")) (setvar "DIMZIN" 0) (setq OT (getvar "ORTHOMODE")) (setvar "ORTHOMODE" 0) (command "osmode" 99) (setq pt0 (osnap (getpoint "Diem tim TN tu nhien : ") "end")) (print) (setq x0 (car pt0) y0 (cadr pt0)) (setq ed (entget (car (entsel "\nChon cao do tim: ")))) (setq H0 (read (DXF 1 ed))) (command "osmode" 15359) (setq pt (getpoint "\nDiem chen: ")) (While (/= pt nil) (Progn (setq ptside (getpoint "\nPhia chen:" pt) ang (angle pt ptside)) (setq y (- (cadr pt) y0 (- H0))) (setq x (- (car pt) x0)) (cond ((> x 0) (setq x (strcat "" (rtos x 2 2)))) ((< x 0) (setq x (rtos (abs x) 2 2))) ((= x 0) (setq x "0.00")) ) (cond ((> y 0) (setq y (strcat "+" (rtos y 2 2)))) ((< y 0) (setq y (rtos y 2 2))) ((= y 0) (setq y "%%p0.00"))) ;(setq x (ustr 0 "Khoang cach: " x T)) ;(setq y (ustr 0 "Cao do: " y T)) (if (not (tblsearch "block" "LCD1")) (progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" "" "" "" "") (command "erase" (entlast) ""))) ( if (AND (>= ang 0) (< ang 1.5708)) (command "INSERT" "LCD1" pt scale scale "0" x y)) ( if (AND (>= ang 1.5708) (< ang 3.1416)) (command "INSERT" "LCD2" pt scale scale "0" y x)) ( if (AND (>= ang 3.1416) (< ang 4.7124)) (command "INSERT" "LCD3" pt scale scale "0" x y)) ( if (AND (>= ang 4.7124) (< ang 6.2832)) (command "INSERT" "LCD4" pt scale scale "0" y x)) (setq pt (getpoint "\nDiem chen: ")) );pro );while (setvar "OSMODE" OSLAST) (setvar "DIMZIN" DZ) (setvar "ORTHOMODE" OT)) ;---------------------------------------------------------------------------
-
1
-
2
-
-
Chuyện "có thể thay đổi được tên chủ đề" hay không bạn Tue_NV biết rõ hơn bạn chứ? (Group: CADViet Team)Nhưng bạn đã ghi rõ nhờ bác Hoành thì mọi người cũng dè chừng.
muốn giúp bạn nhưng ... ngại "cây đa cây đề".
Nếu em là Bác Hoành chắc em cũng cảm thấy khó chịu với những topic chỉ đích danh tên mình thế này. "đây là diễn đàn chung của cả cộng đồng Cadviet cơ mà, có fải website của riêng tôi đâu mà lúc nào cũng fải chỉ rõ tên tôi mỗi khi bạn gặp vấn đề thế? nếu có gì thắc mắc thì cứ post lên để mọi nguời cùng tháo gỡ" Em mà là bác ấy em sẽ nghĩ như vậy đấy :s_dead:
-
Đúng rồi. em nhớ có lần em thử dịch ngược 1 một tool. và kết quả thực sự khiến em phải hoa mắt chóng mặt như thế này
-
File excel về cách xem tuổi làm nhà. Tải lên cho các bạn cùng tham khảo nhé! Bạn muốn xem tuổi mình năm nào hợp, hướng nhà như thế nào chỉ cần sửa năm sinh, tên và hướng nhà rất đơn giản và dễ dùng chỉ với 1 file Exel gọn nhỏ.Tác giả PhuongLam bên tuvankientruc
:s_dead: EM NÓ ĐÂY :s_dead:
Mình chẳng bao giờ mê tín. nhưng cũng down thử xem cho vui ^^
-
2
-
-
Cả 2 cái đó e biết rồi !! E nghĩ phải có cách hay hơn chứ ?? Bgio mà muốn che nhiều đối tưọgn, ngồi Wipeout chắc hết ngày quá !!! :s_dead:Cách of Pac' GP 14 ý, thì chính là bring to front. Ví dụ e muốn làm thế này nhé ! E có mặt đứng kiến trủôìi. Bgio e chèn thêm cái cửa phía trên mặt đứng nữa nếu ngồi trim các đối tượng mà cái cửa đè lến - chắc cũng hết tuần. dùng Wipeout thì cũng mất tg ko kém. Ý e là vậy đó. Thanks các pác đã quan tâm
Dùng thử thêm lệnh EXtrim đi. mà bạn trim mấy đối tượng như thế làm gì mà hết những "1 tuần" :s_dead:
Lệnh Wipeout cũng đâu có chậm nhỉ. gõ lệnh, enter 2 lần, chọn khung cửa của bạn, ok. xong
-
các bác giúp mình với!chẵng có ai nói gì cả buồn quá đi.
Mình đã làm đi làm lại mãi đã định nghĩa lại mà khi kiểm tra CDTN toàn bộ điểm nằm trong đường mép điều bằng 0. khi định nghĩ tất cả các đường DM đó xong mình có làm gì thêm nữa không để NOVA hiễu thế các bác. trong tài liệu hướng dẫn sử dụng của Công ty Hài Hoà có hướng dẫn Bước3: DNDM đến bước 4 là kiểm tra cao độ tự nhiên thôi mà mình làm mãi chương trình vẫn không hiểu!
Đây là do bạn hiểu sai cách thức nova tính toán cao độ của các điểm. Nova tính toán cao độ của mỗi điểm trên bình đồ bằng việc xây dựng lưới tam giác để tạo ra mô hình lưới bề mặt tự nhiên chứ không phải là bằng thuật toán nội xuy từ cao độ 2 đường đồng mức.
Bạn làm thế này nhé.
1) vẽ 1 đường polyline bao quanh khu vực cần triển khai tuyến của bạn. (nếu bình đồ lớn thì đừng khoanh rộng quá, chỉ cần khoanh rộng hơn khu vực phạm vi tuyến và phạm vi lấy sang 2 bên của trắc ngang một chút là được, như thế bản vẽ đỡ nặng hơn)
2) lập lưới tam giác. Tắt bỏ hết tất cả mọi đối tượng trên bản vẽ không được gán cao độ, chỉ để lại đường đồng mức (đã gán cao độ) và các điểm cao độ (nếu có). gõ lệnh LTG, ok rồi chọn tất cả các điểm cao độ và đường đồng mức cắt qua miền mà ta khoanh ở bước 1. chương trình hỏi chọn đường bao địa hình và lỗ thủng thứ nhất, bạn pick chọn đường polyline ở bwớc 1 và pick vào một điểm bất kì bên trong miền bao bởi polyline đó.
bây giờ bạn thử tra cao độ tự nhiên lại xem. chúc thành công.
-
1
-
-
Biết nói sao được bây giờ?! Mình đã tận tay làm và tận mắt thấy rồi nên mới hỏi. Thắc mắc vẫn chưa được giải đáp! Mong các cao thủ chỉ giáo!Chưa gặp trường hợp của bạn bao giờ cả. có thể bạn tận tay làm nhưng bạn làm sai thì sao? bạn up file text toạ độ đó lên để mình thử xem thế nào.
-
Mình làm thiết kế nạo vét luồng tàu sử dụng Nova 3.5 để tính toán và vẽ mặt bằng tuyến.Có bác nào biết vẽ mặt bằng giao tuyến của mặt cắt ngang thiết kế với mặt đất tự nhiên không? Có nghĩa là chỉ cần vẽ biên giao nhau của phần đào nền và đào taluy trái, phải giao nhau với mặt đất tự nhiên thôi, còn không cần phần biên giao nhau của phần đắp nền.
Mình đã làm và thấy những chố nào mà đáy của mặt cắt ngang thiết kế cao hơn mặt đất tự nhiên thì nova vẫn vẽ được biên giao nhau nhưng biên đó là biên của phần đắp với mặt tự nhiên chứ không phải là biên phần đào.
Mình có đính kèm 1 file sau đây với mục đích là xác định phạm vi đào nền với mặt cắt ngang thiết kế của mình được tạo bởi đáy đào, taluy trái, taluy phải với mái dốc bằng 1. Prô xem bản cad này và cho mình hướng giải quyết để mình vẽ được biên đào nền với nhé, thanks các prô rất nhiều!
uhm. không có cách nào ngoài việc bạn phải sửa bằng tay trên từng trắc ngang. bởi vì theo yêu cầu của bạn thì trắc ngang thiết kế (đường đỏ trên trắc ngang) đối với mỗi mặt cắt là khác nhau -> không có cách nào có thể thiết kế trắc ngang tự động được.
Tuy nhiên sửa bằng tay cũng không được phép dùng lệnh trim để sửa. khi đó bạn sẽ không điền thiết kế trắc ngang được đâu.
Cách sửa: bạn vẫn thiết kế trắc ngang bình thường. đối với các mặt cắt thừa phần đường đỏ trên nền đắp bạn chỉ được phép pick chuột bắt vào điểm đầu của phần đường đỏ hay taluy thừa ra và kéo nó vào vị trí giao cắt với đường tự nhiên. sửa bằng cách này thì bạn mới có thể điền thiết kế trắc ngang (dtktn) và vẽ các yếu tố mặt bằng tuyến từ trắc ngang (bt) mà không gặp vấn đề gì.
-
Tốt nhất là...làm lại :s_dead:Bạn không có cao kiến gì thì cũng đừng góp ý với người ta như vậy. thứ nhất, vì không giúp gì được người ta; thứ 2, bài viết của bạn mang tính chất spam gây phản cảm cho những ai theo dõi topic này.
Nếu recover không được thì bạn vào Start-> Run gõ %temp% ->Ok. sắp xếp file theo date modified bạn tìm file nào có tên giống tên file bản vẽ của bạn nhưng phần đuôi có mấy con số và phần mở rộng có dạng *.sv$ được tạo gần nhất. copy file đó ra rồi đổi fần đuôi mở rộng thành dwg. Tùy trường hợp, có thể bạn sẽ cứu vãn đc gần như 100% khối lượng công việc đã làm đấy.
Vấn không ổn thì bạn up file lỗi của bạn lên để mình thử xem thế nào.
-
Bạn dùng phím F10 cũng được mà.Em hỏi bác Nguyên Hoành là TEMPOVERRIDES cái này dùng đời cad thứ bao nhiêu vậy em đang dùng cad 2004 mà không được nó báo thế nàyUnknown command "TEMPOVERRIDES". Press F1 for help.
Cad 2005 còn không có nữa kìa. Chức năng dùng fím Shift để bật tắt Ortho khi đang vẽ không được hỗ trợ từ các bản cad từ 2005 trở về trước. 2006 thì mình không biết vì chưa dùng bao giờ. 2007 đã được hỗ trợ.
Không biết có cách nào lấy được chức năng này từ cad2007 dùng cho cad2005 không nhỉ? Mình cũng hầu như phải vẽ bằng cad2005
-
Bạn thử cái này xem. Khi nhập tỷ lệ chỉ nhập 100, 200.. ko nhập 1/100, 1/200.Kết quả đưa ra file ketqua.txt trong cùng thư mục với file cad.
Chú ý vì lệnh boundary chỉ làm đc với đa giác kín và zoom cho thấy đủ đa giác đó (trong tầm nhìn).
Có vòng lặp cho nên nếu muốn thoát thì enter.
(defun c:dth() (vl-load-com) (setvar "cmdecho" 0) (if (not tln) (setq tln 100)) (if (not tld) (setq tld 100)) (if (not caot) (setq caot 1)) (setq tln1 (getreal (strcat "\nCho ty le ngang < 1/" (rtos tln 2 0) " >: 1/")) tld1 (getreal (strcat "\nCho ty le dung < 1/" (rtos tld 2 0) " >: 1/")) caot1 (getreal (strcat "\nCao text < " (rtos caot 2 0) " >: "))) (if tln1 (setq tln tln1)) (if tld1 (setq tld tld1)) (if caot1 (setq caot caot1)) (setq heso (/ tld tln) file (open (strcat (getvar "dwgprefix") "Ketqua.txt") "a") p (getpoint "\nPick a internal point:") el (entlast)) (while p (command "boundary" p "") (if (not (equal el (setq el1 (entlast)))) (progn (write-line (setq chu (rtos (* heso (vla-get-Area (vlax-ename->vla-object el1))))) file) (entdel el1) (entmakex (list '(0 . "TEXT") (cons 40 caot) (cons 10 p) (cons 1 chu))) )) (setq p (getpoint "\nPick a internal point:")) ) (close file) (setvar "cmdecho" 1) (princ) )Có sự khác nhau trong công thức tính diện tích của em và bác q288. Với tỷ lệ bản vẽ 1/X và 1/Y, Bác q288 lấy diện tích đo được nhân với tỷ số Y/X để ra diện tích thực, hình như không đúng. theo em ta fải lấy diện tích đo được nhân với đồng thời cả X và Y thì mới ra được chính xác diện tích thật.
-
Đoạn này của bác q288 hay quá. tuyệt thật...
(if (not tln) (setq tln 100))(if (not tld) (setq tld 100))
(if (not caot) (setq caot 1))
(setq tln1 (getreal (strcat "\nCho ty le ngang < 1/" (rtos tln 2 0) " >: 1/"))
tld1 (getreal (strcat "\nCho ty le dung < 1/" (rtos tld 2 0) " >: 1/"))
caot1 (getreal (strcat "\nCao text < " (rtos caot 2 0) " >: ")))
(if tln1 (setq tln tln1))
(if tld1 (setq tld tld1))
(if caot1 (setq caot caot1))
Tiện đây bác q288 cho em hỏi cái này có tác dụng gì thế?
(vl-load-com)(setvar "cmdecho" 0)
thấy rất nhiều lisp mọi người viết bắt đầu thường có đoạn này, tại vì em cũng chỉ học mót, chắp vá nên không hiểu lắm. bác giải thích hộ em với
-
nhờ các bác viết dùm cái list tính diện tích có 2 tỷ lệ X Y khac nhauví dụ : có 1 hình tỷ lệ đứng 200 tỷ lệ ngang 100 nhờ các bác viết theo ý của e được không khi ta pick vào hùnh đó sẽ hỏi tỷ lệ đứng: nhập vào, tỷ lệ ngang:nhập vào,chiều cao text: nhập vào,nếu xuất ra excel càng tốt
Thanks các bác
hoặc cái này. mình viết chậm rồi nhưng thôi cứ post bạn tham khảo. thấy cái nào hay thì dùng.
Với lisp này bạn có thể cộng 1 lần diện tích của nhiều miền kín lại và xuất ra kết quả vào text có săn hoặc xuất ra vị trí bất kỳ trên màn hình với cao text bạn nhập vào. text style sẽ lấy theo textstyle hiện tại. lisp không có chức năng xuất ra file text
;;;===Tinh dien tich theo ty le ban ve====;;; (defun C:ax (/ P1 dtich dtich1 L a1 a2 tx ty tlx tly h) (if (= tx nil) (progn (setq tx (getreal "\nTy le theo phuong ngang 1/")) (setq tlx tx))) (if (= ty nil) (progn (setq ty (getreal "\nTy le theo phuong dung 1/")) (setq tly ty))) (command "UCS" "W" "") (setq lastcol (getvar "CEColor")) (setq lastos (getvar "OsMODE")) (setvar "OSMODE" 0) (command "CECOLOR" 4) (setq P1 (getpoint "\n Chon mien tinh dien tich")) (command "boundary" P1 "") (setq a1 (ssget "L") a2 (ssadd) a2 (ssadd (ssname a1 0) a2) ent (ssname a1 0)) (command "area" "o" "l") (setq dtich (getvar "Area")) (setq P1 (getpoint "\n Diem tiep theo ...")) (while (/= P1 nil) (command "boundary" P1 "") (setq a1 (ssget "L") a2 (ssadd (ssname a1 0) a2) ent (ssname a1 0)) (command "area" "o" "l") (setq dtich1 (getvar "Area") dtich (+ dtich dtich1)) (setq P1 (getpoint "\n Diem tiep theo ..."))) (setvar "CECOLOR" lastcol) (setvar "OSMODE" lastos) (setq res (entsel "\n Chon text ghi ket qua, Pick hoac Enter de ghi ket qua ra man hinh ")) (if res (progn (setq res (entget (car res))) (setq res (subst (cons 1 (rtos (* dtich tlx tly) 2 2)) (assoc 1 res) res)) (entmod res) ) (progn (setq h (getstring "\n Nhap chieu cao text: " )) (setq p (getpoint "\n Chon diem ghi ket qua" )) (command "TEXT" p h "" (rtos (* dtich tlx tly) 2 2)) ) ) (command "erase" a2 "") ) ;;;==================================
-
1
-
-
Xin Lisp xuat toa độ
trong AutoLisp
-Theo mình thấy thì lisp chỉ đúng trong trường hợp bản vẽ ở tỉ lệ 1-1 và bản vẽ chưa bị dời đi so với lúc mấy anh khảo sát giao cho mình.-Thực tế khi làm quy hoạch không phải lúc nào bản vẽ cũng ở tỉ lệ 1-1 và trong 1 bản vẽ thường gộp nhiều bản: giao thông, phân lô... .
-Khi viết lisp nên bổ sung thêm phần hỏi tỉ lệ bản vẽ và chọn tọa độ giả định thỉ sẽ hoàn thiện và tiện cho người dùng hơn.
Để làm được như thế này thì trình em chắc cũng fải tương đương hoặc chí ít là gần bằng anh rồi, em vẫn còn gà mà anh. đọc đến đây em hoa hết cả mắt :s_dead:
@Khaosat2009:
1. mình chưa bao giờ nghĩ có bản vẽ nào đó phải thống kê đến con số hàng trăm điểm tọa độ. nếu bạn muốn mình có thể sửa cho bạn kích thước hình tròn lớn hơn nhưng khi đó nhìn sẽ xấu (với các điểm từ 1-99).
2. Mình không hiểu ý bạn khi muốn "khắc phục để cho di chuyển đến vị trí thích hợp đặt điểm đó". bạn cần ghi tọa độ ở điểm nào thì lisp ghi kết quả ngay tại điểm đó chứ. sao lại move đi đâu nữa?
3. Mình chưa biết đến "Block động" bao giờ cả. fải chăng bạn đang muốn nói block có chưa text tạo bởi lệnh Attribute?
4. bạn có vẻ là người quá nặng nề trong việc trình bày bản vẽ. chỉ một vài thay đổi nhỏ nhặt như thế trong yêu cầu của bạn cũng sẽ khiến mình fải viết lại lisp gần như hoàn toàn đấy. bạn nên chỉnh sửa thủ công theo con mắt thẩm mĩ của bạn thì có lẽ tốt hơn. và nhớ khi đưa yêu cầu nhờ giúp đỡ bạn cố gắng nêu hết những yêu cầu cần thiết mà bạn muốn 1 lần thôi nhé. Viết rồi sửa lại ngại lắm.
Đã sửa lại kích thước hình tròn phù hợp với các điểm tọa tra độ thứ tự từ 100 trờ lên. chắc bạn không cần thống kê đến con số 1000 điểm đâu nhỉ :s_dead:)
;GHI TOA DO CAC DIEM VA THONG KE THANH BANG ---------------------------------------------- (defun C:td (/ diem PT1 PT2 PT3 tapx tapy x y xx yy h n di kc ten C PT PTX PTY PTD PTC N p1 p2 p3 p4 p11 p22 p33 L1 L2 L11 L22) (setvar "cmdecho" 0 ) (command "Undo" "Begin") (setq om (getvar "osmode")) (setq tapx '() tapy '() stt '() k 0 h (getreal "\nnhap chieu cao chu:") ten (getstring "\nNhap ten diem:")) (while (setq diem (getpoint "\nchon cac vi tri co toa do can ghi:")) (progn (setq PT1 (list(+ (* 3 h) (car diem))(+ (* 3 h) (cadr diem))) PT2 (list (car PT1) (- (cadr PT1)(+ 1 h) ) ) x (rtos(car diem) 2 4) y (rtos (cadr diem) 2 4) tapx (append tapx (list x)) tapy (append tapy (list y)) k (+ 1 k) N (strcat ten (rtos k 2 0)) stt (append stt (list N)) );setq (setvar "osmode" 0) (command "text" "j" "BL" PT1 h 0 x) (setq TB (textbox (entget(entlast))) LC (car TB) RC (cadr TB) di (distance LC RC) PT3 (polar PT1 0 (+ di h)) C (polar PT3 0 (* 1.5 h)) );setq (command "text" PT2 h 0 y "pline" diem PT1 PT3 "" "circle" (polar PT3 0 (* 1.8 h)) (* 1.8 h) "text" "m" (polar PT3 0 (* 1.8 h)) h 0 N ) (setvar "osmode" om) );progn );dong while ;tao bang thong ke (setq kc (* 2 di) PT (getpoint"\nvi tri dat bang :") PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) p1 (list (car PT) (+ (cadr PT)(* 2 h))) p2 (list (car PTC) (+ (cadr PTC)(* 2 h))) p3 (list (car p1) (+ (cadr p1)(* 2 h))) p4 (list (car p2) (+ (cadr p2)(* 2 h))) PTD (list (+ (/ di 2) (car PT)) (+ h (cadr PT))) PTX (list (+ di (/ di 2) (car PTD)) (cadr PTD)) PTY (list (+ kc (car PTX)) (cadr PTX)) p11 (list (+ (/ di 2) (car p1)) (+ h (cadr p1))) p22 (list (+ di (/ di 2) (car p11)) (cadr p11)) p33 (list (+ kc (car p22)) (cadr p22)) L1 (list (+ di (car p3))(cadr p3)) L2 (list (+ kc (car L1))(cadr L1)) n (length tapx) k 0 );setq (setvar "osmode" 0) (command "line" p1 p2 "" "text" "j" "m" p11 h 0 "STT" "text" "j" "m" p22 h 0 "Täa ®é X" "text" "j" "m" p33 h 0 "Täa ®é Y" "line" p3 p4 "") (while (< k n) (setq xx (nth k tapx) yy (nth k tapy) tstt(nth k stt)) (command "text" "j" "m" PTD h 0 tstt "text" "j" "m" PTX h 0 xx "text" "j" "m" PTY h 0 yy "line" PT PTC "") (setq PT (list (car PT) (- (cadr PT)(* 2 h))) PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) PTD (list (+ (/ di 2) (car PT)) (+ h (cadr PT))) PTX (list (+ di (/ di 2) (car PTD)) (cadr PTD)) PTY (list (+ kc (car PTX)) (cadr PTX)) k (+ 1 k));setq );while (if (= k n) (setq PT (list (car PT) (+ (cadr PT)(* 2 h))) PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) L11 (list (+ di (car PT))(cadr PT)) L22 (list (+ kc (car L11))(cadr L11)) );setq );if (command "line" p3 PT "" "line" p4 PTC "" "line" L1 L11 "" "line" L2 L22 "") (setvar "osmode" om ) (setvar "cmdecho" 1) (prompt"\nxong\n") (command "Undo" "End") (princ) );DONG toado
-
1
-
1
-
-
cảm ơn bạn về acadimouse2, nhưng phần mềm này chỉ zoom được trong model, còn trong layout thì không zoom được. Bạn có cách gì khắc phục không ?Thanks !
:s_dead: Tool này chỉ dùng cho cad 14. các bản đời cao hơn không cần đến nó nữa. Mà cad14 thì không hề có layout. Nếu bạn có bản cad14 hỗ trợ Layout thì cho mình xin :s_dead:
-
Xin Lisp xuat toa độ
trong AutoLisp
Nhờ Bạn cho biết Font của bảng là fónt gì vậy bạn.Bạn có thể bổng sung việc xác định tên mốc theo ý người dùng và chiều dài các cạnh khi chọn 2 nút đó vào bảng, canh lề hàng cho đúng theo bên phải.
Bạn giúp cho việc xuất ra file text.
Rất cám ơn[/color]
Khuyên bạn: Trước khi đặt câu hỏi bạn nên thử tự tìm câu trả lời cho mình trước đã. ok?
Font sử dụng khi điền tọa độ cũng như khi thống kê bảng chính là font của textstyle đang hiện hành lúc bạn chạy lisp. không khó để nhận ra điều đó. Nếu bạn không hiển thị tốt tiếng việt trong bảng thống kê thì chuyển sang 1 textstyle khác dùng các font thuộc bảng mã TCVN3.
Về yêu cầu của bạn: mình hiểu là khi chạy lisp bạn sẽ tiến hành các bước: nhập cao text -> nhập tên mốc -> nhập chiều dài các cạnh của bảng rồi mới bắt đầu thực hiện pick truy vấn tọa độ mốc đúng không?
=> 1. quá rườm rà
=> 2. Bạn có chắc chiều dài cạnh bạn nhập không quá rộng hoặc không quá hẹp so với cao text? lisp trên đã được tính toán để text được bố trí vào bảng một cách hợp lý nhất. vì thế mình không sửa lại theo yêu cầu nhập chiều dài các cạnh của bảng nữa.
Riêng phần xuất ra file text, mình chưa bg fải làm việc với những file text chứa tọa độ điểm nên không hiểu nội dung của nó sẽ được bố trí như thế nào vì đây không fải chuyên ngành của mình. thế nên mình bó tay khoản này.
đây là lisp bạn có thể nhập tên mốc theo ý muốn của mình
;GHI TOA DO CAC DIEM VA THONG KE THANH BANG ---------------------------------------------- (defun C:td (/ diem PT1 PT2 PT3 tapx tapy x y xx yy h n di kc ten C PT PTX PTY PTD PTC N p1 p2 p3 p4 p11 p22 p33 L1 L2 L11 L22) (setvar "cmdecho" 0 ) (command "Undo" "Begin") (setq om (getvar "osmode")) (setq tapx '() tapy '() stt '() k 0 h (getreal "\nnhap chieu cao chu:") ten (getstring "\nNhap ten diem:")) (while (setq diem (getpoint "\nchon cac vi tri co toa do can ghi:")) (progn (setq PT1 (list(+ (* 3 h) (car diem))(+ (* 3 h) (cadr diem))) PT2 (list (car PT1) (- (cadr PT1)(+ 1 h) ) ) x (rtos(car diem) 2 4) y (rtos (cadr diem) 2 4) tapx (append tapx (list x)) tapy (append tapy (list y)) k (+ 1 k) N (strcat ten (rtos k 2 0)) stt (append stt (list N)) );setq (setvar "osmode" 0) (command "text" "j" "BL" PT1 h 0 x) (setq TB (textbox (entget(entlast))) LC (car TB) RC (cadr TB) di (distance LC RC) PT3 (polar PT1 0 (+ di h)) C (polar PT3 0 (* 1.5 h)) );setq (command "text" PT2 h 0 y "pline" diem PT1 PT3 "" "circle" (polar PT3 0 (* 1.5 h)) (* 1.5 h) "text" "m" (polar PT3 0 (* 1.5 h)) h 0 N ) (setvar "osmode" om) );progn );dong while ;tao bang thong ke (setq kc (* 2 di) PT (getpoint"\nvi tri dat bang :") PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) p1 (list (car PT) (+ (cadr PT)(* 2 h))) p2 (list (car PTC) (+ (cadr PTC)(* 2 h))) p3 (list (car p1) (+ (cadr p1)(* 2 h))) p4 (list (car p2) (+ (cadr p2)(* 2 h))) PTD (list (+ (/ di 2) (car PT)) (+ h (cadr PT))) PTX (list (+ di (/ di 2) (car PTD)) (cadr PTD)) PTY (list (+ kc (car PTX)) (cadr PTX)) p11 (list (+ (/ di 2) (car p1)) (+ h (cadr p1))) p22 (list (+ di (/ di 2) (car p11)) (cadr p11)) p33 (list (+ kc (car p22)) (cadr p22)) L1 (list (+ di (car p3))(cadr p3)) L2 (list (+ kc (car L1))(cadr L1)) n (length tapx) k 0 );setq (setvar "osmode" 0) (command "line" p1 p2 "" "text" "j" "m" p11 h 0 "STT" "text" "j" "m" p22 h 0 "Täa ®é X" "text" "j" "m" p33 h 0 "Täa ®é Y" "line" p3 p4 "") (while (< k n) (setq xx (nth k tapx) yy (nth k tapy) tstt(nth k stt)) (command "text" "j" "m" PTD h 0 tstt "text" "j" "m" PTX h 0 xx "text" "j" "m" PTY h 0 yy "line" PT PTC "") (setq PT (list (car PT) (- (cadr PT)(* 2 h))) PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) PTD (list (+ (/ di 2) (car PT)) (+ h (cadr PT))) PTX (list (+ di (/ di 2) (car PTD)) (cadr PTD)) PTY (list (+ kc (car PTX)) (cadr PTX)) k (+ 1 k));setq );while (if (= k n) (setq PT (list (car PT) (+ (cadr PT)(* 2 h))) PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) L11 (list (+ di (car PT))(cadr PT)) L22 (list (+ kc (car L11))(cadr L11)) );setq );if (command "line" p3 PT "" "line" p4 PTC "" "line" L1 L11 "" "line" L2 L22 "") (setvar "osmode" om ) (setvar "cmdecho" 1) (prompt"\nxong\n") (command "Undo" "End") (princ) );DONG toado
PS: mọi người trong diễn đàn thường chỉ cần cảm ơn nhau bằng nút Thank dưới mỗi bài post bạn ạ. thế là đủ :s_dead:
-
3
-
11
-
-
bạn thử dùng câu lệnh này xem có đỡ hơn không?
(command "undo" "6" "")
-
1
-
-
gõ lệnh tắt RE -> enter
-
mình không fải dân kiến trúc nên nhìn thấy khá đẹp. tuy nhiên cầu thang trong nhà có vẻ không ổn lắm. lòng vòng mãi rồi mới lên đến tầng 3.
đoạn cuối từ tầng 1 lên đến tầng 2 không hiểu xây lắp kiểu gì đây?
-
1
-
-
Xin Lisp xuat toa độ
trong AutoLisp
Em dang lam quy hoach khu độ thị phần giao thông, Bác nào có lisp xuất toạ độ các Nút giao cho em xin !;GHI TOA DO CAC DIEM VA THONG KE THANH BANG ---------------------------------------------- (defun C:td (/ diem PT1 PT2 PT3 tapx tapy x y xx yy h n di kc C PT PTX PTY PTD PTC N p1 p2 p3 p4 p11 p22 p33 L1 L2 L11 L22) (setvar "cmdecho" 0 ) (command "Undo" "Begin") (setq om (getvar "osmode")) (setq tapx '() tapy '() stt '() k 0 h (getreal "\nnhap chieu cao chu:")) (while (setq diem (getpoint "\nchon cac vi tri co toa do can ghi:")) (progn (setq PT1 (list(+ (* 3 h) (car diem))(+ (* 3 h) (cadr diem))) PT2 (list (car PT1) (- (cadr PT1)(+ 1 h) ) ) x (rtos(car diem) 2 4) y (rtos (cadr diem) 2 4) tapx (append tapx (list x)) tapy (append tapy (list y)) k (+ 1 k) N (strcat "N" (rtos k 2 0)) stt (append stt (list N)) );setq (setvar "osmode" 0) (command "text" "j" "BL" PT1 h 0 x) (setq TB (textbox (entget(entlast))) LC (car TB) RC (cadr TB) di (distance LC RC) PT3 (polar PT1 0 (+ di h)) C (polar PT3 0 (* 1.5 h)) );setq (command "text" PT2 h 0 y "pline" diem PT1 PT3 "" "circle" (polar PT3 0 (* 1.5 h)) (* 1.5 h) "text" "m" (polar PT3 0 (* 1.5 h)) h 0 N ) (setvar "osmode" om) );progn );dong while ;tao bang thong ke (setq kc (* 2 di) PT (getpoint"\nvi tri dat bang :") PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) p1 (list (car PT) (+ (cadr PT)(* 2 h))) p2 (list (car PTC) (+ (cadr PTC)(* 2 h))) p3 (list (car p1) (+ (cadr p1)(* 2 h))) p4 (list (car p2) (+ (cadr p2)(* 2 h))) PTD (list (+ (/ di 2) (car PT)) (+ h (cadr PT))) PTX (list (+ di (/ di 2) (car PTD)) (cadr PTD)) PTY (list (+ kc (car PTX)) (cadr PTX)) p11 (list (+ (/ di 2) (car p1)) (+ h (cadr p1))) p22 (list (+ di (/ di 2) (car p11)) (cadr p11)) p33 (list (+ kc (car p22)) (cadr p22)) L1 (list (+ di (car p3))(cadr p3)) L2 (list (+ kc (car L1))(cadr L1)) n (length tapx) k 0 );setq (setvar "osmode" 0) (command "line" p1 p2 "" "text" "j" "m" p11 h 0 "STT" "text" "j" "m" p22 h 0 "Täa ®é X" "text" "j" "m" p33 h 0 "Täa ®é Y" "line" p3 p4 "") (while (< k n) (setq xx (nth k tapx) yy (nth k tapy) tstt(nth k stt)) (command "text" "j" "m" PTD h 0 tstt "text" "j" "m" PTX h 0 xx "text" "j" "m" PTY h 0 yy "line" PT PTC "") (setq PT (list (car PT) (- (cadr PT)(* 2 h))) PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) PTD (list (+ (/ di 2) (car PT)) (+ h (cadr PT))) PTX (list (+ di (/ di 2) (car PTD)) (cadr PTD)) PTY (list (+ kc (car PTX)) (cadr PTX)) k (+ 1 k));setq );while (if (= k n) (setq PT (list (car PT) (+ (cadr PT)(* 2 h))) PTC (list (+ (* 2 kc) di (car PT)) (cadr PT)) L11 (list (+ di (car PT))(cadr PT)) L22 (list (+ kc (car L11))(cadr L11)) );setq );if (command "line" p3 PT "" "line" p4 PTC "" "line" L1 L11 "" "line" L2 L22 "") (setvar "osmode" om ) (setvar "cmdecho" 1) (prompt"\nxong\n") (command "Undo" "End") (princ) );DONG toado
lisp này ghi tọa độ vào mỗi điểm bạn cần kiểm tra và xuất bảng thống kê tọa độ trực tiếp ra màn hình.
Nếu bạn muốn xuất ra file excel thì mình nghĩ có nhiều cách để làm việc đó khi đã có bảng tọa độ
-
1
-
4
-
-
nhờ các bác viết dùm cái list tính diện tích có 2 tỷ lệ X Y khac nhauví dụ : có 1 hình tỷ lệ đứng 200 tỷ lệ ngang 100 nhờ các bác viết theo ý của e được không khi ta pick vào hùnh đó sẽ hỏi tỷ lệ đứng: nhập vào, tỷ lệ ngang:nhập vào,chiều cao text: nhập vào,nếu xuất ra excel càng tốt
Thanks các bác
-Đối tượng cần đo là đối tượng gì?-Pick vào hình là:
+Chọn đối tượng.
+Pick 1 điểm nằm trong vùng khép kín. (vùng khép kín tạo bởi cái gì)
với đề bài thế này thì em nghĩ với những đối tượng tính toán là hình chữ nhật thì còn có thể làm đc. chứ đối với một hình đa giác bất kỳ thì thực sự hơi khó. không biết thuật toán nào có thể làm đc?
@a.Tue: Cái này đúng là tuỳ quan điểm của từng người anh ạ. em là dân cầu đường, làm việc với trắc dọc nhiều, bản vẽ loại này thường có tỷ lệ x và y khác nhau. ví dụ
x là 1/1000, y là 1/100. khi đó bọn em chỉ cần nói với nhau trắc dọc tỷ lệ 1000,100 là đủ hiểu. thế nên em mới nói đây có lẽ cũng chỉ là thói quen khi nói của bạn kimanh. tất nhiên khi viết thì không được phép ghi tỷ lệ như vậy
-
đây là đoạn code ghi kết quả tính toán mà em hay dùng
(setq res (entsel "\n Chon text ghi ket qua, Click hoac Enter de ghi ket qua ra man hinh ")) (if res (progn (setq res (entget (car res))) (setq res (subst (cons 1 (rtos L 2 2)) (assoc 1 res) res)) (entmod res) ) (progn (setq p (getpoint "\n Chon diem nhap ket qua" )) (wtxt (rtos L 2 2) p) )
Đối với kết quả là số nguyên thì nó không ghi 2 chữ số 0 sau dấu thập phân. Do nhu cầu trình bày bản vẽ được đẹp hơn, em muốn ghi kết quả luôn giữ 2 số 0 sau dấu phẩy.
ví dụ kết quả tính toán là 10 kết quả ghi là màn hình mà em muốn là 10.00 chứ không phải 10. như vậy em phải sửa đoạn code này như thế nào?
-
Kính gửi các ProTôi đã tìm kiếm trên diễn đàn rùi nhưng không có. Xin đừng ném đá tui nhé.
Tôi có 1 bản đồ với các điểm caođộ ở dạng TEXT, giờ muốn cộng toàn bộ chúng hoặc các đối tượng được chọn) thêm 1 hằng số K nào đó và ghi đè lên giá trị cũ ởđúng vị trí cũ thì làm thế nào? Kính mong các cao thủ giúp đỡ. Chân thành cảm ơn
Cái này cũng tương tự
(defun c:as() (setq i 0 s1 0) (setq n (getreal "\nnhap so bi tru hoac so de cong: ")) (prompt "\nchon cac so can sua ...") (setq txt (ssget '((0 . "TEXT")))) (repeat (sslength txt) (setq txt_name (ssname txt i)) (setq txt_ent (entget txt_name)) (setq cont (cdr(assoc 1 txt_ent))) (setq cont (atof cont)) (setq s (+ cont n)) (setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent)) (entmod txt_ent) (setq i (+ i 1)) );repeat );defun ;------------------------------------------------------
-
:| hôm nay mình cũng thử google chính mình mới thấy cái topic này đang bàn tán về mình.
hehe, Mình đích thị là con trai. ^^
Ảnh avt của mình là một bạn gái cũng fan Arsenal như mình nhờ làm hộ thôi. Mình nghĩ là nó đẹp nên lấy làm avt.
Sorry vì đã khiến anh em nhầm lẫn. mà đúng là 4r mình dương thịnh âm suy quá :s_big:
@: Mình nhớ vndesperados là con trai mà. Bác ấy còn là dân IT chứ không fải dân công trình hay dân gì gì đó chuyên sử dụng cad như anh em mình đâu
Nhờ diễn đàn sửa lisp ghi khoảng cách, cao độ trên cắt ngang
trong AutoLisp
Đã đăng · Trả lời báo cáo
Cảm ơn anh Tue rất nhiều vì những góp ý rất bổ ích của anh. Đúng là em chưa biết về biến hệ thống ATTREQ này vì mặc định nó thường là 1.
về việc viết 3.1416 thay cho pi thì không ảnh hưởng gì lắm đến quá trình sử dụng lisp, nhưng đúng là đối với con mắt của nguời lập trình thì điều đó thật khó chấp nhận. cũng bởi vì truớc đây em mới chỉ học mỗi pascal trong truờng đại học, nên không nghĩ là các ngôn ngữ lập trình khác như autolisp cũng chấp nhận giá trị của Pi.
@Toại: để tính toán ứng với giá trị tỷ lệ của bản vẽ điều đó không khó, nhưng thực tế lisp này ta sử dụng chủ yếu trên trắc ngang (tỷ lệ là 1:1) vì thế mình không muốn đưa giá trị tỷ lệ khác của bản vẽ vào. sẽ rườm rà khi nhập số liệu trong khi ứng dụng cho nó hầu như rất ít.
Code mình đã sửa lại đây: