Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

Viết lisp theo yêu cầu [phần 2]

Các bài được khuyến nghị

phamthanhbinh    3.123

Mạn phép tác giả mình sửa giúp bạn

 

P/S : dù sao thì mình cũng hơi buồn, vì đây không phải là yêu cầu khó, bạn cũng đang là 1 lisper, câu hỏi này bạn cũng hỏi ở topic của chính lisp này, mình cũng có đọc thấy nhưng "lờ" đi, k ngờ sau 1 tjan vẫn thế

hề hề hề,

Chào bác Ketxu,

Có nhẽ bác hơi vội nên hình như có quên chút xíu cái yêu cầu thứ hai của bạn Nguyenngocson thì phải.

Bác đã cho nhập góc nghiêng text nhưng khi tạo text thì bác vẫn để góc text y như cụ : (command "text" "j" "BL" PT1 h 0 x) và ......

Bác xem lại mấy chỗ này nhé.

Hề hề hề,

@Nguyenngocson: Dựa vào bài viết của bác ketxu và của mình bạn có thể tự chỉnh chút xíu được không??? Mình tin là bạn sẽ thành cô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
phamthanhbinh    3.123

Có lẽ do lisp này dài dài vậy nên bạn nghĩ nó khó, thực chất cũng không đến nỗi khó lắm đâu. Cái bạn cần là 1 tờ giấy để ghi lại "diem" nó ở chỗ nào, lệnh này nó sẽ ghi text ở đâu, lệnh này nó làm cái j... và 1 chút kiên nhẫn, đọc từ trên xuống dưới.Tất cả đều là các lệnh rõ ràng và dễ hiểu.

Mình gọi là sửa cho nó oai, nhưng thực chất chỉ sửa 2 từ (x thành y và ngược lại), thêm 4 dòng nữa thôi (Nhập góc, lấy ename tất cả từ khi bắt đầu vẽ, quay tập ename đó), nên mình nghĩ nếu bạn tâm huyết với vấn đề của mình, chắc chắn bạn sẽ làm được.

Chúc bạn thành công và thổi nhiệt huyết sang các CADman khác :)

Hề hề hề,

Ây da, mình đọc lướt lướt nên hổng thấy cái rotate của bác. Tuy nhiên giá như bác rotate từng thằng ngay trong hàm command "text".... có nhẽ se đúng ý bạn ấy hơn, vì khi rotate cả đám quanh một cái tâm là điểm thì các text sẽ quay với bán kính quay khác nhau bác ạ và không khéo thì nó trốn mất tiêu luôn...

Hề hề hề.

  • Vote tăng 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    2.649

^^ Tất nhiên là e chỉ mới chọn lại đám râu ria đó rồi quay thôi, và chắc chắn sẽ chậm hơn là vẽ ngay ban đầu, và lỗi thì... :"> Chứ vẽ thì coding hơi lâu hơn ^^.Và việc đó xin nhường lại bạn NguyenNgocSon ^^

  • Vote tăng 2

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
daythung777    1

Hề hề hề,

Không rõ bạn có am tường về lisp không nhưng qua bài pót của bạn mình thấy rằng, có nhẽ bạn không sử dụng dược lisp trên là do các đường đồng mức của bạn là các 3d polyline chứ không phải LWpolyline bạn ạ.

Vì thế nếu bạn muốn có được cái bạn cần thì có nhẽ bạn nên post một bản vẽ của bạn có chứa các đường như vậy để mọi người ngâm cứu thử và cũng nên nói rõ khi nào thì cần xóa. Khái niệm trùng ở đây của bạn là thế nào, trùng các hình chiếu trên mặt phẳng vẽ hay trùng hoàn toàn cả về các vertex của nó. Theo mình nghĩ thì có nhẽ bạn muốn xóa các phần hình chiếu trùng nhau của các đường đồng múc mà như vậy thì có ổn không vì bản thân mỗi đường đồng mức là một polyline riêng biệt có cao độ đồng nhất. khi xóa một phần nào đó của cái đường đồng mức này đi thì liệu nó có còn là cái đường đồng mức bạn cần hay không???

