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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

Dựa vào cái kiểm soát vòng lặp mà anh đưa lần trước đó.

(setq loop T)
(while loop
	(setq Pnt (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m : "))
  	(cond
	  (T
		(if Pnt
		  (progn
		    	

		    	
		  )
		  (setq loop nil)
		)
	  )
	)
  	
  	
)

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

Nếu thế anh đâu cần phải vẽ Pline. Quét 1 loạt là anh tóm dc nó ngay mà.

Mục đích là cho nó chạy theo thứ tự.

Đừng tạo mắt lưới trên Model, như thế nó sẽ bị đè bởi các đối tượng khác.

Khi tạo ra mắt lưới thì ném nó vào 1 Wblock và gắn cho nó 1 cái tên.

Khi mình chèn sẽ chèn trong Layout và theo thứ tự từng khung.

Mặt khác, khi in mình cũng có thể kiểm soát được in cái nào trước cái nào sau.

Còn cái quét thì nó sẽ ngẫu nhiên. Khó kiểm soát.

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

Chào các bạn. Nếu các bạn biết về vđ này xin hướng dẫn giúp.

Trên cad có đối tượng MPOLYGON được tạo tư cadmap (vẫn đọc được trẹn cad thường), trên bảng properires nó có thuộc tính total area nhưng làm các nào đẻ truy xuất nó bằng lisp.http://www.cadviet.com/upfiles/3/37170_hcadviet.dwg

Xin cám ơn các 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

Nhìn danh tiếng và chức vụ là biết ngay, k lẫn được đâu.Cũng có người tạo nick ketxu ở các diễn đàn khác rao bán lisp :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

Nhìn danh tiếng và chức vụ là biết ngay, k lẫn được đâu.Cũng có người tạo nick ketxu ở các diễn đàn khác rao bán lisp :D

chà, căng nhỉ, danh tiếng và chức vụ của mình dễ làm giả lắm, sáng mai thức dậy có thêm 1 nick namsovo thì............ :ph34r:

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

Dùng (vla-get-area (vlax-ename->vla-object (car (entsel))))

Đúng rồi cám ơn bạn. Hình như hàm này các bạn đã có lần chỉ cho mình rồi nhưng dùng với Hatch phức tạp thì chạy chậm  nên mình quên mất. 

Các bạn cho mình hỏi thêm tý, khi đối tượng có màu (mã 62 giống nhau) nhưng ở dạng 3 màu  (RGB) nó lại khác, vậy làm thê nào nhận dạng hay loc chúng ra đc.

Cám ơn các 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

Đúng rồi cám ơn bạn. Hình như hàm này các bạn đã có lần chỉ cho mình rồi nhưng dùng với Hatch phức tạp thì chạy chậm  nên mình quên mất. 

Các bạn cho mình hỏi thêm tý, khi đối tượng có màu (mã 62 giống nhau) nhưng ở dạng 3 màu  (RGB) nó lại khác, vậy làm thê nào nhận dạng hay loc chúng ra đc.

Cám ơn các bạn

Cái này bữa trước bạn hỏi và tôi đã trả lời cho bạn rồi mà!

http://www.cadviet.com/forum/topic/47301-da-xong-lisp-thong-ke-dien-tich-hatch-theo-layer/page-4

  • 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

Xin lỗi và cám ơn bạn, có lẽ mình chờ hồi lâu kg thấy sau đó bận quá rồi đãng trí quên mất. Nhưng không hiểu sao nó vẫn chưa chạy được bạn ạ. Code nó đây

-------------------------

(defun ColRGB(r g b)
 (ssget (list (cons 420 (+ (lsh (fix r) 16) (lsh (fix g) 8) (fix b))))))
---------------------------

Mình thử nó chưa được:

------------------------------

Command: (ColRGB 180 255 255)

Select objects: all
0 found

Select objects:
nil

------------------------------

bạn xem lại giúp mình nhé.

Cho mình hỏi thêm, làm thế nào khi mình chọn trên bản vẽ 1 đối tượng dạng này nó sẽ trả vế tất cả các đối tượng như vậy trên bản vẽ. Cám ơn 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

Xin lỗi và cám ơn bạn, có lẽ mình chờ hồi lâu kg thấy sau đó bận quá rồi đãng trí quên mất. Nhưng không hiểu sao nó vẫn chưa chạy được bạn ạ. Code nó đây

-------------------------

(defun ColRGB(r g B)

 (ssget (list (cons 420 (+ (lsh (fix r) 16) (lsh (fix g) 8) (fix B))))))

---------------------------

Mình thử nó chưa được:

------------------------------

Command: (ColRGB 180 255 255)

 

Select objects: all

0 found

 

Select objects:

nil

------------------------------

bạn xem lại giúp mình nhé.

Cho mình hỏi thêm, làm thế nào khi mình chọn trên bản vẽ 1 đối tượng dạng này nó sẽ trả vế tất cả các đối tượng như vậy trên bản vẽ. Cám ơn bạn

Bạn cho mình coi file đó tí. Mình đã test trên bản vẽ của mình OK mà.

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

file mình đã up ở mục #2055 đó bạn

Mình xem lại rồi, nó đúng khi đó là thuộc tính "color", còn file mình up lại là thuộc tính "pattern fill color" bạn ạ. Bạn xem có thể giải quyết được kg giúp mình nhé.

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ác đối tượng khác thì nó có DXF là 420. Mình test trên nó >> OK.

Với đối tượng MPOLYGON thì DXF là 421 >> Bạn sửa 420 thành 421 là OK.

  • 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

- mấy anh ơi trợ giúp nhoc bài toán này với ^^, nhoc đang tính nâng cấp cái lsp nhoc lên mà chưa nghĩ ra giải thuật ngắn gọn ^^, nó có nhiều trường hợp lắc léo, nhoc test chắc hơn chục trường hợp , gặp cái nào nhoc thêm đk cái đó riết cái lsp dài lê thê mà vẫn chưa thỏa đc.

-  nhoc có 1 danh sách các khoảng cách mắt lưới như sau 10-25-50-100-200-250-500, hàm làm tròn của nhoc có 1 tham số tương đương với khoảng cách mắt lưới.

- sơ khai lsp dựa vào kich thước khung, rùi nhoc đặt đk từ lớn đến nhỏ khoảng cách lưới, thằng nào thỏa trước sẽ làm thằng đó, nhưng cái dở ở đây, với khung to, mắt lưới tạo ra quá dày nhìn bị rối.

- nhoc dựa vào biến tỉ lệ để quyết định hệ số làm tròn là bao nhiêu, tuy nhiên với tỉ lệ nhỏ, mà khung quá to khoảng cách mắt lưới nhỏ, nhìn dày quá ^^

- ý định của nhoc là ko cần dựa vào tỉ lệ nhập nữa mà dựa vào kích thước khung để quyết định khoảng cách mắt lưới, tỉ lệ chỉ quyết định chiều cao tẽt và kick thước mắt lưới

- VD: tỉ lệ 500, mà khung tới 700 chẳng hạn, nhoc muốn nó duyệt từ từ lấy 700 chia cho từng đơn vị mắt lưới ở trên từ lớn đến nhỏ, để ra số lần lặp, tối thiểu phải có 2 mắt trục x và 2 mắt trục y, lớn nhất chỉ 3 mắt, còn ra ngoài 2 đk đó thì nó duyệt thằng khác,chừng nào thỏa thì sẽ trả về đơn vị mắt lưới cần tạo và hệ số làm tròn tương ứng, như Vd nhoc ở đây thì 700/200 là đẹp ^^ số làn lặp sẽ là 3.

;hàm tao textstyle
(defun emk_style (MyStyle MyFont)
(entmake (list    (cons 0 "STYLE")    
(cons 100 "AcDbSymbolTableRecord")    
(cons 100 "AcDbTextStyleTableRecord")    
(cons 2 MyStyle)    (cons 3  MyFont)    
(cons 70 0))))
;;;;
(defun MakeLine (PT1 PT2 Layer Linetype LTScale xdata)
	(entmakex (list '(0 . "LINE")
	(cons 8 (if Layer Layer (getvar "Clayer")))
	(cons 6 (if Linetype Linetype "bylayer"))
	(cons 48 (if LTScale LTScale 1))
	(cons 10 PT1)	(cons 11 PT2)
	(cons -3 (if xdata (list xdata) nil))))) 
;;;;;;--------------------------------------------------------------------------------------------
;================================================================================================
(defun dtr (a)
(* (/ a 180.0) pi)
)
(prompt "LISP TAO LUOI TOA DO BAN DO VI TRI, LENH : KKL")
;;;
(defun c:kkl (/ donvi nx ny pt1 pt2 kcx kcy goc1 goc2 x1 x y  heso old ptext1 ptext2 ptext3 ptext4 str str2 goc3 htext num lstp obj ss ss1 ten pt3 pt4 tronx trony kk)
(vl-load-com)
(setq old (getvar "osmode"))
(if (null (tblsearch "STYLE" "vusaln"))
    (emk_style "vusaln" "Vaptimn.TTF"))
(if (null (tblsearch "LAYER" "A1-luoik"))
    (_layer2 "A1-luoik" 7))
  (setq tyleVT (getvalue tyleVT 1000.0 "Nhap ty le ban do VT: "))
  (princ "\n")
  (setq heso (/ 1000 tyleVT))
  (setq htext (/ 2.0 heso))
  (setq kk (/ tyleVT 20))
(prompt "Chon Khung chay luoi, luu y khung chon phai la polyline:")
;==================================================================
(while (/= (setq ss (ssget "+.:E:S" '((0 . "LWPOLYLINE")))) nil)
;===================================*******************++++++++++++++++++++********************===================================  
(progn
(setvar "osmode" 0)
;======================================================================
(setq obj (vlax-ename->vla-object (ssname ss 0)))
(setq lstp (vla-getBoundingBox obj 'minp 'maxp))
(setq pt1 (vlax-safearray->list minp))
(setq pt2 (vlax-safearray->list maxp))
(setq pt3 (inters pt1 (polar pt1 (/ pi 2) 90000) pt2 (polar pt2 pi 90000) nil))
(setq pt4 (inters pt1 (polar pt1 0 90000) pt2 (polar pt2 (dtr 270) 90000) nil))
;=======================================================================
(setq kcx (- (car pt2) (car pt1)) kcy (- (cadr pt2) (cadr pt1)))
;===============================================================================================
(cond        ((and (= tyleVT 500.0) (> kcx 150) (>= (/ kcy 50) 1.8))
			 (setq donvi 50) (setq kk 50))
			 ((and (= tyleVT 4000.0) (> kcx 1270) (>= (/ kcy 400) 1.8))
			 (setq donvi 400) (setq kk 400))
			 ((and (= tyleVT 5000.0) (> kcx 1590) (>= (/ kcy 500) 1.8))
			 (setq donvi 500) (setq kk 500))
             ((and (>= (/ kcx 250) 1.8) (>= (/ kcy 250) 1.8) (> kcx 650))
             (setq donvi 250))
             ((and (>= (/ kcx 200) 2) (>= (/ kcy 200) 1.8) (> kcx 410))
             (setq donvi 200))
            ((and (>= (/ kcx 100) 1.8) (>= (/ kcy 100) 1.8) (> kcx 250))
             (setq donvi 100))
		    ((and (>= (/ kcx 50) 1.8) (>= (/ kcy 50) 1.8) (> kcx 125))
             (setq donvi 50))
            ((and (>= (/ kcx 25) 1.8) (>= (/ kcy 25) 1.8) (> kcx 62.5))
             (setq donvi 25))
			 ((and (>= (/ kcx 10) 1.8) (>= (/ kcy 10) 1.8) (> kcx 25.5))
             (setq donvi 10))
            )
(if donvi
     (progn
    (cond
        ((> donvi 250) (setq tronx (lamtron (fix (+ (car pt1) 100)) kk)) (setq trony (lamtron (fix (+ (cadr pt1) 100)) kk)))
	    ((> donvi 10) (setq tronx (lamtron (fix (+ (car pt1) 10)) kk)) (setq trony (lamtron (fix (+ (cadr pt1) 10)) kk)))
	    ((<= donvi 10) (setq tronx (lamtron (fix (car pt1)) kk)) (setq trony (lamtron (fix (cadr pt1)) kk)))
    )	   
;==============================================================================================
(cond  
        ((> (- (+ tronx (* donvi (- (fix (/ kcx donvi)) 1))) (car pt1)) kcx) (setq nx (- (fix (/ kcx donvi)) 1)))
		((and (< (- (+ tronx (* donvi (- (fix (/ kcx donvi)) 1))) (car pt1)) kcx) (> (- (- (car pt4) (/ 10 heso)) (+ tronx (* donvi (- (fix (/ kcx donvi)) 1)))) donvi)) (setq nx (1+ (fix (/ kcx donvi)))))
		((< (- (+ tronx (* donvi (- (fix (/ kcx donvi)) 1))) (car pt1)) kcx) (setq nx (fix (/ kcx donvi))))
)
(cond  
         ((> (- (+ trony (* donvi (- (fix (/ kcy donvi)) 1))) (cadr pt1)) kcy) (setq ny (- (fix (/ kcy donvi)) 1)))
		 ((and (< (- (+ trony (* donvi (- (fix (/ kcy donvi)) 1))) (cadr pt1)) kcy) (> (- (- (cadr pt3) (/ 5 heso)) (+ trony (* donvi (- (fix (/ kcy donvi)) 1)))) donvi)) (setq ny (1+ (fix (/ kcy donvi)))))
		 ((< (- (+ trony (* donvi (- (fix (/ kcy donvi)) 1))) (cadr pt1)) kcy) (setq ny (fix (/ kcy donvi))))
)
;==============================================================================================
 (setq goc2 (list tronx (cadr pt1) 0.0))
(setq goc3 (list (car pt1) trony 0.0))
;===============================================================
(repeat nx

(makeline goc2 (polar goc2 (/ pi 2) (/ 8.0 heso)) "A1-luoik" nil nil nil)
;=======================================================================
(setq ptext1 (polar goc2 (dtr 23) (/ 3.5 heso)))
(setq ptext2 (polar goc2 (dtr 158) (/ 3.5 heso)))
(setq num (fix (car goc2)))
(setq str (them0 (itoa (rem num 1000))))
(setq str2 (itoa (/ num 1000)))
(mktext ptext1 htext str "M" "A1-luoik" "vusaln" nil)
(mktext ptext2 htext str2 "M" "A1-luoik" "vusaln" nil)
;=======================================================================
(setq goc2 (mapcar '+ goc2 (list donvi 0.0 0.0)))
) ;end repeat nx
;============================================================
(repeat ny
(makeline goc3 (polar goc3 0 (/ 8.0 heso)) "A1-luoik" nil nil nil)
;=====================================================================
(setq ptext3 (polar goc3 (dtr 23) (/ 4.0 heso)))
(setq ptext4 (polar goc3 (dtr 338) (/ 4.0 heso)))
(setq num (fix (cadr goc3)))
(setq str (them0 (itoa (rem num 1000))))
(setq str2 (itoa (/ num 1000)))
(mktext ptext3 htext str2 "M" "A1-luoik" "vusaln" nil)
(mktext ptext4 htext str "M" "A1-luoik" "vusaln" nil)
;============================================================= 
(setq goc3 (mapcar '+ goc3 (list 0.0 donvi 0.0)))
); end repeat ny
;============================================================
(setq goc1 (list tronx trony 0.0))
;============================================================================================ 
 (setq x (car goc1))
  (repeat nx
    (setq y (cadr goc1))
    (repeat ny
      
	  (vediem x y (/ 2.5 heso))
      (setq y (+ y donvi))
    )
;===============================================================================================
    (setq x (+ x donvi))
  )
 ;==============================================================================================
 ) ;end progn donvi
   (alert "Ban chon Khung KiBo qua\nChon Khung Lai Hen!!!^^") ; end nho hon 25
) ; end if don vi
;==============================================================================
) ; end progn while

) ; end while
(prompt "Ban co mun xoa luoi vua tao, co thi quet chon enter, khong thi enter bo qua")
(setq ss1 (ssget '((0 . "LINE,TEXT") (8 . "A1-luoik"))))
(if ss1
 (progn
   (repeat (sslength ss1)
	 (setq ten (ssname ss1 0))
	 (entdel ten)
	 (ssdel ten ss1)
	 )
  )
 )
(setvar "osmode" old)
(princ)
)
;============================================================================================
(defun c:kxoa()
(prompt "Chon luoi vua tao mun xoa")
(ssget '((0 . "LINE,TEXT") (8 . "A1-luoik")))
(vl-cmdf ".erase" "P" "")
(princ)
)
;==============================================================================================
;;;;;;;;;;;;;;;;;;;
(defun lamtron (n k / sodu)
  (setq sodu (rem n k))
  (if (/= sodu 0)
    (setq n (+ (- n sodu) k))
  )
  n
)
;=================================
(defun vediem (xx yy r / left right top bot)
  (setq top (+ yy r))
  (setq bot (- yy r))
  (setq right (+ xx r))
  (setq left (- xx r))
  (makeline (list left yy) (list right yy) "A1-luoik" nil nil nil)
  (makeline (list xx top) (list xx bot) "A1-luoik" nil nil nil)
)
;============================
;=================================================================================
(defun _layer2 ( name colour )
    (if (null (tblsearch "LAYER" name))
        (entmake
            (list
               '(0 . "LAYER")
               '(100 . "AcDbSymbolTableRecord")
               '(100 . "AcDbLayerTableRecord")
               '(70 . 0)
                (cons 2 name)
                (cons 62 colour)
            )
        )
    )
)
;=====================================================================================
; ham luu gia tri
(defun getvalue ( a giatri dongnhac / astr) 
(or a (setq a giatri))
(cond
	((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
	((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 0) ") :")))(a))))
	((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring T (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
))
;;;;
;ham tao text 2
(defun mktext (point height string justify layer textstyle mau / lst)
(setq lst (list '(0 . "TEXT")
                              (cons 10 point)
							  (cons 40 height)
							  (cons 1 string)
							  (cons 8 layer)
							  (cons 7 (if textstyle textstyle (getvar "textstyle")))
							  (cons 62 (if mau mau 256))
							  
			)
			justify (strcase justify))
		(cond   ((= justify "L") (setq Lst (append Lst (list (cons 72 0) (cons 11 point)))))
		        ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))
				((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))
				((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))
				)
	(entmakex Lst)
  );end mktext
;--------------------------------------
(defun them0(chuoi)
  (setq len (strlen chuoi))
  (if (= len 1)
    (strcat "00" chuoi)
    (if (= len 2)
      (strcat "0" chuoi)
      chuoi
    )  
  )
 )

- Mong đc các anh giúp đở ^^

- P/s: nhoc ko giỏi trình bày có gì các anh bỏ quá cho ^^

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

Cho mình hỏi: Làm thế nào để biết chế độ bắt điểm đang ở trạng thái OFF hoặc không có chế độ bắt điểm nào?

Lấy (setq osm (getvar "osmode"))

Nếu:

osm >= 16384: OFF

osm = 0 hoặc osm = 16384: không có chế độ nào.

  • 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

Lấy (setq osm (getvar "osmode"))

Nếu:

osm >= 16384: OFF

osm = 0 hoặc osm = 16384: không có chế độ nào.

 

Trường hợp: OSM = 1024 : OFF

Trường hợp: OSM = 1024 : không có chế độ nào bác ạ!

 

osnap : (/= 16384 (logand 16384 (getvar "osmode"))) 

 

Chắc là chưa đủ hè!

(setvar "osmode" 1024)

OSNAP đã tắt rồi nhưng mã code của Ket là T -> TH sai

  • 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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×