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

Hướng dẫn lập trình Lisp

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

Nhưng em muốn đưa một giá trị từ một biến a vào trong cái record, nó cứ báo lỗi bad DXF group miết à.

Cụ thể là em là em viết đoạn lisp này k biết sai ở chỗ mô:

(setq ES (entsel) LIST (entget (car ES)) LIST (subst '(1 . a) '(1 . "") LIST))

Có cách gì để đưa biến vào trong record khô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

Nhưng em muốn đưa một giá trị từ một biến a vào trong cái record, nó cứ báo lỗi bad DXF group miết à.

Cụ thể là em là em viết đoạn lisp này k biết sai ở chỗ mô:

(setq ES (entsel) LIST (entget (car ES)) LIST (subst '(1 . a) '(1 . "") LIST))

Có cách gì để đưa biến vào trong record không ạ.

Bạn không thể viết '(1 . a) mà bạn phải viết (cons 1 a), giải thích hơi khó hiểu tí nhưng dần bạn sẽ hiểu.

  • 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ình đã dùng hàm (cons 1 a). Mình đã hiểu. Cái a phải là chuỗi. Mình chuyển nó sang chuỗi thì nó đã nhận. Cảm ơn bạn.

Cảm giác viết xong 1 cái Lisp thật là phê :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

Cho em hỏi làm sao để thêm 1 list vào 1 list phức hợp có sẵn ạ. Tìm hoài có cái add_list mà hình như không phả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

Cho em hỏi:

      Em có một dotted pair như sau: (0 . "LINE")

      Tại sao dùng hàm cdr thì nó trả về "LINE" (đáng nhẽ là: ("LINE") chứ)

      Còn dùng hàm cadr thì nó báo lỗi bad argument type: consp "LINE" (đáng nhẽ trả về : "LINE" chứ)

Rất mong được các anh giải đá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

Cho em hỏi:

      Em có một dotted pair như sau: (0 . "LINE")

      Tại sao dùng hàm cdr thì nó trả về "LINE" (đáng nhẽ là: ("LINE") chứ)

      Còn dùng hàm cadr thì nó báo lỗi bad argument type: consp "LINE" (đáng nhẽ trả về : "LINE" chứ)

Rất mong được các anh giải đáp.

Dotted pair là 1 kiểu list đặc biệt nên nó thế  :lol:

Lý luận "đáng lẽ phải thế này thế nọ" của bạn cũng không đúng, vì trong dotted pair còn có dấu chấm (.) chứ không phải chỉ là '(0 "LINE").

Vì đặc biệt nên thậm chí (length '(0 . "LINE")) >> error, trong khi (length '(0 "LINE") >> 2

  • 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

Em muốn lấy diện tích của 1 pline kín. Sao trong danh sách record của nó không có nhỉ.

Các anh giúp em 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

Làm phiền anh nói rõ tên đầy đủ được không ạ. Em mới học Lisp tập tõm thôi.

Cảm ơn anh

  • Vote giảm 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

Ví dụ:

(vla-get-area (vlax-ename->vla-object (car (entsel "\nChon doi tuong de lay dien tich: "))))

Anh Hà có tài liệu học lisp của các hàm trên không, em có 2 tập tự học auto Lisp nhưng không thể tìm ra các hàm trên. Mong anh chỉ giáo và chia sẻ. Em cảm ơ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
Chào anh SSG

Trước tiên em đã dùng thử vl-string-translate, và viết được 2 cái lisp sau

1. Lisp chuyển ABC thành 123

.......................

 

2. Lisp chuyển ABC tiếng Anh thành ABC tiếng Nhật.

 

(defun c:hk ( / e d nd td )
;;; (setq chuoi_tim (getstring t "Enter string to search for: ")
;;; chuoi_thaythe (getstring t "Enter string to replace with: "))
(setq chuoi_tim "A"
chuoi_thaythe "A")
(setq e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-subst chuoi_thaythe chuoi_tim nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

bạn ơi cho hỏi đoạn code trên nếu bổ sung thêm ký tự ''B'' , ''C'' ...,''X'',.. vào chuoi_tim và chuoi_thaythe nữa được không cho mình xin với, cảm ơn 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

Chào bạn Tuanthietkedien

Mình đã cài rồi mà tại sao cái chữ CAD-2008 Tiếng Nhật vẫn không hiện được

chữ CAD-2008 tiếng Nhật nó ra như cũ thế này : \M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257

và theo mình suy luận như trên :

Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)

Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)

Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)

