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

[Hỏi] Cùng nhau học LISP

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

Hi.Tks bạn.Cái này mình lười suy nghĩ quá,biết là có hàm đó rồi mà chưa biết tận dụng ^^.

Sáng nay mình cũng đã thử cách đặt dim đúng quy cách trong ví dụ.

Cách đầu là mình sẽ dim cạnh CN,đặt chiều dài chân dim 2mm.Lúc này dim dính vào cạnh HCN-->rồi dùng move với polar để đẩy dim ra khỏi đối tượng 23mm nữa

Cách 2 là mình nghĩ có cách đặt chân dim cách đối tượng 1 khoảng cố định luôn,nhưng chưa rõ

Với cách 2 bạn chỉ phải sửa chỉ số offset from origin của dim là được. Chân dim vẫn dính vào đối tượng còn đường dóng thì cách đối tượng một đoạ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
Với cách 2 bạn chỉ phải sửa chỉ số offset from origin của dim là được. Chân dim vẫn dính vào đối tượng còn đường dóng thì cách đối tượng một đoạn.

Cám ơn bạn.Tí nữa giờ nghỉ trưa mình sẽ thử :(.Lọ mọ tìm các biến set Dimstyle thì tìm thấy cái này,chắc cũng có người cần dùng :(

DIMASO	  Off				  Create dimension objects
DIMSTYLE	D-175				Current dimension style (read-only)

DIMADEC	 0					Angular decimal places
DIMALT	  Off				  Alternate units selected
DIMALTD	 4					Alternate unit decimal places
DIMALTF	 0.0394			   Alternate unit scale factor
DIMALTRND   0.0000			   Alternate units rounding value
DIMALTTD	4					Alternate tolerance decimal places
DIMALTTZ	0					Alternate tolerance zero suppression
DIMALTU	 8					Alternate units
DIMALTZ	 0					Alternate unit zero suppression
DIMAPOST						 Prefix and suffix for alternate text
DIMARCSYM   0					Arc length symbol
DIMASZ	  1.0000			   Arrow size
DIMATFIT	0					Arrow and text fit
DIMAUNIT	0					Angular unit format
DIMAZIN	 1					Angular zero supression
DIMBLK	  ArchTick			 Arrow block name
DIMBLK1	 ClosedFilled		 First arrow block name
DIMBLK2	 ClosedFilled		 Second arrow block name
DIMCEN	  0.0900			   Center mark size
DIMCLRD	 4 (cyan)			 Dimension line and leader color
DIMCLRE	 4 (cyan)			 Extension line color
DIMCLRT	 3 (green)			Dimension text color
DIMDEC	  0					Decimal places
DIMDLE	  0.0000			   Dimension line extension
DIMDLI	  0.3800			   Dimension line spacing
DIMDSEP	 .					Decimal separator
DIMEXE	  1.5000			   Extension above dimension line
DIMEXO	  1.5000			   Extension line origin offset
DIMFRAC	 0					Fraction format
DIMFXL	  1.0000			   Fixed Extension Line
DIMFXLON	Off				  Enable Fixed Extension Line
DIMGAP	  1.0000			   Gap from dimension line to text
DIMJOGANG   45				   Radius dimension jog angle
DIMJUST	 0					Justification of text on dimension line
DIMLDRBLK   ClosedFilled		 Leader block name
DIMLFAC	 1.0000			   Linear unit scale factor
DIMLIM	  Off				  Generate dimension limits
DIMLTEX1	BYBLOCK			  Linetype extension line 1
DIMLTEX2	BYBLOCK			  Linetype extension line 2
DIMLTYPE	BYBLOCK			  Dimension linetype
DIMLUNIT	2					Linear unit format
DIMLWD	  -2				   Dimension line and leader lineweight
DIMLWE	  -2				   Extension line lineweight
DIMPOST						  Prefix and suffix for dimension text
DIMRND	  0.0000			   Rounding value
DIMSAH	  Off				  Separate arrow blocks
DIMSCALE	175.0000			 Overall scale factor
DIMSD1	  Off				  Suppress the first dimension line
DIMSD2	  Off				  Suppress the second dimension line
DIMSE1	  Off				  Suppress the first extension line
DIMSE2	  Off				  Suppress the second extension line
DIMSOXD	 Off				  Suppress outside dimension lines
DIMTAD	  1					Place text above the dimension line
DIMTDEC	 0					Tolerance decimal places
DIMTFAC	 1.0000			   Tolerance text height scaling factor
DIMTFILL	0					Text background enabled
DIMTFILLCLR BYBLOCK			  Text background color
DIMTIH	  Off				  Text inside extensions is horizontal
DIMTIX	  On				   Place text inside extensions
DIMTM	   0.0000			   Minus tolerance
DIMTMOVE	0					Text movement
DIMTOFL	 On				   Force line inside extension lines
DIMTOH	  Off				  Text outside horizontal
DIMTOL	  Off				  Tolerance dimensioning
DIMTOLJ	 1					Tolerance vertical justification
DIMTP	   0.0000			   Plus tolerance
DIMTSZ	  0.0000			   Tick size
DIMTVP	  0.0000			   Text vertical position
DIMTXSTY	R5				   Text style
DIMTXT	  1.8000			   Text height
DIMTZIN	 0					Tolerance zero suppression
DIMUPT	  Off				  User positioned text
DIMZIN	  8					Zero suppression

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

Á á..Bị mắc rồi các bác ơi.Trong trường hợp mình phải "setvar" rất nhiều tham số cho dim như kia,có cách nào tạo list (Biến Giá trị) để setvar 1 loạt không ạ :(

Chứ trong code mà làm ngần kia cái chữ (setvar Dimabc ....) thì ....Mở rộng ra có thể ghi Dimstyle này ra 1 file text để load vào bản vẽ mới 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
Á á..Bị mắc rồi các bác ơi.Trong trường hợp mình phải "setvar" rất nhiều tham số cho dim như kia,có cách nào tạo list (Biến Giá trị) để setvar 1 loạt không ạ :(

Chứ trong code mà làm ngần kia cái chữ (setvar Dimabc ....) thì ....Mở rộng ra có thể ghi Dimstyle này ra 1 file text để load vào bản vẽ mới không

Bạn dùng run Script cua autocad. Bạn search trên diễn đàn có nhiều bài viết về vấn đề này rồi.

  • 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 có đọc rồi,nhưng vẫn phân vân về cách load file script bằng lisp bác ạ :( Nếu tạo file Scr rồi load mà dùng đường dẫn cố định thì lại dở quá :(

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 có đọc rồi,nhưng vẫn phân vân về cách load file script bằng lisp bác ạ :( Nếu tạo file Scr rồi load mà dùng đường dẫn cố định thì lại dở quá :(

Bạn dùng thêm hàm findfile và (getvar "DWGPREFIX") nó sẽ tìm file trên tất cả ổ đĩa của bạn và trả về đường dẫn của file đó.

BS: Mình nhầm bạn dùng (getvar "DWGPREFIX") là được rồi nó trả về đường dẫn file DWG bạn đang mở. Như vậy bạn chỉ cần copy file script theo cùng folde với file dwg là được

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

Ai viết giùm mình1 líp như thể này để mình đọc rùi ứng dụng cho những T/h khác với:

 

1)Chọn điểm 1, chọn điểm 3. chọn điểm 3.................... chọn điểm n. ( thích chọn bao nhiêu điểm cũng đc )

 

2)Sau khi chọn xong các điểm thì Vẽ các line nối điểm 1 và 2, 2 và 3.........n-1 và 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
Ai viết giùm mình1 líp như thể này để mình đọc rùi ứng dụng cho những T/h khác với:

 

1)Chọn điểm 1, chọn điểm 3. chọn điểm 3.................... chọn điểm n. ( thích chọn bao nhiêu điểm cũng đc )

 

2)Sau khi chọn xong các điểm thì Vẽ các line nối điểm 1 và 2, 2 và 3.........n-1 và n.

Có ngay : Vẽ các line nối các điểm đã chọn.

(defun c:vl (/ lst pt1 pt2 )
 (setq pt1 (getpoint "\nDiem dau :")
lst (cons pt1 lst))
 (while (setq pt2 (getpoint pt1 "\nDiem ke :"))
   (grdraw pt1 pt2 4) 
   (setq lst (cons pt2 lst)
  pt1 pt2)  )
 (redraw)
 (setq pt1 (car lst))
 (foreach pt2 (cdr lst)
   (entmakex (list (cons 0 "LINE")(cons 10 pt1)(cons 11 pt2) ))
   (setq pt1 pt2))  
 (Princ))

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ó ngay : Vẽ các line nối các điểm đã chọn.

(defun c:vl (/ lst pt1 pt2 )
 (setq pt1 (getpoint "\nDiem dau :")
lst (cons pt1 lst))
 (while (setq pt2 (getpoint pt1 "\nDiem ke :"))
   (grdraw pt1 pt2 4) 
   (setq lst (cons pt2 lst)
  pt1 pt2)  )
 (redraw)
 (setq pt1 (car lst))
 (foreach pt2 (cdr lst)
   (entmakex (list (cons 0 "LINE")(cons 10 pt1)(cons 11 pt2) ))
   (setq pt1 pt2))  
 (Princ))

 

Chài ơi

Bác gia_bach này nhanh thật

Em định REPLY bài này do cái này quá dễ (là có bác gia_bach)

Sao bác ko reply cái khó đi

huhu

:(

hihi

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ài ơi

Bác gia_bach này nhanh thật

Em định REPLY bài này do cái này quá dễ (là có bác gia_bach)

Sao bác ko reply cái khó đi

huhu

:(

hihi

 

Như vậy, một vấn đề mà nhiều người cùng giải quyết thì "tốc độ" là tiêu chí lựa chọn :)

Còn "dễ" hay "khó" thật khó nói. Sáng nay tôi có nhờ bác gia_bach giải quyết một vấn đề (Thâm tâm tôi cứ nghĩ là dễ), nhưng khi hỏi xong thì tôi mới biết đó là "khó"

Mà "Cái khó thường bó cái khôn", p k? :(

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ài ơi

Bác gia_bach này nhanh thật

Em định REPLY bài này do cái này quá dễ (là có bác gia_bach)

Sao bác ko reply cái khó đi

huhu :( hihi

thiện tai, thiện tai ...

Rút kinh nghiệm lần sau chờ vài ba ngày (tuần - tháng) mới REPLY ! :(

yeah , yeah ...

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ảm ơn bác đã trả lời câu hỏi của em nhanh thế, hehe.

Ngoài code trên có code "bình dân" hơn nữa được không bác. :(

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ới mỗi lisp nhận được,mình nghĩ bạn nên chịu khó đọc hiểu ý nghĩa của từng hàm,từng dòng,sẽ hiểu ra ấn đề..Kể mà mấy anh viết lisp ghi chú luôn thì càng tố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
thiện tai, thiện tai ...

Rút kinh nghiệm lần sau chờ vài ba ngày (tuần - tháng) mới REPLY ! :(

yeah , yeah ...

Thế thì khổ chúng em ^^.

Ầy dà,em mạn phép đưa ra ý kiến là các code nên ghi ghi chú mục đích từng hàm,vừa đỡ nhầm lẫn,vừa giúp người hỏi có thể hiểu vấn đề..Nhiều lúc e đọc code thấy dài quá,mà không hiểu chức năng từng đoạn từng đọan,mò mẫm help từng chữ 1,kể cũng dễ nả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

Mình có mót được cái autolip này trên diễn đàn nhưng sao không dùng được. Mong các Bác chỉ giáo

;Scale the mot chieu

(DEFUN EXCUTE()

(setq oldvalue (getvar "CMDECHO"))

(setvar "CMDECHO" 0)

(princ "Chon doi tuong can scale: ")

(setq ss (ssget))

(setq P0 (getpoint "\nChon diem goc: "))

(initget 1 "X Y X S")

(setq C (getkword "\nScale theo [X,Y,Z,Scale]? :"))

(setq hs (getreal "Cho biet he so scale: "))

(DELBLOCK "vkc_temp")

(CREATEBLOCK ss P0)

(Command "-Insert" "vkc_temp" C hs P0 "")

(setq dt (entlast))

(Command "Explode" dt)

(setvar "CMDECHO" oldvalue)

(princ)

)

(DEFUN CREATEBLOCK(ss P)

(command "-Block" "vkc_temp" P ss "")

)

 

(DEFUN DELBLOCK (bname)

(if (IsExistBlock bname)

(Command "-Purge" "B" bname "Y" "Y")

)

)

(DEFUN IsExistBlock(bname / kq)

(setq kq Nil)

(setq n (length LiBlk))

(setq i 0)

(while (< i n)

(if (= bname (nth i LiBlk))

(progn

(setq i n)

(setq kq T)

)

)

(setq i (1+ i))

)

kq

)

(DEFUN CREALIBLK (/ NL)

(setq LiBlk (List))

(setq NL (tblnext "BLOCK" T))

(while NL

(setq LiBlk (append LiBlk (list (cdr (assoc 2 NL)))))

(setq NL (tblnext "BLOCK"))

)

(setq LiBlk (Acad_strlsort LiBlk))

)

(DEFUN C:XSCALE()

(CREALIBLK)

(EXCUTE)

)

(DEFUN C:XSC()

(CREALIBLK)

(EXCUTE)

)

(princ "\nfree lisp from www.cadviet.com")

(princ)

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 bình thường mà bạn.Lệnh là xsc

Cảm ơn Bác đã quan tâm, nhưng mình vẫn không làm được vì chỉ scan được với mỗi trục x trong 3D còn y,z không thực hiện được. Thank you very much.

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

(defun c:test()
(setq
GOC1 (getpoint "\nDiem dat.: ")
GOC3 (getpoint "\nDiem 2:")
dt (polar GOC3 (dtr 180) 100))
(vl-cmdf "._dimlinear" GOC1 GOC3 dt)
(princ dt)
(princ)
)

Các bác cho e hỏi code trên sai ở đâu mà bến dt e đặt thế nào cũng không ảnh hưởng tới hình dim nhận được?:( Hay nó có ảnh hưởng mà e k biết.Hay trong dòng lệnh dimliner thì biến dt không đồng nghĩa với việc kick chuột vào tọa độ dt ?

Đã thế dim ra lại bị lệch 1 chân,và chân dim khi dài khi ngắn nữa chứ :(

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
(defun c:test()
(setq
GOC1 (getpoint "\nDiem dat.: ")
GOC3 (getpoint "\nDiem 2:")
dt (polar GOC3 (dtr 180) 100))
(vl-cmdf "._dimlinear" GOC1 GOC3 dt)
(princ dt)
(princ)
)

Các bác cho e hỏi code trên sai ở đâu mà bến dt e đặt thế nào cũng không ảnh hưởng tới hình dim nhận được?:( Hay nó có ảnh hưởng mà e k biết.Hay trong dòng lệnh dimliner thì biến dt không đồng nghĩa với việc kick chuột vào tọa độ dt ?

Đã thế dim ra lại bị lệch 1 chân,và chân dim khi dài khi ngắn nữa chứ :(

Cái (dtr 180) là cái gì vậy bạn. Theo mình nghĩ bạn định lấy goc 180 độ chứ gì nếu đúng thì bạn thay bằng thế này (/ (* 180 pi) 180) đây là cách đổi độ ra radian.

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 chết em quên,bên trên có hàm định nghĩa dtr đổi góc ra độ rồi ạ .Không biết có chuẩn k nữa :(

(defun DTR (A) (* pi (/ A 180.0)))

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
(defun c:test()
(setq
GOC1 (getpoint "\nDiem dat.: ")
GOC3 (getpoint "\nDiem 2:")
dt (polar GOC3 (dtr 180) 100))
(vl-cmdf "._dimlinear" GOC1 GOC3 dt)
(princ dt)
(princ)
)

Các bác cho e hỏi code trên sai ở đâu mà bến dt e đặt thế nào cũng không ảnh hưởng tới hình dim nhận được?:( Hay nó có ảnh hưởng mà e k biết.Hay trong dòng lệnh dimliner thì biến dt không đồng nghĩa với việc kick chuột vào tọa độ dt ?

Đã thế dim ra lại bị lệch 1 chân,và chân dim khi dài khi ngắn nữa chứ :(

Góp ý cùng bạn :

1. cách đặt tên biến : dĩ nhiên mỗi nguời có 1 cách đặt tên khác nhau nhưng cái tên phải có ý nghĩa gợi nhớ liên quan đến phần nội dung nó chuyển tải. Chữ in hay chữ thuờng đều đuợc.

vd :

- với giá trị góc -> đặt là GOC, G1 hay ANG (Víêt tắt cùa Angle)

- với giá trị điểm-> đặt là d1 hay Pt (Víêt tắt cùa Point)

 

2.Về cú pháp của hàm POLAR : (polar pt ang dist)

- pt là tọa độ điểm

- ang là giá trị của góc đo đơn vị Radian

- dist là khoảng cách từ điểm pt

Bạn thiếu hàm dtr có nhiệm vụ đổi số đo góc từ Degrees sang Radian.

như vậy dòng : (polar GOC3 (dtr 180) 100) đổi thành (polar GOC3 (/ pi 2) 100)

 

3. Khi dùng các lệnh CAD trong Lisp, nên tắt các Osnap, Ortho để tránh các hệ lụy không mong muố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
Ấy chết em quên,bên trên có hàm định nghĩa dtr đổi góc ra độ rồi ạ .Không biết có chuẩn k nữa :(

(defun DTR (A) (* pi (/ A 180.0)))

Không chuẩn ở câu viết : Phải viết là đổi góc từ độ ra Radian mới đúng

DTR : Dgree to Radian

  • 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
Góp ý cùng bạn :

1. cách đặt tên biến : dĩ nhiên mỗi nguời có 1 cách đặt tên khác nhau nhưng cái tên phải có ý nghĩa gợi nhớ liên quan đến phần nội dung nó chuyển tải. Chữ in hay chữ thuờng đều đuợc.

vd :

- với giá trị góc -> đặt là GOC, G1 hay ANG (Víêt tắt cùa Angle)

- với giá trị điểm-> đặt là d1 hay Pt (Víêt tắt cùa Point)

 

2.Về cú pháp của hàm POLAR : (polar pt ang dist)

- pt là tọa độ điểm

- ang là giá trị của góc đo đơn vị Radian

- dist là khoảng cách từ điểm pt

Bạn thiếu hàm dtr có nhiệm vụ đổi số đo góc từ Degrees sang Radian.

như vậy dòng : (polar GOC3 (dtr 180) 100) đổi thành (polar GOC3 (/ pi 2) 100)

 

3. Khi dùng các lệnh CAD trong Lisp, nên tắt các Osnap, Ortho để tránh các hệ lụy không mong muốn.

Vậy chính xác là sai ở chỗ dùng dtr rồi.E đã test lại,E định nghĩa hàm này trong 1 lisp khác,để load suite rồi mà không hiểu sao đến lúc tạo file mới,chạy code thì ra tình trạng như thắc mắc đêm qua.Đến lúc dùng thử hàm (dtr A) mới biết k có.Chuyển hẳn nó vào code thì ok luôn :|

Lại nữa,trong 1 code e định nghĩa các hàm rồi.Nhưng đến lúc dùng trong code lại báo lỗi chưa có.

Ví dụ như khi e viết :

(defun loadline(....)

..........)

;;;;

(defun c:abc()

loadline (...)

......

)

Lưu lại rồi load,gõ lệnh abc thì máy báo không có hàm loadline.E phải hì hục copy cả code phần (defun loadline(...)...) vào dòng command thì lúc ấy máy mới hiểu.Lỗi này là do cad e lỗi hay e dùng bị lỗi ạ ? Vì e vẫn đinh ninh 1 hàm nếu định nghĩa trong code lsp thì các hàm cú pháp chính trong file đó thoải mái dùng ?Mong mọi người giúp e với

 

Không chuẩn ở câu viết : Phải viết là đổi góc từ độ ra Radian mới đúng

DTR : Dgree to Radian

Hì hì,tại e viết láu quá ^^

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 chết em quên,bên trên có hàm định nghĩa dtr đổi góc ra độ rồi ạ .Không biết có chuẩn k nữa :(

(defun DTR (A) (* pi (/ A 180.0)))

Thấy trong Lisp có cái này:

Converts a value from one unit of measurement to another

(cvunit value from-unit to-unit)

Arguments

value

The numeric value or point list (2D or 3D point) to be converted.

from-unit

The unit that value is being converted from.

to-unit

The unit that value is being converted to.

The from-unit and to-unit arguments can name any unit type found in the acad.unt file.

Return Values

The converted value, if successful; otherwise nil, if either unit name is unknown (not found in the acad.unt file),

or if the two units are incompatible (for example, trying to convert grams into years).

 

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

Sao không sử dụng?

Command: (cvunit 180 "degree" "radian")

3.14159

 

Lưu lại rồi load,gõ lệnh abc thì máy báo không có hàm loadline.E phải hì hục copy cả code phần (defun loadline(...)...) vào dòng command thì lúc ấy máy mới hiểu.Lỗi này là do cad e lỗi hay e dùng bị lỗi ạ ? Vì e vẫn đinh ninh 1 hàm nếu định nghĩa trong code lsp thì các hàm cú pháp chính trong file đó thoải mái dùng ?

Dùng thoải mái luôn, nhưng phải đúng cú pháp, các hàm trong lisp phải đặt trong ()

(loadline ...) chứ không phải loadline(...)

(dtr A) chứ có phải dtr (A) đâ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

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

×