Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

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


  • Please log in to reply
2851 replies to this topic

#2381 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 08 January 2015 - 11:13 AM

Nếu chia để trị thì phân thành các nhóm line nằm trên các đường thẳng có pt:

ax + by + c = 0

Với a^2 + b^2 = 1

=> bài toán 1 chiều


  • 0

#2382 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 643 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 09 January 2015 - 10:04 AM

Mọi người làm ơn cho mình hỏi ý nghĩa của lệnh này không
(vlax-curve-getEndParam curve-obj)....Thông số cuối của đường cong
và còn khoảng 10 câu lệnh có liên quan đến Param của Curve nữa nhưng ,sẽ mình sẽ tự tìm hiểu sau:
Mình muốn hỏi.
1. Thế nào là đường cong, đối tượng nào được chấp nhận là đường cong?
2. Ý nghĩa của Param( trong Google dịch là tham số) của đường cong Curve là gì?

Mình thấy.
Với PolyLine nó có Max là số đỉnh của Pl nhưng lại nhận được các số thực < Max
Với Circle,ELLIP có Max là 2*pi, chấp nhận số thực nhở, lớn hơn 2*pi
Với Line nó là chiều dài Line, không có Max
Với Arc, mình chưa tìm hiểu được.
Với Spline mình cũng chưa tìm hiểu được.
<min=0>
cảm ơn mọi người
P/s Mình thắc mắc tại sao các thành viên Mod của Cadviet thì member thường không gửi tin nhắn riêng được nhỉ,

Bài viết đã được chỉnh sửa nội dung bởi quansla: 09 January 2015 - 10:06 AM

  • 0

#2383 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 09 January 2015 - 11:07 AM

Mình biết thì như này:

1.Các hàm vlax-curve thì áp dụng cho các đối tượng dạng tuyến : line, arc, circle, pline .v.v.

2.Các hàm này không mang tính tuyệt đối (có sai số).

3.Khi đã dùng tới tụi nó tính ưng ý và ổn định của chương trình rất không cao.


  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#2384 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 643 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 09 January 2015 - 11:29 AM

Mình biết thì như này:
1.Các hàm vlax-curve thì áp dụng cho các đối tượng dạng tuyến : line, arc, circle, pline .v.v.
2.Các hàm này không mang tính tuyệt đối (có sai số).
3.Khi đã dùng tới tụi nó tính ưng ý và ổn định của chương trình rất không cao.

Cảm ơn bác nhé, có điều câu lệnh về tham số đường cong nhiều như vậy mà không dùng được thì có vẻ hơi phí
  • 0

#2385 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 09 January 2015 - 11:32 AM

1. Các curve trong cad gồm : arc, circle, polyline, line, donut, ellipse, spline và Helix (ống xoắn)

2. Những param bạn nói trên là đúng, bổ sung với arc : Startparam là dxf 50, endparam là dxf 51.


  • 0

#2386 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 12 January 2015 - 10:07 AM

Các bác ơi cho em hỏi chút, em muốn tự động mở file cad lên khi gõ lệnh lisp nhưng không được,  file cad cần load em đã để trong support file search, code em viết đây ạ, vấn đề ở chỗ hàm open, khi gõ trực tiếp trên command thì được mà viết vào lisp thì lại không được:

(defun c:wgs84_105 ()
(defun start ()
(setvar "filedia" 0)
)
(defun end ()
(setvar "filedia" 1)
)
(defun *error* ( aaa)
 (end)
 )
 (start )
(command "open" "WGS84_105") 
 (end )
)

  • 0

#2387 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 12 January 2015 - 11:24 AM

- open = command không có đối số nên không thể viết open = command trong lsp đc ^^, mún mở file nhoc nhớ loáng thoáng có xem đâu đó chỉ có thể dùng hàm

vla-xxx, hay dùng lệnh scrip của cad


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2388 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 12 January 2015 - 11:29 AM

- open = command không có đối số nên không thể viết open = command trong lsp đc ^^, mún mở file nhoc nhớ loáng thoáng có xem đâu đó chỉ có thể dùng hàm

vla-xxx, hay dùng lệnh scrip của cad

Nhóc ơi cố gắng nhớ xem là hàm nào giúp tớ với nhé


  • 0

#2389 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 12 January 2015 - 11:40 AM

- ah đây, mới mò lại ^^, filename phải khai rõ đường dẫn hen => Hieu không cần để file trong supports, readonly nếu để nil thì giống mở file bình thường cho save, còn khác nil thì mở file dạng read_only, múa vô tư nhưng ko save đc ^^