Không hiểu sao chữ Nhật nó không hiện. Và mình đã viết đoạn Lisp này và đã chạy thành công.

Bạn thử xem nhé :


 

bạn có lisp chuyển ngược từ kiểu gỏ tiếng Nhật sang tiếng Anh ko cho mình xin với, cảm ơn 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

Nhờ bác nào viết giùm em cái lisp như thế này được không ạ.
em đang ghi text độ dài cho các đoạn ống, mà em đang thủ công dim rồi tạo text ghi nên lâu ạ.
Cụ thể em cần lisp như thế này:

Lệnh - chọn điểm đầu "cách" chọn điểm cuối "cách"  Nhập tiền tố "cách" Nhập hậu tố "cách" chọn điểm đầu, cuối làm chân text sẽ ra text cầ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

Tại sao bạn không tạo Dimstyle tắt Extension và Dimension Line (supress), tiền tố hậu tố như bạn muốn rồi Dim ?

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 Bác cho em hỏi, em có 2 cái lisp đo chiều dài ghi đè lên text. Một cái đo đường line với 1 cái đo đường ML. không hiểu sao cái đo đường ML nó lại làm nhảy vị trí của text khi sửa nó. Bác nào chỉ hộ em được không ạ.http://www.cadviet.com/upfiles/7/147967_do_ml_co_san_d_l.lsphttp://www.cadviet.com/upfiles/7/147967_do_line_nhap_tien_to.lsp

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
Vào lúc 26/12/2007 tại 08:58, ssg đã nói:

Tự tay mình lập một chương trình Lisp có gì khác so với nhờ ai đó làm? Chưa cần xét kết quả, điểm khác nhau rất cơ bản là bạn sẽ có được cái cảm giác rất là khoái chí (không thể diễn tả) khi chạy thử chương trình.

Ssg lập topic này không ngoài mục đích tạo điều kiện cho các bạn tự mình tìm hiểu và khám phá cái cảm giác "khoái chí không thể diễn tả" nói trên.

Với tinh thần "Share is Receive", ssg cũng mong các bạn đã thành thạo Lisp quan tâm giúp đỡ các bạn mới để cộng đồng Lisp của CadViet ngày càng đông vui và tạo được nhiều chương trình hữu ích.

Để bắt đầu, ssg post lại một bài viết cũ, nhưng có lẽ vẫn còn mới đối với một số bạn. Hy vọng sẽ giúp được chút gì đó cho các bạn mới tiếp cận với Lisp:

 

http://www.cadviet.com/upfiles/Relax_1.zip

 

Download, giải nén rồi đọc file *.doc

Hic hic có ai giúp em với link die mất rồi.
Em đang trang thủ dịp nghỉ tết để mò về LISP mà giờ ko download được nữa.

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
34 phút trước, CuongXD7 đã nói:

Hic hic có ai giúp em với link die mất rồi.
Em đang trang thủ dịp nghỉ tết để mò về LISP mà giờ ko download được nữa.

Bạn ngâm kỹ xong 2 cuốn này thì hết tết rồi

https://drive.google.com/open?id=0B9xaw3zFWKm1d2FMdVNXcUFJNHc

https://drive.google.com/open?id=0B9xaw3zFWKm1MGlYWlVQRzhJTjQ

  • Like 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

