Chuyển đến nội dung
Diễn đàn CADViet

Thaistreetz

Nhà quảng cáo
  • 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


  1. Lần đầu tiên viết bài trên CADViet, tôi chót viết nhầm tiêu đề nên chỉnh sửa tùm lum trong bài viết này mong các bạn thông cảm!

     

    Bạn nhổ một sợi tóc, cắt bỏ gốc và ngọn đánh dấu gốc hoặc ngọn rồi đố tôi tìm biết được đâu là gốc đâu là ngọn, sau giây lát tôi sẽ chỉ chính xác 100%. Đố bạn biết tôi đã nhận ra được bằng cách nào.

     

    hehe. Câu hỏi này của bác gần 2 năm rồi chưa có ai trả lời được.

    Hồi nhỏ em hay nhổ tóc sâu cho nội em nên cái này với em dễ ợt :bigsmile:

    Anh cầm sợt tóc đó bằng 2 tay với 1 lực tương đối bằng nhau rồi vuốt nó. vuốt về phía nào dễ hơn thì đó là ngọn. Nguyên nhân là vì bề mặt của sợi tóc không fải là trơn láng, nó có vân và các vân này xếp 1 chiều theo dạng xếp ngói. chuẩn chưa nào? :bigsmile:

    • Vote tăng 1

  2. Mình đang tìm cái lisp cộng, trừ, nhân, chia giữa các phần tử tương ứng của 2 hàng text.

    Mình nhớ Bác Hoành đã post nó trong topic này nhưng tìm hoài không ra.

    Bạn nào nhớ nó ở khoảng trang bao nhiêu thì nhắc mình với. Chức năng tìm kiếm của diễn đàn với 4 từ khóa trên cũng chịu thua rồi :bigsmile:


  3. Em mới học nên chưa bít cách tổng hợp được các list trung vào 1 FILE

    Bác nào có 1 File list (tổng hợp các list trong 1 file) mà mình chuyên dùng thì share dùm e nhé , em cám ơn nhiều

     

    LISP chứ không phải LIST nhé

    Không nên tổng hợp nhiều lisp vào chung 1 file vì

    - nó chẳng giúp gì thêm cho bạn về sự tiện dụng cả.

    - khó tìm tên lệnh, khó sửa lisp.

    - sự giống nhau và khác nhau giữa các biến được khai báo của mỗi lisp cũng là vấn đề dễ gây rắc rối khi sử dụng.

    Trên đây là ý kiến chủ quan của mình. vì chưa rõ bạn tổng hợp nhằm mục đích gì?


  4. @hg: bạn thử nêu sự khác biệt giữa 2 việc này cho tôi xem :

    1. mỗi một điểm tọa độ bạn phải 1 lần nhập tên nút.

    2. Bạn edit tên của các nút ấy sau khi chạy xong lisp.

    nếu việc bạn edit mất quá nhiều thời gian hơn so với việc bạn nhập tên cho từng nút tôi sẽ viết lại cho bạn.

     

    Tất cả các lisp post trên diễn đàn này mọi người đều công khai code. điều đó có nghĩa bạn muốn sửa thế nào cho thích hợp với nhu cầu của ban thì tùy. Riêng tôi khuyến khích bạn làm điều đó. vừa tích lũy kiến thức cho bạn mặt khác vừa để bạn hiểu, tránh đưa ra những yêu cầu (cá nhân tôi cho là) ngớ ngẩn. (Việc này ko khó, tôi cũng chỉ mới bắt đầu học lisp cách đây hơn 2 tuần)

     

    Và lưu ý với bạn. tôi cảm thấy rất khó chịu với bạn vì việc này. trước khi cho rằng lisp của tôi hay mọi người ở đây viết sai thì hãy tự hỏi vì sao người khác chạy được, hay với một bản vẽ này chạy được kết quả tốt còn đối với bản vẽ của bạn thì không. OK?

     

    @Kiukiu: mình đọc đi đọc lại rồi mà vẫn không hiểu bạn muốn nói gì. thật đấy

    Nếu bạn chưa vẽ tốt, chưa hiểu những gì cơ bản của cad thì học để nắm vững cad trước đã. sở dĩ mình kết luận điều này là vì những góp ý của bạn ở topic này và topic về lisp tính diện tích.


  5. Đây là đoạn lisp mình viết riêng cho anh em trong cty mình dùng, nó có thêm một số lựa chọn có xuất bảng thống kê hay không. ngoài ra nó cũng được viết để phù hợp với việc bạn fải chạy lệnh nhiều lần trong 1 phiên làm việc. dùng cái nào tùy bạn nhé.

    (prompt"\n[cmd : TDN] - THONG KE TOA DO by Thaistreetz - huuthais@yahoo.com\n")
    ----------------------------------------------
    (defun C:tdn ()
    (setvar "cmdecho" 0 )
    (command "Undo" "Begin")  
    (setq om (getvar "osmode"))
    (setq tapx '() tapy '() stt '()
         ten (getstring "\nTên Nút:"))
    (if (not h) (setq h 1))
    (if (not i) (setq i 1))
    (setq i1  (getreal (strcat"\nSTT Nút Ðâu Tiên < " (rtos i 2 0) " >: "))
       caot1 (getreal (strcat "\nCao text < " (rtos h 2 0) " >:")))
    (if i1 (setq i i1))
    (if caot1 (setq h caot1))
    (setvar "osmode" 125)
    (setq lacol (getvar "CEColor") k (- i 1))
    ;================================================
    (While
    (setq D1 (getpoint (strcat"\nPick diem thu "(rtos (+ k 1) 2 0)"")))
    (Progn
     (setvar "osmode" 0)
     (setq DX (getpoint (strcat"\nDiem dat text thu "(rtos (+ k 1) 2 0)"") D1)
           x   (rtos (car D1) 2 4)
           y   (rtos (cadr D1) 2 4)
    TX (strcat "X:"(rtos (Car D1) 2 4))
    TY (strcat "Y:"(rtos (Cadr D1) 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
     (if (>= (car DX) (car D1)) 
    (progn
    (setq D2 (list (+ (car DX) (* 0.5 h)) (cadr DX)))	   
       	(command "text" "BL" D2 h 0 tX)
     	(setq   TB  (textbox (entget(entlast)))
       		LC  (car TB)
      		RC  (cadr TB)
       		di  (distance LC RC)
    	PT3 (polar D2 0 (+ di (* 0.6 h)))
    	pt4 (list (car D2) (- (cadr D2) (* 1.35 h)))
    	pt5 (list (+ (car D2) di) (- (cadr D2) (* 1.35 h)))		
    	C   (polar PT3 0 (* 1.5 h))
     	);setq
     	(command "text" "F" PT4 PT5 h ty
              	 "pline" D1 DX PT3 ""
              	 "circle" (polar PT3 0 (* 1.5 h)) (* 1.5 h)
              	 "circle" (polar PT3 0 (* 1.5 h)) (* 1.35 h)
              	 "text" "m" (polar PT3 0 (* 1.5 h)) h 0 N 
              	 "CECOLOR" 8
    	 "circle" (polar PT3 0 (* 1.5 h)) (* 1.35 h)
     	  );command
      (setvar "CECOLOR" lacol)
    );progn
      );if
     (if (< (car DX) (car D1)) 
    (progn
      (setq D2 (list (- (car DX) (* 0.5 h)) (cadr DX)))	   
     	  (command "text" "BR" D2 h 0 tx)
     	  (setq   TB  (textbox (entget(entlast)))
       		  LC  (car TB)
      		  RC  (cadr TB)
       		  di  (distance LC RC)
    	  PT3 (polar D2 0 (- (+ di (* 0.6 h))))
    	  pt4 (list (- (car D2) di) (- (cadr D2) (* 1.35 h)))
    	  pt5 (list (car D2) (- (cadr D2) (* 1.35 h)))
    	  PT6 (list (- (car PT3) (* 3 h)) (cadr PT3))
    	  C   (polar PT3 0 (* 1.5 h))
     	  );setq
     	  (command "text" "F" PT4 PT5 h TY
              	   "pline" D1 DX PT3 ""
              	   "circle" (polar PT6 0 (* 1.5 h)) (* 1.5 h)
              	   "text" "m" (polar PT6 0 (* 1.5 h)) h 0 N 
              	   "CECOLOR" 8
    	   "circle" (polar PT6 0 (* 1.5 h)) (* 1.35 h)
     	  );command
      (setvar "CECOLOR" lacol)
    );progn
      );if
    );progn
    (setvar "osmode" 125)
    );while
    (setq i (+ k 1))
    ;=============================================
    (setq bit (cond (bit) ("Yes")))
    (initget "Yes No")
    (setq	Tmp (strcat "\nXuât Bang Toa Ðô? [Yes/No] <" bit ">: ")
    bit (cond ((getkword Tmp)) (bit)))
    (if (eq bit "Yes")
    (progn
    (setq	di (- di (* 1.7 h))
    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))
    PTB (list (+ (* 0.5 (+ (* 2 kc) di)) (car PT)) (+ (cadr P3) (* 1.8 h)))
        	n (length tapx)
        	k 0
    );setq
    (setvar "osmode" 0)
    (command "CECOLOR" 3 "line" p1 p2 "" "line" p3 p4 "" "CECOLOR" 2
          	"text" "m" p11 h 0 "STT" 
          	"text" "m" p22 h 0 "Täa ®é X" 
          	"text" "m" p33 h 0 "Täa ®é Y"
          	"text" "m" pTB (* 1.3 h) 0 "%%UB¶ng thèng kª täa ®é nót")    
    (while (< k n) 
    (setq xx (nth k tapx) yy (nth k tapy) tstt(nth k stt))
    (command "CECOLOR" 2
     "text" "m" PTD h 0 tstt 
            "text" "m" PTX h 0 xx 
            "text" "m" PTY h 0 yy
     "CECOLOR" 3 
            "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 "CECOLOR" 3 
    "line" p3 PT ""
    "line" p4 PTC ""
    "line" L1 L11 ""
    "line" L2 L22 "")
    );progn
    );if
    (setvar "CECOLOR" lacol)
    (setvar "osmode" om)
    (prompt"\n[TDN - THONG KE TOA DO] by Thaistreetz - huuthais@yahoo.com\n")
    (command "Undo" "End")
    (setvar "cmdecho" 1)
    (princ)
    );DONG toado
    


  6. Lisp này bị lỗi lắm. Khi mở bản vẽ mới ra chạy thì chạy được. nhưng mình ko thể chạy được trên các bản vẽ đã có từ trước. huhuhu !!!!!!

    VÀ có 1 điều nữa. khi mình nhập tên điểm là 2 chẳng hạn thì lisp laị vẽ ra tên điểm là 21

    Và tên nút ko được nhập bằng tay vào khi pick từ điểm thứ 2 trở đi. Tên đó phải do người dùng nhập vào !!!

    Các bác Pro sửa giúp em với !!!

    Đây là file bản vẽ mà lisp ko chạy được :

    http://www.cadviet.com/upfiles/2/1_2.dwg

    Nhưng bài toán thực tế bài toán ghi toạ độ đối với tuyến đường thì lại khác bạn à !!! Tuyến đường nó cong và dài. Do vậy ko phải khi nào chữ ghi toạ độ nó cũng nằm theo phương ngang.Mình muốn bạn sửa cái lisp đó để mình có thể tự xác định được phương của chữ ghi toạ độ, tức là thêm 1 dọc pick điểm để xác định phương của chữ nữa !!!!

    Command: TDN

    Nhập chiều cao Text<2> :

    Nhap ten nut:

    Pick điểm lấy toạ độ(point 1):

    point2:

    point3:

    ....

    Nhap ten nut:

    Pick điểm lấy toạ độ(point 1):

    point2:

    point3:

    ....

    Nhap ten nut:

    Pick điểm lấy toạ độ(point 1):

    point2:

    point3:

     

    Vi tri dat bang:

    ok !!!

    Phương của chữ ghi kích thước sẽ trùng với phương của đoạn nối point2 với point3

     

    Lisp trên không sai. ngay cả đối với text style hiện thời trong bản vẽ của bạn mình vẫn có thể chạy được ngon lành. nếu có gì đó sai thì chỉ là việc bạn chẳng hiểu gì về bản vẽ mà mình đang làm cả. vì sao mình nói vậy? với lisp trên bạn thử chạy nó với chiều cao text là 5000 thử xem.

    Bạn chú ý điều này nữa: từ giờ trở đi, với bất kỳ lisp nào bạn sử dụng mà có yêu cầu nhập chiều cao text thì hãy chắc chắn rằng text style bạn sử dụng phải được thiết lập chiều cao mặc định ban đầu là 0 thì mới chạy được.

     

    Về vấn đề tên nút cần thống kê tọa độ. lisp này chia thành 2 phần.

    - phần tên là ký tự. ví dụ: nhập N chẳng hạn

    - phần tên là số thứ tự: 1, 2 ,3

    Như vậy khi truy vấn tọa độ, tên các điểm sẽ có dạng N1, N2, N3.... nếu không nhập Tên nút (enter để bỏ qua) nó sẽ được ghi dưới dạng chỉ có số thứ tự: 1, 2, 3...

    Hay nếu không thì bạn hãy sửa tên nút bằng cách edit text sau khi chạy xong hoặc xóa nó đi tùy nhu cầu của bạn. làm việc này cũng chẳng khác gì việc bạn phải nhập tên nút cho mỗi lần pick. OK?

     

    Về vấn đề thống kê tọa độ cọc trên tuyến. chắc chắn mình không làm nữa. vì bản thân nova đã cung cấp đủ công cụ cho bạn

    Cọc trên tuyến thì đã có tên cọc. bạn chỉ cần chạy bảng tọa độ cọc nữa là xong. không ai gán cái tọa độ vào cọc làm gì cả cho rối bình đồ tuyến.

     

    Lisp này mình nghĩ là tương đối hoàn thiện cho nhu cầu chung của mọi người. mình sẽ không sửa lại nó nữa. nói thật là mình chán nó lắm rồi :bigsmile:


  7. sao lisp bạn post lên bị lỗi mà bạn ko post lại bài vậy ???

     

    Sặc. chán bạn thật. chỉ tìm code mà không đọc kỹ bài viết ngay phía trên của mình à? (bài số #7 ấy)

    Mình đã bảo là mình sửa lại lỗi trực tiếp vào code mình đã post ở bài số #5. bạn cứ copy về là xài được thôi.

    và nhờ bạn edit lại bài số #6 của bạn, xóa phần code cũ mà bạn đã trích dẫn ở bài số 5 của mình đi để những ai vào topic này sau đỡ copy nhầm cái code lỗi ấy.

    làm ơn đọc lại những gì mình viết hộ cái :bigsmile:


  8. Không được đâu anh Tue ah. cái này không đơn giản chỉ là xuất ra toạ độ z của 1 điểm vì nova hình như nó không gán cao độ vào toạ độ z. em đã thử rồi nhưng không được.

    cái này chắc phải nhờ cao thủ nào hiểu sâu hơn về thuật toán tính toán cao độ của nova mới làm được rồi.

    một vấn đề nữa là hệ cao độ thành lập bằng lưới tam giác này cũng chỉ tồn tại trong 1 phiên làm việc của bản vẽ. sau khi close bản vẽ nó sẽ được xoá bỏ. khi mở bản vẽ ta phải thành lập lại lưới tam giác này.

    bản thân em vẫn nghĩ là thông tin về cao độ của mỗi point khi được tra cứu nằm ở một phần tử nào đấy trong danh sách list của point đó, nhưng không biết cách nào tìm được số thứ tự phần tử đó.


  9. Mình có file "Khaosat.ntd" của Nova các bạn có cách nào chuyển chúng qua TN của chương trình thiết kế Huy Hoàng ???

    Hiện tại mình chuyển bằng cách xuất bảng số liệu ở dạng file .doc từ NOVA, sau đó copy từng số liệu từng mặt sang TN của HuyHoang.

     

    chương trình thiết kế Huy Hoàng <=??????

    Mình chưa nghe đến chương trình thiết kế đường này bao giờ. nó có miễn phí không bạn? nếu là phần mềm miễn phí thì bạn có thể share cho mọi người cùng dùng thử được không?


  10. Em thấy trong Cad hay sử dụng một loại option điều kiện [Yes/No] để xem xét việc có thực hiện một bước nào đó trong quá trình thao tác lệnh hay không. hiện em đang muốn dùng loại option điều kiện này nhưng viết mãi không được đoạn code ấy.

    hic! em nhức đầu với nó quá! mọi người giúp em với, em chịu thua với nó rồi. :bigsmile:


  11. Hjx ! Lisp của bạn có chạy được đâu.Mình Down về đánh lệnh TD chẳng thấy hiểu lệnh j cả .huhuhu

     

    hic! Có lẽ trong lúc post bài mình đã "làm rơi" mất một dấu ngoặc ở đâu đó. mình đã edit lại code trên rồi đấy, bạn thử lại xem.

     

    PS: bạn edit lại post trên và xóa phần Code đã Quote đi để người sau vào đỡ nhầm nhé. nhớ lần sau có Quote bài của ai đó thì đừng Quote phần code tránh rối mắt người đọc nhé bạn.


  12. Đây là file yêu cầu của em : http://www.cadviet.com/upfiles/2/text_poin...a_hoac_move.rar

    Khi biên tập bản vẽ đo địa hình, thường xảy ra tình trạng các điểm cao độ bị trùng nhau. Để bản vẽ in ra được đẹp, trước khi in em phải chọn từng text rồi move hoặc xóa nó đi sao cho các text còn lại trong bản vẽ đều nhau.

     

    Em muốn hỏi các anh 2 vấn đề :

    + Các anh có thể chỉ em cách chọn text theo điều kiện. VD : nếu khoảng cách giữa 2 text là 1 giá trị nào đó thì sẽ tự động tách ra riêng

    + Có cách nào để chọn và xóa nhanh các text trên để không còn các text trùng nhau như bãn vẻ trên.

    CẢM ƠN các anh!!

    Hy vọng nhận được sự giúp đỡ của các anh em!

     

     

    theo mình hiểu thì điểm chèn của các text này chính là tọa độ của các điểm cần đánh dấu cao độ. như vậy việc move hoặc xóa text đi đã làm sai lệch hoặc mất những điểm mà thực tế trên bản vẽ cần phải có. mình cũng đã gặp trường hợp này nhiều rồi và thông thường thì mình chỉ chỉnh lại chiều cao hoặc chiều rộng hoặc cỡ của text thôi. và khi in thì đặt nét mờ cho text cao độ này để tránh làm rối bản vẽ.

    chưa hiểu lắm ý của bạn


  13. anh chị ơi!

    em vừa mới học cad mà xem phần này thấy hay hay nhưng chẳng hỉu cái đoạn code của anh Tuệ đọc thế nào ai giải thích chi tiết cho em đc ko?

    thank nhìu!!!!

     

    Nếu mới học cad thì em cứ lo học cho tốt những thao tác vẽ cơ bản của cad đi đã, vẽ tốt rồi thì tiếp tục nghiên cứu cái này thì sẽ hiểu về nó sâu hơn. mới học mà đã muốn dùng mấy thứ này là sau lười luôn đấy, vẽ không lên tay đc đâu. :bigsmile:


  14. Cảm ơn bác rất nhiều, nó chạy được rồi nhưng mà với bản vẽ khác nhau thì các đối tượng X=... và y=... lại khác nhau

    Em muốn nó giống nhau ấy. Bác sửa giúp em đi.

    Đây là hình ảnh 2 toạ độ khác nhau

    http://www.cadviet.com/upfiles/2/xy.jpg

    Đây là File CÀD của em !!!

    http://www.cadviet.com/upfiles/2/mb_tong_the.dwg

     

    Lisp trên được tác giả của nó viết để áp dụng cho riêng một mẫu bản vẽ với các thuộc tính units, text style, dim style... của riêng tác giả. chính vì thế nó chỉ có thể chạy tốt với những bản vẽ có các thuộc tính tương tự bản vẽ của tác giả.

     

    Mình thấy nhu cầu của bạn tương đối giống 1 bạn trước đây đã nhờ Cadviet một lisp tương tự nên mình sửa lại lisp cũ.

    Khi chạy lisp này sẽ yêu cầu bạn nhập chiều cao text và tên của Nút tọa độ cần thống kê. nếu không cần nhập tên Nút thì lisp sẽ chỉ ghi tọa độ và số thứ tự của nút. kết thúc lisp sẽ thống kê 1 bảng tọa độ các nút cho bạn. hi vọng nó là thứ bạn cần.

     

    ;GHI TOA DO CAC DIEM VA THONG KE THANH BANG
    ----------------------------------------------
    (defun C:tdn ()
    (setvar "cmdecho" 0 )
    (command "Undo" "Begin")  
    (setq om (getvar "osmode"))
    (setq tapx '() tapy '() stt '() k 0
         ten (getstring "\nNhap ten nut:"))
    (if (not h) (setq h 1))
    (setq caot1 (getreal (strcat "\nCao text < " (rtos h 2 0) " >:")))
    (if caot1 (setq h caot1))
    (setvar "osmode" 125)
    (setq lacol (getvar "CEColor"))
    ;================================================
    (While
    (setq   D1 (getpoint "\nPick diem toa do:"))
    (Progn
     (setvar "osmode" 0)
     (setq DX (getpoint "\nDiem dat text:" D1)
           x   (rtos (car D1) 2 4)
           y   (rtos (cadr D1) 2 4)
    TX (strcat "X="(rtos (Car D1) 2 4))
    TY (strcat "Y="(rtos (Cadr D1) 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
     (if (>= (car DX) (car D1)) 
    (progn
    (setq D2 (list (+ (car DX) (* 0.5 h)) (cadr DX)))	   
       	(command "text" "BL" D2 h 0 tX)
     	(setq   TB  (textbox (entget(entlast)))
       		LC  (car TB)
      		RC  (cadr TB)
       		di  (distance LC RC)
    	PT3 (polar D2 0 (+ di (* 0.6 h)))
    	pt4 (list (car D2) (- (cadr D2) (* 1.4 h)))
    	pt5 (list (+ (car D2) di) (- (cadr D2) (* 1.4 h)))		
    	C   (polar PT3 0 (* 1.5 h))
     	);setq
     	(command "text" "F" PT4 PT5 h ty
              	 "pline" D1 DX PT3 ""
              	 "circle" (polar PT3 0 (* 1.5 h)) (* 1.5 h)
              	 "circle" (polar PT3 0 (* 1.5 h)) (* 1.35 h)
              	 "text" "m" (polar PT3 0 (* 1.5 h)) h 0 N 
              	 "CECOLOR" 8
    	 "circle" (polar PT3 0 (* 1.5 h)) (* 1.35 h)
     	  );command
      (setvar "CECOLOR" lacol)
    );progn
      );if
     (if (< (car DX) (car D1)) 
    (progn
      (setq D2 (list (- (car DX) (* 0.5 h)) (cadr DX)))	   
     	  (command "text" "BR" D2 h 0 tx)
     	  (setq   TB  (textbox (entget(entlast)))
       		  LC  (car TB)
      		  RC  (cadr TB)
       		  di  (distance LC RC)
    	  PT3 (polar D2 0 (- (+ di (* 0.6 h))))
    	  pt4 (list (- (car D2) di) (- (cadr D2) (* 1.4 h)))
    	  pt5 (list (car D2) (- (cadr D2) (* 1.4 h)))
    	  PT6 (list (- (car PT3) (* 3 h)) (cadr PT3))
    	  C   (polar PT3 0 (* 1.5 h))
     	  );setq
     	  (command "text" "F" PT4 PT5 h TY
              	   "pline" D1 DX PT3 ""
              	   "circle" (polar PT6 0 (* 1.5 h)) (* 1.5 h)
              	   "text" "m" (polar PT6 0 (* 1.5 h)) h 0 N 
              	   "CECOLOR" 8
    	   "circle" (polar PT6 0 (* 1.5 h)) (* 1.35 h)
     	  );command
      (setvar "CECOLOR" lacol)
    );progn
      );if
    );progn
    (setvar "osmode" 125)
    );while
    ;=============================================
    ;tao bang thong ke
     (setq di (- di (* 2 h))
    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))
    PTB (list (+ (* 0.5 (+ (* 2 kc) di)) (car PT)) (+ (cadr P3) (* 1.8 h)))
        	n (length tapx)
        	k 0
       );setq
     (setvar "osmode" 0)
     (command "CECOLOR" 3
    "line" p1 p2 ""
          	"line" p3 p4 ""
          	"CECOLOR" 2
          	"text" "m" p11 h 0 "STT" 
          	"text" "m" p22 h 0 "Täa ®é X" 
          	"text" "m" p33 h 0 "Täa ®é Y"
          	"text" "m" pTB (* 1.3 h) 0 "%%UB¶ng thèng kª täa ®é nót")    
     (while (< k n) 
       (setq xx (nth k tapx)
         yy (nth k tapy)
        tstt(nth k stt))
       (command "CECOLOR" 2
         "text" "m" PTD h 0 tstt 
                "text" "m" PTX h 0 xx 
                "text" "m" PTY h 0 yy
         "CECOLOR" 3 
                "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 "CECOLOR" 3 
    "line" p3 PT ""
    "line" p4 PTC ""
    "line" L1 L11 ""
    "line" L2 L22 "")
    (setvar "CECOLOR" lacol)
    (setvar "osmode" om)
    (setvar "cmdecho" 1)
    (prompt"\nxong\n")
    (command "Undo" "End")
    (princ)
    );DONG toado

    • Like 1
    • Vote tăng 1

  15. em học cầu đường và rất thích làm thiết kế. nhưng chỉ biết sơ sơ thôi,em dùng nova 4.0 để học, đầu tiên em dùng lệnh nsl để nhâp số liêụ nhằm tạo 1 file có đuôi tnd để lấy số liệu thiết kế nhưng trong quá trình nhập nếu khoang cách lẻ <25 đều bị ghi la khoảng cách ko hơp lệ và em cứ phải tăng lên 30 ,sau khi nhập được một số cọc em click vào ô ghi têp em có thấy đuôi tnd nhưng khi xuất tuyến lại ko được.rất mong các bác tiền bôi giup đỡ.

     

    Có thể bạn nhập khoảng cách là "Khoảng cách lẻ" giữa các cọc, nhưng lại khai báo là "khoảng cách cộng dồn".

    Mình khuyên bạn nên nhập số liệu bằng lệnh RTDN thì tốt hơn. trước khi nhập phải nhớ khai báo dạng số liệu nhập vào. trên thanh menu có nút "lựa chọn", bạn bấm vào đó để khai báo sao cho dễ dàng nhất với số liệu khảo sát thu thâoh được

    • Vote tăng 1

  16. Thanks, Gia bach. Đúng như mình mong muốn, và đã thanks cho bạn rồi..........rất tiếc chỉ thanks được 1 lần. hihi

    Spam ngoài lề: hihi...Gia Bach đã post đc 195 bài, vậy là bạn có thể thank tối đa 195 lần cho Gia Bach đó. có lần mình đã thank 100 lần cho một anh. xét cho cùng thì thời gian mình bấm thank chả đáng bao nhiêu so với thời gian ai đó bỏ ra viết lisp cho mình. trong quá trính thank mình còn tổng hợp được vô khối lisp hay của anh ấy.


  17. Em không giúp gì đuợc cho chủ topic nhưng cảm thấy cần spam 1 câu:

     

    Nhiều người thực sự lười trong công việc quá. những công việc như thế này cũng muốn tự động hoá thì em bó tay luôn.

    Kiểm tra bản vẽ mà chỉ xem thôi chứ không có tác động gì vào bản vẽ để kiểm tra tính chính xác của nó thì đúng là công việc "cưỡi ngựa xem hoa". nhàn quá nhỉ!


  18. Cảm ơn Cadviet, Thaistreetz... "Sản phẩm" đã thích ứng được trong các điều kiện. Nhưng (cái này được gọi là "Được voi đòi tiên" đây) các pro xem có thể bổ sung thêm chút nữa để đoạn lisp trên thay vì chỉ tính CĐ, KC cho một điểm sẽ tính và thể hiện được CĐ, KC cho các điểm còn lại trên cùng 1 mặt cắt, như vậy sẽ tiết kiệm được thời gian do phải lặp lại lệnh "TN".(Vì mình đang làm Hồ sơ thanh toán khối lượng tạm thời, đường phân khai khối lượng trong mặt cắt ngang sẽ phải thể hiện cao độ của một vài điểm) :s_dead:

     

    trên cùng một mặt cắt ngang thì có nghĩa là cùng 1 hệ cao độ khai báo, và lisp này có thể điền đến n lần cho n điểm cho 1 lần gõ lệnh vì có sử dụng vòng lặp. lisp chỉ kết thúc khi bạn Enter để kết thúc lệnh. như vậy rõ ràng đã thỏa mãn yêu cầu trên rồi còn gì nữa. bạn chỉ phải nhập lại lệnh khi chạy cho mặt cắt khác thôi chứ.

    • Vote tăng 1

  19. Nhờ các bác viết giúp lisp tính diện tích và lập ra bảng như trong hình. Cám ơn các bác rất nhiều

    dt.jpg

     

    Của bạn đây. lisp sẽ tính diện tích thực theo tỷ lệ bản vẽ bạn nhập vào. đầu tiên bạn phải chọn vị trí đặt bảng thống kê diện tích trên bản vẽ rồi mới pick chọn các miền cần đo diện tích. pick tới đâu diện tích sẽ được thống kê vào bảng đến đó. Mình viết thêm cho bạn một ô tính tổng diện tích các miền đã đo (yêu cầu của bạn không thấy nêu vấn đề này), tuy nhiên bạn phải Enter để kết thúc lệnh (không nhấn Esc nhé) thì lisp mới vẽ được ô cuối cùng này.

    (defun c:r()
     (setvar "cmdecho" 0)
     (setq lacol (getvar "CEColor"))
     (setq ladin (getvar "dimzin"))
     (setq laos (getvar "osmode"))  
     (if (not tl) (setq tl 1))
     (if (not h) (setq h 1))
     (setq tl1 (getreal (strcat "\nty le ban ve < 1/" (rtos tl 2 0) " >: 1/"))
    caot1 (getreal (strcat "\nCao text < " (rtos h 2 0) " >: ")))
     (if tl1 (setq tl tl1))
     (if caot1 (setq h caot1))
    
     (setq	 k 0 
    tdt 0)
     (setq ss (ssadd))
    
    (setvar "dimzin" 0)
    (setvar "OSMODE" 0)
    (setq PT (getpoint "\nChon diem xuat bang thong ke dien tich (mep trai):"))
    (setq 	P1 (list (+ (car PT)(* 6 h)) (cadr PT))
    P2 (list (+ (car PT)(* 22 h)) (cadr PT))
    P3 (list (car PT) (- (cadr PT)(* 3 h)))
    P4 (list (car P1) (cadr P3))
    P5 (list (car P2) (cadr P3))
    P6 (list (+ (car PT)(* 11 h)) (+ (cadr PT)(* 2 h)))
    P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))
    P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))
    );setq
    (command 	"pline" PT P2 P5 P3 "C"
    	"pline" P1 P4 ""
    	"text" "m" P6 (* 1.2 h) 0 "%%UB¶ng thèng kª diÖn tÝch"
    	"text" "m" P7 h 0 "STT"
    	"text" "m" P8 h 0 "DiÖn tÝch (m2)"
    );command
    
    (setq pt1 (getpoint "\n Chon mien tinh dien tich : "))
     (while (/= pt1 nil)
    (setq k (+ 1 k))
    (command "TEXT" "m" pt1 (* 3 h) 0 (rtos k 2 0))
    (setq 	PT (list (car P3) (cadr P3))
    P1 (list (+ (car PT)(* 6 h)) (cadr PT))
    P2 (list (+ (car PT)(* 22 h)) (cadr PT))
    P3 (list (car PT) (- (cadr PT)(* 3 h)))
    P4 (list (car P1) (cadr P3))
    P5 (list (car P2) (cadr P3))
    P7 (list (+ (car PT)(* 3 h)) (- (cadr PT)(* 1.5 h)))
    P8 (list (+ (car PT)(* 14 h)) (- (cadr PT)(* 1.5 h)))
    P9 (list (car PT) (- (cadr P3)(* 3 h)))
    P10 (list (car P1) (cadr P9))
    P11 (list (car P2) (cadr P9))
    P12 (list (car P7) (- (cadr P3)(* 1.5 h)))
    P13 (list (car P8) (cadr P12))
    );setq
    (command "CECOLOR" 4 "-boundary" pt1 "" )
    (setvar "CECOLOR" lacol)
    (setq et (entlast))
    (ssadd et ss)
    (command "area" "e" "last")				
    (setq et (entlast))
    (ssadd et ss)
    (setq dtcon (* (getvar "AREA") tl tl))
    (setq tdt (+ dtcon tdt))
    (command "erase" ss "")
    
    (command "pline" PT P2 P5 P3 "C"
    	"pline" P1 P4 ""
    	"text" "m" P7 h 0 (rtos k 2 0)
    	"text" "m" P8 h 0 (rtos dtcon 2 2))
    
    (setq pt1 (getpoint "\n chon mien tinh dien tich tiep theo hoac enter de ket thuc lenh..."))
    );while
    (setq ss nil)
    (setvar "DIMZIN" ladin)
    (command 	"pline" P3 P9 P11 P5 "C"
    	"pline" P10 P4 ""
    	"text" "m" P12 h 0 "Tæng"
    	"text" "m" P13 h 0 (rtos tdt 2 2)
    );command
    (setvar "OSMODE" laos)
    (setvar "cmdecho" 1)
    )

    • Like 1
    • Vote tăng 9

  20. Bạn ơi, có một điều nữa bạn xem lại giúp: kết quả cao độ và k.c được xác định từ đoạn lisp bạn đã sửa chỉ có thể đúng với bản vẽ có TL 1:1 thôi, các TL khác thì sai bạn ạ. :s_dead:

     

    theo tỷ lệ bản vẽ như nhu cầu của bạn. dùng cái nao tuỳ bạn nhé.

    (defun DXF (code elist)
     (cdr (assoc code elist))
    )
    
    (defun c:tnx (); / DZ pt y ptside ang OT sc1 scale)
    (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))
    (if (= tx nil) (setq tx 1))
    (if (= ty nil) (setq ty 1))
    (setq tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 0)">: 1/")) 
    	ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 0)">: 1/")))
    (if tx1 (setq tx tx1))
    (if ty1 (setq ty ty1))
    (setq ATLAST (getvar "Attreq"))
    (setq OSLAST (getvar "OSMODE"))
    (setq DZ (getvar "DIMZIN"))
    (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))
    (setvar "DIMZIN" 0)		 
    (cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
    	 ((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
    	 ((= x 0) (setq x "0.00"))		 )
    (cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
    	 ((< y 0) (setq y (rtos (* y ty) 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" 0 "" "" "")
    (command "erase" (entlast) "")))
    (setvar "attreq" 1)
    ( if (AND (>= ang 0) (< ang (/ pi 2))) (command "INSERT" "LCD1" pt scale scale "0" x y))
    ( if (AND (>= ang (/ pi 2)) (< ang pi)) (command "INSERT" "LCD2" pt scale scale "0" y x))
    ( if (AND (>= ang pi) (< ang (+ pi (/ pi 2)))) (command "INSERT" "LCD3" pt scale scale "0" x y))
    ( if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi))) (command "INSERT" "LCD4" pt scale scale "0" y x))
    (setvar "attreq" ATLAST)
    (setvar "DIMZIN" DZ)
    (setq pt (getpoint "\nDiem chen: "))
    );pro
    );while 
    (setvar "OSMODE" OSLAST)
    (setvar "ORTHOMODE" OT))
    ;---------------------------------------------------------------------------

    • Vote tăng 2
×