Rất mong bạn nói rõ mới có thể giúp bạn được. Tốt nhất bạn nên gửi file bản vẽ trước khi xử lý và file bản vẽ kết quả sau xử lý để mọi người hiểu và dễ dàng giúp bạn.

Nếu bạn có thể thì dựa vào cái thuật toán mình đã sử dụng trong cái lisp bạn đã đọc, bạn thử áp dụng vào các 3dpolyline của bạn xem sao. Như vậy có nhẽ sẽ được đúng với yêu cầu của bạn hơn, vì có thể mọi người chưa hiểu đúng ý bạn.

Hề hề hề,

Chúc bạn vui.

 

Cảm ơn bạn phamthanhbinh đã quan tâm.

 

Khi sồ hóa đường đồng mức mất rất nhiều thời gian nên trước khi định nghĩa mình nối trước vì vậy các đường đồng mức chưa có cao độ. Còn đây là file bạn xem thử

http://www.mediafire.com/?3q77b5j0t7fqcqv

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    2.649

Mình đã thử so sánh kết quả chạy lisp (tìm overlay) so với Overkill thì Overkill vẫn nhanh hơn bạn à ^^

  • Vote tăng 2

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    2.649

Vì polyline của bạn có khá nhiều vertex, sau khi kiểm tra over (việc này Overkill làm rất nhanh ), express còn rebuild lại Pline đó ^^, nên việc lâu là đương nhiên. Cho nên, bạn có thể tách ra từng vùng mà làm 1 (máy yếu )

  • Vote tăng 2

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
kamezoko    3

@TUE_NV: không ngờ có lệnh hay thế này mà lâu ni không biết. Cảm ơn anh 1 lần nưa

@kamezoko: Cách làm của anh TUE_NV có thể giải quyết được 2 yêu cầu của bạn

Mình hoàn chỉnh cho bạn rồi nè.