Chào các A chị trong diễn đàn . nay em mới tập tọe học mót định làm 1 cái lisp như hình bên dưới . nhưng đến bước tạo 1 pl...ngắn với góc xoay khoảng 45d và tự động oset ra mà ko biết viết thế nào . nhờ các ac giúp đỡ cho ý tưởng với ạ , đây là đoạn đầu em đã làm ạ. em mới học có gì các anh bỏ qua ạ

(defun C:Vc()
(command "-layer" "lo" "*" "")
(princ)
)
(setq a (getpoint "Chon diem dau: "))
(setq b (getpoint "Chon diem: "))
(command ".line" a b ""))

 

11.jpg

Chỉnh sửa theo lethanh2004
do chưa đủ

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

Đây là chương trình vẽ cầu

(defun C:VC (/ HUONGCAU KC LINE1 LINE2 MIDP12 MP1 MP2 OBJPL1 OBJPL2 P1 P2 P3 P4 P5)
;;;;VE CAU
  (MakeLayer_ "4_Giaothong_CAU" 7)
  (or *WidthPline* (setq *WidthPline* 0.50))
  (setq
    WidthPline
     (getreal
       (strcat "\nNh\U+1EADp \U+0111\U+1ED9 d\U+00E0y Width c\U+1EA7u   <"
	       (rtos *WidthPline* 2 2)
	       ">: "
       )
     )
  )
  (if (not WidthPline)
    (setq WidthPline *WidthPline*)
    (setq *WidthPline* WidthPline)
  )
  (or *Rau* (setq *Rau* 2.0))
  (setq
    Rau	(getdist
	  (strcat "\nNh\U+1EADp chi\U+1EC1u d\U+00E0i r\U+00E2u   <"
		  (rtos *Rau* 2 2)
		  ">: "
	  )
	)
  )
  (if (not Rau)
    (setq Rau *Rau*)
    (setq *Rau* Rau)
  )
  (setq P1 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 nh\U+1EA5t: "))
  (setq P2 (getpoint P1 "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 hai: "))
  (setq	P3 (getpoint
	     "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 3 t\U+00EDnh \U+0111\U+1ED9 r\U+1ED9ng c\U+1EA7u: "
	   )
  )
  (setq HuongCau (CCW P1 P2 P3))
  (setq MidP12 (mid P1 P2))
  (MakeLine P1 P2 nil nil "4_Giaothong_CAU" nil nil)
  (setq Line1 (entlast))
  (setq	KC (distance P3
		     (vlax-curve-getClosestPointTo (vlax-ename->vla-object Line1) (trans P3 1 0))
	   )
  )
  (cond	((= HuongCau 1)
	 (Progn
	   (setq P4 (Polar P1 (+ (angle P1 P2) (/ (* 3 Pi) 4)) Rau))
	   (setq P5 (Polar P2 (+ (angle P1 P2) (/ Pi 4)) Rau))
	   (MakeLWPolyline (list P4 P1 P2 P5) nil nil nil "4_Giaothong_CAU" nil nil)
	   (setq ObjPl1 (entlast))
	   (setq Mp1 (Polar P1 (+ (angle P1 P2) (/ (* 3 Pi) 2)) (/ KC 2)))
	   (setq Mp2 (Polar P2 (+ (angle P1 P2) (/ (* 3 Pi) 2)) (/ KC 2)))
	   (MakeLine Mp1 Mp2 nil nil "4_Giaothong_CAU" nil nil)
	   (setq Line2 (entlast))
	 )
	)
	((= HuongCau -1)
	 (Progn
	   (setq P4 (Polar P1 (+ (angle P2 P1) (/ Pi 4)) Rau))
	   (setq P5 (Polar P2 (+ (angle P2 P1) (/ (* 3 Pi) 4)) Rau))
	   (MakeLWPolyline (list P4 P1 P2 P5) nil nil nil "4_Giaothong_CAU" nil nil)
	   (setq ObjPl1 (entlast))
	   (setq Mp1 (Polar P1 (+ (angle P2 P1) (/ (* 3 Pi) 2)) (/ KC 2)))
	   (setq Mp2 (Polar P2 (+ (angle P2 P1) (/ (* 3 Pi) 2)) (/ KC 2)))
	 )
	)
  )
  (vla-mirror
    (vlax-ename->vla-object ObjPl1)
    (vlax-3D-point Mp1)
    (vlax-3D-point Mp2)
  )
  (setq ObjPl2 (entlast))
  (vla-put-constantwidth (vlax-ename->vla-object ObjPl1) WidthPline)
  (vla-put-constantwidth (vlax-ename->vla-object ObjPl2) WidthPline)
  (entdel Line1)
  (entdel Line2)
  (Princ)
)

(defun C:VCC (/ HUONGCAU KC LINE1 LINE2 MIDP12 MP1 MP2 OBJPL1 OBJPL2 P1 P2 P3 P4 P5)
;;;;VE CONG
  (MakeLayer_ "4_Giaothong_CAU" 7)
  (or *WidthPline* (setq *WidthPline* 0.50))
  (setq
    WidthPline
     (getreal
       (strcat "\nNh\U+1EADp \U+0111\U+1ED9 d\U+00E0y Width c\U+1EA7u   <"
	       (rtos *WidthPline* 2 2)
	       ">: "
       )
     )
  )
  (if (not WidthPline)
    (setq WidthPline *WidthPline*)
    (setq *WidthPline* WidthPline)
  )
  (or *Rau* (setq *Rau* 0.5))
  (setq
    Rau	(getdist
	  (strcat "\nNh\U+1EADp chi\U+1EC1u d\U+00E0i r\U+00E2u   <"
		  (rtos *Rau* 2 2)
		  ">: "
	  )
	)
  )
  (if (not Rau)
    (setq Rau *Rau*)
    (setq *Rau* Rau)
  )
  (if (> Rau 0.5)
    (setq Rau 0.5)
  )
  (setq P1 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 nh\U+1EA5t: "))
  (setq P2 (getpoint P1 "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 hai: "))
  
  (setq HuongCau (CCW P1 P2 P2))
  (setq MidP12 (mid P1 P2))
  (MakeLine P1 P2 nil nil "4_Giaothong_CAU" nil nil)
  (setq Line1 (entlast))
  (setq	KC (distance P2
		     (vlax-curve-getClosestPointTo (vlax-ename->vla-object Line1) (trans P2 1 0))
	   )
  )
  (cond	((= HuongCau 1)
	 (Progn
	   (setq P4 (Polar P1 (+ (angle P1 P2) (/ (* 3 Pi) 4)) Rau))
	   (setq P5 (Polar P2 (+ (angle P1 P2) (/ Pi 4)) Rau))
	   (MakeLWPolyline (list P4 P1 P2 P5) nil nil nil "4_Giaothong_CAU" nil nil)
	   (setq ObjPl1 (entlast))
	   (setq Mp1 (Polar P1 (+ (angle P1 P2) (/ (* 3 Pi) 2)) (/ KC 2)))
	   (setq Mp2 (Polar P2 (+ (angle P1 P2) (/ (* 3 Pi) 2)) (/ KC 2)))
	   (MakeLine Mp1 Mp2 nil nil "4_Giaothong_CAU" nil nil)
	   (setq Line2 (entlast))
	 )
	)
	((= HuongCau -1)
	 (Progn
	   (setq P4 (Polar P1 (+ (angle P2 P1) (/ Pi 4)) Rau))
	   (setq P5 (Polar P2 (+ (angle P2 P1) (/ (* 3 Pi) 4)) Rau))
	   (MakeLWPolyline (list P4 P1 P2 P5) nil nil nil "4_Giaothong_CAU" nil nil)
	   (setq ObjPl1 (entlast))
	   (setq Mp1 (Polar P1 (+ (angle P2 P1) (/ (* 3 Pi) 2)) (/ KC 2)))
	   (setq Mp2 (Polar P2 (+ (angle P2 P1) (/ (* 3 Pi) 2)) (/ KC 2)))
	 )
	)
  )
  (vla-mirror
    (vlax-ename->vla-object ObjPl1)
    (vlax-3D-point Mp1)
    (vlax-3D-point Mp2)
  )
  (setq ObjPl2 (entlast))
  (vla-put-constantwidth (vlax-ename->vla-object ObjPl1) WidthPline)
  (vla-put-constantwidth (vlax-ename->vla-object ObjPl2) WidthPline)
  (entdel Line1)
  (entdel Line2)
  (Princ)
)



(defun mid (p1 p2)
  (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0)) p1 p2)
)
(defun LM:ss->ent (ss / i l)
  (if ss
    (repeat (setq i (sslength ss))
      (setq l (cons (ssname ss (setq i (1- i))) l))
    )
  )
)