(defun MyOpen (FileName ReadOnly / )
(vla-Open
 (vla-get-Documents
  (vlax-get-Acad-Object)
 )
 FileName
 (if ReadOnly 
  :vlax-true
  :vlax-false
 )
)
)

  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2390 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 12 January 2015 - 12:15 PM

- open = command không có đối số nên không thể viết open = command trong lsp đc ^^, mún mở file nhoc nhớ loáng thoáng có xem đâu đó chỉ có thể dùng hàm

vla-xxx, hay dùng lệnh scrip của cad

 

Command "ai_editcustfile"


  • 2

#2391 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 12 January 2015 - 12:15 PM

Cách chạy file .exe (3 trong 1 chú ý thằng thứ 2 là chơi được nhiều loại file) 

:P :

(command "shell" "D:/xxx/run.exe")
(command "ai_editcustfile" "D:/xxx/run.exe")
(startapp "D:/xxx/run.exe")

  • 2

#2392 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 12 January 2015 - 12:18 PM

Command "ai_editcustfile"

- hi nhoc lại biết thêm 1 hàm của command, thanks a Tue


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2393 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 12 January 2015 - 01:43 PM

thanks nhoclangbat, bác Tue_NV, pphung183 nhé, cái này giúp ích cho em rất nhiều


  • 0

#2394 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 17 January 2015 - 11:46 AM

Chào các bác, hôm qua vào facbook của nhóm Cadmagic em "vớ" được lisp này của thầy ketxu và mang về "mông má" lại cho phù hợp với nhu cầu, giờ còn chút vấn đề nữa qua đây nhờ các bác chỉ giáo. Em nó đây:

(defun c:darr( / ST:Ss-Copy-Dynamic ST:SS->List-Vla ST:Ss-Delete ST:Check-Exist txt2num a b dir gr p0 px nx pxv ssFull ss1 vecx ans inc *error*)
(vl-load-com)
;==============================================================================================================
(defun ST:Ss-Copy-Dynamic ( sslst n v dir / i number number1 matlist obj1 ss transmat xobj isText lst isReal)
  (setq ss (ssadd))
  (foreach xobj sslst
	(setq i 1)
(cond	(	(wcmatch (vla-get-objectname xobj) "AcDbText,AcDbMText")
			(setq	lst (txt2num (vla-get-textstring xobj)) 
					number1 (cadr lst)
					number (read number1)
				)
			(setq isText T)
			) ;Text Object
		(T 	setq isText nil)
	); end cond tong 

	(repeat n
  	(setq obj1 (vla-copy xobj)
  		  matList (list (list 1 0 0 (* i (car v) dir)) (list 0 1 0 (* i (cadr v) dir)) '(0 0 1 0) '(0 0 0 1))
  		  transmat (vlax-tmatrix matlist))
		  
  	(vla-transformby obj1 transMat)
	
   (if  (and isText (wcmatch (vla-get-objectname xobj) "AcDbText,AcDbMText")) ; dieu kien tong
		(if (and (< number 9 ) (> (strlen number1) 1))
		
			(vla-put-textstring obj1 (strcat (car lst) "0" (rtos (setq number (1+ number)) 2 0) ))
			
			(vla-put-textstring obj1 (strcat (car lst) (rtos (setq number (1+ number)) 2 0) ))
			); end if
	 ); end if tong	 	 
	 
  	(ssadd (vlax-vla-object->ename obj1) ss)
  	(setq i (1+ i))
	)
  );end foreach
  ss 
)
;=============================================================
(defun ST:SS->List-Vla (ss / n e l)
  (setq n (sslength ss))
  (while (setq e (ssname ss (setq n (1- n))))
	(setq l (cons (vlax-ename->vla-object e) l))
  )
)
;=====================================================================
(defun ST:Ss-Delete (ss / i)
  (mapcar 'vla-delete (ST:SS->List-Vla ss))
)
(defun ST:Check-Exist(lst1 lst2)(and (vl-remove nil (mapcar '(lambda(x)(vl-position x lst2)) lst1)))) ;from topic Dovui ^^
 (defun *error* (msg)    
    (if ss1 (ST:ss-delete ss1))    
  )
(defun txt2num ( string / so m chuoi kytu ) ; tach cac so o cuoi chuoi
 
 (setq so " 0123456789"
       m (strlen string)
	   chuoi "")
(while (and (>= m 1) (vl-string-search (setq kytu (substr string m 1)) so ) )
	   (setq m (1- m))
	   (if (/= kytu " " ) (setq chuoi (strcat kytu chuoi)))
)
(list (substr string 1  m ) chuoi)
)
;;==============================================================================

(grtext -1 "Dynamic LArray")
(command "undo" "be")
(setq a (ssget "_+.:E:S" '((-4 . "<OR")
									(0 . "TEXT,MTEXT,LINE")
									(-4 . "<AND") (0 . "LWPOLYLINE") (70 . 0)(-4 . "AND>")
									(-4 . "OR>"))
			)
		)
(cond (	(and a
			(or
				(= (cdr(assoc 0 (entget(ssname a 0)))) "LWPOLYLINE,LINE")
				(= (cdr(assoc 0 (entget(ssname a 0)))) "LINE")
				)
			(setq	b (ssget "_+.:E:S" '((0 . "TEXT,MTEXT")) ))
			)
		(setq a (SSADD (ssname b 0) a))
		)
	 (	(and a
			(or
				(= (cdr(assoc 0 (entget(ssname a 0)))) "TEXT")
				(= (cdr(assoc 0 (entget(ssname a 0)))) "MTEXT")
				)
			(setq	b (ssget "_+.:E:S" '((0 . "LWPOLYLINE,LINE")) ))
			)
		(setq a (SSADD (ssname b 0) a))
		)
	);end cond
(if (setq	ssFull (ST:SS->List-Vla a)
			p0 (getpoint "\n\U+0110i\U+1EC3m g\U+1ED1c :")
			px (getpoint p0 "\nH\U+01B0\U+1EDBng v\U+00E0 kho\U+1EA3ng c\U+00E1ch copy :")
			vecx (mapcar '- px p0)
		)
(progn
  (prompt "\nPick \U+0111i\U+1EC3m cu\U+1ED1i c\U+00F9ng :")
  (while (= (car (setq gr (grread nil 5 0))) 5)
	(if ss1 (ST:Ss-Delete ss1))
	(redraw)
	(setq pxv (mapcar '- (inters (cadr gr) (polar (cadr gr) (+ (/ pi 2.0) (angle px p0)) 1.0) p0 px nil) p0))
	(if (< (setq nx  (fix (/ (caddr (trans pxv 0 vecx)) (caddr (trans vecx 0 vecx))))) 0)
     	  (setq dir -1 nx (- nx)) (setq dir 1))
 
	(setq ss1 (ST:Ss-Copy-Dynamic ssFull nx vecx dir)) ; can chu y doan nay;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	(grdraw p0 (mapcar '+ p0 pxv) 3 1)
  )
)
)
(command "undo" "en")
(princ)

)

File cad để test đây:

https://www.dropbox....wing2.dwg?dl=0.

 

 Khi để UCS ở chế độ W thì lisp chạy ngon lành . Nhưng khi đặt lại UCS thì các đường thằng array không theo ý muốn nữa. Trong file test sau khi đặt UCS, em bật chế độ Ortho on, chọn đối tượng, pick điểm gốc, pick điẻm chọn khoảng cách và hướng copy thì nó toàn copy theo góc như chưa thay đổi UCS. :D


  • 0

#2395 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 17 January 2015 - 12:25 PM

Nếu rỗi bạn đọc hàm trans

Quick fix thì đổi dòng setq vecx (mapcar ....) thành (trans (mapcar ...) 1 0 T), hệ lụy tự bạn check

Code viết lâu quá rồi, nhìn rối mắt :)


  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#2396 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 17 January 2015 - 01:09 PM

Thanks mr ket. Theo file test của em nó bị chạy ngược với chiều di chuột thầy ạ. :D
  • 0

#2397 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 17 January 2015 - 04:41 PM

Hệ lụy là đây ^^


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#2398 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 22 January 2015 - 04:44 PM

Các bác ơi cho em hỏi muốn bật Polar Tracking tương đương với nút F10 thì mình dùng biến hệ thống nào ạ.

Em mò mãi trong help mới ra được biến polarmode để thay đổi từ chế độ Absolute về Relative To Last Segment thôi.

Nhân tiện cho em hỏi dòng chữ màu đỏ bắt đầu có từ phiên bản cad nào ạ. Em từ lâu tới giờ chung tình với em cad2007 nên không biết.


  • 0

#2399 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 22 January 2015 - 04:54 PM

AUTOSNAP

Màu đỏ thì 2007 đã có rồi mà.


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2400 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 22 January 2015 - 04:56 PM

THANKS BÁC. Autosnap chế độ 8. 

Ý em hỏi Cái dòng màu đỏ đó là trước cad2007 đã có chưa, nếu có thì từ phiên bản nào ạ.


  • 0