;;;-------------------------------------------------------------
(defun TBCong (x1 x2) (/ (+ x1 x2) 2)) ;;;Trung binh cong
;;;-------------------------------------------------------------
(defun MidP (p1 p2) ;;;Midpoint
(list (TBCong (car p1) (car p2)) (TBCong (cadr p1) (cadr p2)) (TBCong (caddr p1) (caddr p2)))
)
;;;-------------------------------------------------------------
(defun getVert (e / i L) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(vl-load-com)
(repeat (fix (+ (vlax-curve-getEndParam e) 1))
(setq L (append L (list (vlax-curve-getPointAtParam e i))))
(setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------
(defun etype (e) (cdr (assoc 0 (entget e)))) ;;;Entity type
;;;-------------------------------------------------------------
(defun dim2p (p1 p2 s h) ;;;Dimaligned 2 Point
(command "dimaligned" p1 p2 (polar (MidP p1 p2) (+ (angle p1 p2) (/ pi 2)) s))
(command "DIMOVERRIDE" "dimtxt" h "DIMDSEP" "," "" (entlast) "")
)
;;;-------------------------------------------------------------
(defun dimLine(e s h) ;;;Dimaligned Line
(dim2p (cdr (assoc 10 (entget e))) (cdr (assoc 11 (entget e))) s h)
)
;;;-------------------------------------------------------------
(defun dimPline(e s h) ;;;Dimaligned PLine
(setq Lp (getvert e) i 0)
(repeat (1- (length Lp))
(dim2p (nth i Lp) (nth (1+ i) Lp) s h)
(setq i (1+ i))
)
)
;;;-------------------------------------------------------------
(defun C:AD( / ss s oldos e) ;;;AutoDimaligned Line & Pline
(vl-load-com)
(if (not s0) (setq s0 10))
(setq
	ss (ssget '((0 . "LINE,LWPOLYLINE")))
	s (getdist (strcat "\nKhoang cach tu doi tuong den duong kich thuoc <" (rtos s0) ">:"))
	oldos (getvar "osmode")
)
(if (not s) (setq s s0) (setq s0 s))
(if (not caotext1) (setq caotext1 2.00))
(setq caotext (getreal (strcat "\n Nhap chieu cao Text <" (rtos caotext1 2 2) ">:")))
(if (not caotext) (setq caotext caotext1)  (setq caotext1 caotext))	
(setvar "osmode" 0)
(while (setq e (ssname ss 0))
(if (= (etype e) "LINE") (dimLine e s caotext) (dimPline e s caotext))
(ssdel e ss)
)
(setvar "osmode" oldos)
(princ)
)

cám ơn các anh..các anh giúp em thêm 1 chút nửa nhe...

em muốn sau khi lisp ghi kích thướt xong thì nó tự nổ ra thành mtext (explode)

em cám ơn trước.. :D

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    2.649

Mình mới thấy có người vui tính như bạn đấy ^^

Bạn thêm dòng này

(command "_explode" (entlast))

vào sau dòng này :

(command "DIMOVERRIDE" "dimtxt" h "DIMDSEP" "," "" (entlast) "")
  • Vote tăng 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
phamthanhbinh    3.123

Cảm ơn bạn phamthanhbinh đã quan tâm.

 

Khi sồ hóa đường đồng mức mất rất nhiều thời gian nên trước khi định nghĩa mình nối trước vì vậy các đường đồng mức chưa có cao độ. Còn đây là file bạn xem thử

http://www.mediafire.com/?3q77b5j0t7fqcqv

Bạn xài thử cái này coi có ổn hơn thằng overkill không nhé. Mình chạy thử thấy cũng không quá chậm song có tí nhược điểm là nếu như cái đoạn overlay không trùng nhau hoàn toàn sẽ bị lỗi. Khi đó phải sửa bằng tay cái chỗ bị lỗi đó.

(defun gver ( e / enlist e2 enlist2)
 (setq enlist(entget e))
 (setq ptList(list))
 (setq e2 (entnext e)) 
 (setq enlist2 (entget e2))
 (while (not (equal (cdr(assoc 0 (entget(entnext e2))))"SEQEND"))
    (setq e2(entnext e2))
    (setq enlist2(entget e2))
    (if(/= 16 (cdr(assoc 70 enlist2)))
       (setq ptList(append ptList (list (cdr(assoc 10 enlist2)))))
    )
 ) 
 ptlist
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun chlst ( lst )
(setq lst2 (list))
(while (/= (cdr lst) nil)
        (setq lst2 (append lst2 (list (list (car lst) (cadr lst)))))
        (setq lst (cdr lst))
)
lst2
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:ovkpl (/ olcol ss ss1 en e1 plst plst1 pls1 pls2 i col ans )
(vl-load-com)
(command "undo" "be")
(setq olcol (getvar "cecolor"))
(setq ss (ssget (list (cons 0 "POLYLINE") (cons 8 "DONG MUC BANG DO")))
       ;;;;ssl (acet-ss-to-list ss)
       ;;;;n (sslength ss)
       ;;;i 0
)

(while (/= (sslength ss) 0) 
       (setq en (ssname ss 0))
       ;;;;(while (/= ss nil)
       (setq ss1 (ssdel en ss)
               plst (gver en)
               pls1 (chlst plst))
       (if (/= (sslength ss1) 0)
          (progn
              (setq i 0)
              (while (< i (sslength ss1))
              (setq e1 (ssname ss1 i))
              (setq col (cdr (assoc 62 (entget e1))))
              (setq plst1 (gver e1))
              (setq pls2 (chlst plst1))
              (setq ans nil)
              (if (or (equal plst plst1) (equal plst (reverse plst1)))
                  (command "erase" e1 "")
                  (foreach cp1 pls1
                              (foreach cp2 pls2
                                     (if (or (equal cp1 cp2) (equal cp1 (reverse cp2)))
                                        (progn                                          
                                        (setq plst1 (vl-remove (cadr cp2) (vl-remove (car cp2) plst1)))
                                        (setq ans T)
                                        )

                                     )
                              )
                  )                              
              ) 
              (if (= ans T)
              (progn 
              (setq ss1 (ssdel e1 ss1))            
              (command "erase" e1 "")
              ;;;;;(command "regenall")
              (setvar "cecolor" (rtos col 2 0))
              (command "pline"  )
              (foreach pt plst1 
                      (command pt) 
              ) 
              (command "")
              )
              )
              (setq i (1+ i))
              )
          )
       )
       (setq ss ss1)
       ;;;;;;;)

)
(setvar "cecolor" olcol)
(command "undo" "e")
(princ)
)

Có gì xin cứ phản hồi nhé. Mình viết cái này là dựa trên bản vẽ của bạn, nó chỉ xét các polyline trên lớp DONG MUC BANG DO. Kết quả trả về chỉ còn 1 phần là polyline còn phần kia là LWpolyline . Hơi khác với cái mẫu bạn gửi là tất cả đều là lwpolyline.

Trong cái mẫu bạn gửi, vẫn còn sót phần trùng đó.

Chúc bạn vui.

  • Vote tăng 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
daythung777    1

:rolleyes: , Kết quả giống như bạn đã nói, những đoạn khồng trùng nhau hoàn toàn, bị đẩy lên trên . Mình nắm kéo xuống được mà đau cần phải sửa lại,Nhưng những đoạn pline sát nhau nó lại dính lại với nhau, bạn xem lai giúp :D

 

Cảm ơn bạn rất nhiều !!

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

có ai biết về gis không,mình muốn tao 1 lisp như thế này.

- Khi mình kick vào 1 điểm đã có trên cad thì nó sẽ hiện ra thông tin của điểm đó như trong gis vậy

- thông tin hiện ra sẽ do ta nhập vào trước nên khi chi cần kick vào la nó sẽ hiện ra

Xin mọi ngườ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
phamthanhbinh    3.123

:rolleyes: , Kết quả giống như bạn đã nói, những đoạn khồng trùng nhau hoàn toàn, bị đẩy lên trên . Mình nắm kéo xuống được mà đau cần phải sửa lại,Nhưng những đoạn pline sát nhau nó lại dính lại với nhau, bạn xem lai giúp :D

 

Cảm ơn bạn rất nhiều !!

Hề hề hề,

Chưa hiểu bạn nói nó dính lại với nhau nghĩa là sao??? Bạn có thể gửi cái bản vẽ đó lên không. Có vậy mình mới biết đường để sửa bạn ạ...

Chúc bạn vui.

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
pfievxd    6

Hehe, tự nhiên rỗi rãi ngồi ngó lại đống collected lisp, tự nhiên thấy có 1 đoạn lạ lạ thế này : (_al-bind-alist '(OLDOS SS D1 D2 D3 D4 P1 G)) và (setq D1 Then OR Else), ớ ờ, cái này liệu có phải là 1 đoạn của cửu âm chân lisp ko ý nhỉ :D, có tiền bối nào sẵn lòng giải thích cho e vớ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
ketxu    2.649

giúp mình tạo 1 lisp dùng để lấy thư viện block 1 cách dễ dàng nhất,xin cám ơn!!!!!!!!!!!!

Bạn hãy sử dụng AdCenter và Tool Palettes, xin cám ơn!!!!!

  • Vote tăng 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
pfievxd    6

Bạn vui lòng post nguyên đoạn code lên :)

Hehe, em đang làm 1 cái lisp in ấn riêng, nhưng mà vướng ở chỗ in ấn với block khung tên, thế là decode cái mplot của bác Hoành tham khảo (hì, cả nhà đừng ném đá nha),thấy ở phần xác định kích thước block (?), với lại cũng nhìn thấy 1 câu hỏi của bác Phamngoctukts hỏi về cái lisp vatt của bác Tue_NV tương tự (tìm lại thì lại ko thấ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
phamngoctukts    708

Hehe, em đang làm 1 cái lisp in ấn riêng, nhưng mà vướng ở chỗ in ấn với block khung tên, thế là decode cái mplot của bác Hoành tham khảo (hì, cả nhà đừng ném đá nha),thấy ở phần xác định kích thước block (?), với lại cũng nhìn thấy 1 câu hỏi của bác Phamngoctukts hỏi về cái lisp vatt của bác Tue_NV tương tự (tìm lại thì lại ko thấy)

Mấy cái loằng ngoằng đó là do thằng Decombile nó đẻ ra đấ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
dtvhtc    0

nhờ các bạn trên diễn đàn viết giúp em lisp này. em có file cad chứa các point và số hiệu của point em muốn xuất toạ độ x,y có z cũng được không có cũng được của point cùng với số hiệu của point sang exel hoặc file text. sau khi xuất ra có 4 cột bắt đầu từ số hiệu point tới y,x,z.Em đã seach trên diễn đàn rồi nhưng em không tìm được lisp như mong muốn.Mong được các bạn giúp đỡ.

http://www.cadviet.com/upfiles/3/toado.rar

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    3.123

nhờ các bạn trên diễn đàn viết giúp em lisp này. em có file cad chứa các point và số hiệu của point em muốn xuất toạ độ x,y có z cũng được không có cũng được của point cùng với số hiệu của point sang exel hoặc file text. sau khi xuất ra có 4 cột bắt đầu từ số hiệu point tới y,x,z.Em đã seach trên diễn đàn rồi nhưng em không tìm được lisp như mong muốn.Mong được các bạn giúp đỡ.

http://www.cadviet.com/upfiles/3/toado.rar

Hề hề hề,

Bạn nói khó tin quá. Vậy bạn đã tìm được cái gí và nó không phù hợp ở chỗ nào????

Theo mình biết thì trên diễn đàn có hàng lô xich xông các lisp tương tự yêu cầu của bạn. Bạn chỉ cần download về và dùng thử. Chỗ nào chưa phù hợp thì post lên mọi người sẽ giúp.

Chứ còn nói phóng sinh kiểu này thì hơi khó đấy. Ai cũng sợ viết xong bạn lại bảo là chả đúng với yêu cầu 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
dtvhtc    0

Hề hề hề,

Bạn nói khó tin quá. Vậy bạn đã tìm được cái gí và nó không phù hợp ở chỗ nào????

Theo mình biết thì trên diễn đàn có hàng lô xich xông các lisp tương tự yêu cầu của bạn. Bạn chỉ cần download về và dùng thử. Chỗ nào chưa phù hợp thì post lên mọi người sẽ giúp.

Chứ còn nói phóng sinh kiểu này thì hơi khó đấy. Ai cũng sợ viết xong bạn lại bảo là chả đúng với yêu cầu bạn ạ....

Chào anh phamthanhbinh cám ơn anh đã quan tâm. em seach trên diễn đàn được lisp xuất tọa độ ra file text, nhưng chỉ xuất được tọa độ x,y,x của point thôi còn số hiệu của point thì không xuất được, nhờ anh và mọi người xem giúp em chỉnh sửa lisp thêm được cột số hiệu điểm em cám ơn nhiều. file lisp và file cad dùng để xuất tọa độ của em đây http://www.cadviet.com/upfiles/3/toado_1.rar

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    3.123

Chào anh phamthanhbinh cám ơn anh đã quan tâm. em seach trên diễn đàn được lisp xuất tọa độ ra file text, nhưng chỉ xuất được tọa độ x,y,x của point thôi còn số hiệu của point thì không xuất được, nhờ anh và mọi người xem giúp em chỉnh sửa lisp thêm được cột số hiệu điểm em cám ơn nhiều. file lisp và file cad dùng để xuất tọa độ của em đây http://www.cadviet.com/upfiles/3/toado_1.rar

Hề hề hề,

Thứ nhất là bạn chả gửi cái file lisp nào cả nên chả biết sửa cái chi.

Thứ hai là cái file txt bạn gửi thì thấy cao độ z toàn bằng 0 cả.

Thứ ba là trong file cad, phải chăng các text số đều là các số hiệu của điểm mà bạn cần lấy để bổ sung vào cái file txt của bạn và bạn muốn bổ sung nó vào vị trí nào, cột đầu tiên hay cột cuối cùng hay là nhét đại nó vào đâu cũng được??????

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×