(defun CV:List-to-ss (lst / ss)
  (setq ss (ssadd))
  (foreach item	lst
    (or	(= (type item) 'Ename)
	(setq item (vlax-vla-object->ename item))
    )
    (setq ss (ssadd item ss))
  )
  ss
)
;;;(LM:UniqueFuzz (list 1 2 3 4 4 4 5 5 5 3 6 7 7 7 7  9) 0.0001)
(defun LM:UniqueFuzz (l f)
  (if l
    (cons (car l)
	  (LM:UniqueFuzz
	    (vl-remove-if
	      (function (lambda (x) (equal x (car l) f)))
	      (cdr l)
	    )
	    f
	  )
    )
  )
)
(defun MakeLayer_ (name colour /)
  (if (null (tblsearch "LAYER" name))
    (entmake
      (list
	'(0 . "LAYER")
	'(100 . "AcDbSymbolTableRecord")
	'(100 . "AcDbLayerTableRecord")
	'(70 . 0)
	(cons 2 name)
	(cons 62 colour)
      )
    )
  )
)
(defun MakeLWPolyline
		      (listpoint closed Linetype LTScale Layer Color xdata / Lst)
  (setq	Lst (list (cons 0 "LWPOLYLINE")
		  (cons 100 "AcDbEntity")
		  (cons	8
			(if Layer
			  Layer
			  (getvar "Clayer")
			)
		  )
		  (cons	6
			(if Linetype
			  Linetype
			  "bylayer"
			)
		  )
		  (cons	48
			(if LTScale
			  LTScale
			  1
			)
		  )
		  (cons	62
			(if Color
			  Color
			  256
			)
		  )
		  (cons 100 "AcDbPolyline")
		  (cons 90 (length listpoint))
		  (cons	70
			(if closed
			  1
			  0
			)
		  )
	    )
  )
  (foreach PP listpoint
    (setq Lst (append Lst (list (cons 10 PP))))
  )
  (if xdata
    (setq Lst (append lst (list (cons -3 (list xdata)))))
  )
  (entmakex Lst)
)
(defun MakeLine	(PT1 PT2 Linetype LTScale Layer Color 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	62
			(if Color
			  Color
			  256
			)
		  )
		  (cons 10 PT1)
		  (cons 11 PT2)
		  (cons	-3
			(if xdata
			  (list xdata)
			  nil
			)
		  )
	    )
  )
)


;;;;;; XET DIEM BEN TRAI HAY PHAI DOAN THANG;;;;;;;;;;;;;;;;;;;
(defun CCW (P1 P2 P / CCW1 D DX DX0 DY DY0)
  (setq	dX  (- (car P) (car P1))
	dY  (- (cadr P) (cadr P1))
	dX0 (- (car P2) (car P1))
	dY0 (- (cadr P2) (cadr P1))
	d   (- (* dX dY0) (* dY dX0))
  )
  (if (>= d 0)
    (setq CCW1 1)
    (setq CCW1 -1)
  )
  CCW1
)

 

  • Like 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

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

×