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

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

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

Cảm ơn bạn trước,mấy đổi mấy layer kia thì mình làm được nhưng layer cho 0.00 thì không làm được,thí dụ mình muốn gán cho nó là layer TEXT chẳng hạn.

Bạn dùng lệnh Battman cho nhanh bạn ah, nếu bạn muốn sửa cố định luôn nó là layer TEXT thì cũng được (cái này thì bổ sung mã lisp), nếu dùng Battman thì bạn cứ làm như sau: (nếu bạn chưa biết!!!)

.......Bấm lệnh BATTMAN

sau đó:

 

BlockATT.jpg

 

Và OKKKK!!!

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 ketxu,

Yêu cầu của bạn không khó. Tuy nhiên do bạn muốn "từ hnay sẽ bắt đầu nghiên cứu để hiểu hơn về nó..Biết đâu sau này lại giúp lại được những anh em khác^^", nên không ai có thể gạt bỏ cái ước muốn ấy của bạn.

Vậy bạn hãy bắt tay vào làm đi nhé. Bắt đầu từ bước đầu tiên là tạo cho được cái hình chữ nhật có định vị ở tâm. Mình chưa hiểu hết ý định của bạn song có nhẽ chả cần cái định vị ở tâm này. Vấn đề bạn cần là copy hay move cái hình chữ nhật này sao cho cái tâm của nó về trúng cái vị trí mà bạn pick. Do đó theo ngu ý của mình thì khi copy hay move bạn chỉ cần lấy điểm gốc của cái sự copy hay move ấy chính là cái tâm hình chữ nhật là OK bạn ạ. Như vậy thì hình như nó sẽ đơng giản hơn cái vụ phải có cái tâm của hình chữ nhật bạn ạ.

Hề hề hề. vài lời góp ý mong bạn chóng thành công.....

Vấn đề là khi tạo ra cột định vị,điểm chèn thường là tâm của cột,tại chỗ giao nhau của các cột.Mình muốn hình sẽ pause tại tâm chuột để mình chỉ kick vào giao điểm của các trục thôi.Còn nều tạo xong mới copy xong move thì...^^

THứ 2 nữa,mình phân vân không biết nếu vẽ cột bằng line thì có thể thực hiện việc đó khôngMong mọi người chỉ bảo

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ạn dùng lệnh Battman cho nhanh bạn ah, nếu bạn muốn sửa cố định luôn nó là layer TEXT thì cũng được (cái này thì bổ sung mã lisp), nếu dùng Battman thì bạn cứ làm như sau: (nếu bạn chưa biết!!!)

.......Bấm lệnh BATTMAN

sau đó:

 

BlockATT.jpg

 

Và OKKKK!!!

Nếu rảnh bạn sửa cố định giùm mình luôn được không?Vì mình cũng đang tìm hiểu về lisp.Thanks

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ấn đề là khi tạo ra cột định vị,điểm chèn thường là tâm của cột,tại chỗ giao nhau của các cột.Mình muốn hình sẽ pause tại tâm chuột để mình chỉ kick vào giao điểm của các trục thôi.Còn nều tạo xong mới copy xong move thì...^^

THứ 2 nữa,mình phân vân không biết nếu vẽ cột bằng line thì có thể thực hiện việc đó khôngMong mọi người chỉ bảo

1. Bạn chọn 1 điểm tâm -> Sử dụng hàm getpoint

2. Xác định điểm góc trái bên dưới (từ điểm tâm, từ chiều dài, chiều rộng cột)

3. Vẽ hình chữ nhật bằng Line hay Pline hoặc Rectang

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 rảnh bạn sửa cố định giùm mình luôn được không?Vì mình cũng đang tìm hiểu về lisp.Thanks

Lisp này các Text tạo ra nằm trong layer "TEXT":

(DEFUN C:CT (/ PT1 TSIZE STR PRMT  layerold)
(SETVAR "CMDECHO" 0)
(setvar "ATTMODE" 1)
(setvar "attdia" 0)
(setvar "attreq" 1)
(setq layerold (getvar "clayer"))
(if (not (tblsearch "layer" "ghichu"))
(command "layer" "m" "ghichu" "c" "150" """")
)
(if (not (tblobjname "block" "CTrinh"))
(taobl)
)
(SETQ PT1 (GETPOINT "\nDiem cao trinh:"))
(if (not TSIZE1)
(SETQ TSIZE1 (GETVAR "TEXTSIZE"))
)
(SETQ STR (RTOS TSIZE1 2)
PRMT (STRCAT "\nText height <" STR ">:")
TSIZE (GETDIST PRMT)
)
(if (not TSIZE)
(SETQ TSIZE TSIZE1)
(SETQ TSIZE1 TSIZE)
)
(PRINC "\n")
(command "-insert" "CTrinh" PT1 TSIZE "" "0")
(setvar "clayer" layerold)
(PRINC)
)
;---------------------
(defun taobl()
(entmake '((0 . "BLOCK")(2 . "CTrinh")(70 . 2)(10 0.0 0.0 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 -1.0 0.0 0.0)(11 1.0 0.0 0.0)))
(entmake
'((0 . "LINE")(62 . 7)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 1.0 0.5 0.0)))
(entmake
'((0 . "LINE")(62 . 7)(8 . "ghichu")
(10 1.0 0.5 0.0)(11 -1.0 0.5 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 0.0 3.0 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 -1.0 1.0 0.0)(11 4.5 1.0 0.0)))
(entmake
'((0 . "SOLID")(62 . 7)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 0.0 0.5 0.0)
(12 -1.0 0.5 0.0)(13 0.0 0.5 0.0)
(39 . 0.0)))

(if (not tenlayer1)(setq tenlayer1 "TEXT"))
(setq  	tenlayer (getstring T (strcat "\nNhap ten layer cua TEXT cao trinh [" tenlayer1 "]: ")))
(if (/= tenlayer "")(setq tenlayer1 tenlayer)(setq tenlayer tenlayer1))
(if (not (tblsearch "layer" tenlayer))
(command "layer" "m" tenlayer "c" "84" """")
)
(entmake
(list
 	(cons 0   "ATTDEF")
  	(cons 8 tenlayer)
	(cons 10 '(0.25 1.50 0.0))
	(cons 1   "0.00")
	(cons 2   "CT_ID")
	(cons 3   "Gia_tri_cao_trinh:")
	(cons 40   1.0)
	(cons 41   1.0)
	(cons 50   0.0)
	(cons 70   0)
	(cons 71   0)
	(cons 72   0)
	(cons 73   0)))
(entmake '((0 . "ENDBLK")))
(setq tenlayer nil)
(princ)
)
;---------------------

 

Hi vọng đúng ý bạn.........

Chỉnh sửa theo dkkx3a
  • 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
Không phải thế đâu bác Bình ạ. Cùng lisp trên nếu vẽ cung ngửa lên trên hoặc úp xuống là tâm nó bị lộn ngược ngay. Nên em cũng không hiểu chỗ này.

Chào bác Phamngoctukts,

Bác thử kiểm tra cái này xem nhé. Mình dùng nó chả bao giờ thấy nó chọn sai tâm cung cong cả bác ạ.

(defun c:getcen ()
(vl-load-com)
(setq obj (vlax-ename->vla-object (car (entsel "/n Chon duong cong can xac dinh tam ")))
       par (vlax-curve-getparamatpoint obj (getpoint "\n Chon diem can xac dinh tam cong tren duong cong: "))
       tam (mapcar '+ (vlax-curve-getsecondderiv obj par) (vlax-curve-getpointatparam obj par))
)
tam
(princ)
)

 

Qua đây chắc bác hiểu cái lý do mà tâm của bác bị lộn tu bác 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
Lisp này các Text tạo ra nằm trong layer "TEXT":

(DEFUN C:CT (/ PT1 TSIZE STR PRMT  layerold)
(SETVAR "CMDECHO" 0)
(setvar "ATTMODE" 1)
(setvar "attdia" 0)
(setvar "attreq" 1)
(setq layerold (getvar "clayer"))
(if (not (tblsearch "layer" "ghichu"))
(command "layer" "m" "ghichu" "c" "150" """")
)
(if (not (tblobjname "block" "CTrinh"))
(taobl)
)
(SETQ PT1 (GETPOINT "\nDiem cao trinh:"))
(if (not TSIZE1)
(SETQ TSIZE1 (GETVAR "TEXTSIZE"))
)
(SETQ STR (RTOS TSIZE1 2)
PRMT (STRCAT "\nText height <" STR ">:")
TSIZE (GETDIST PRMT)
)
(if (not TSIZE)
(SETQ TSIZE TSIZE1)
(SETQ TSIZE1 TSIZE)
)
(PRINC "\n")
(command "-insert" "CTrinh" PT1 TSIZE "" "0")
(setvar "clayer" layerold)
(PRINC)
)
;---------------------
(defun taobl()
(entmake '((0 . "BLOCK")(2 . "CTrinh")(70 . 2)(10 0.0 0.0 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 -1.0 0.0 0.0)(11 1.0 0.0 0.0)))
(entmake
'((0 . "LINE")(62 . 7)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 1.0 0.5 0.0)))
(entmake
'((0 . "LINE")(62 . 7)(8 . "ghichu")
(10 1.0 0.5 0.0)(11 -1.0 0.5 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 0.0 3.0 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 -1.0 1.0 0.0)(11 4.5 1.0 0.0)))
(entmake
'((0 . "SOLID")(62 . 7)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 0.0 0.5 0.0)
(12 -1.0 0.5 0.0)(13 0.0 0.5 0.0)
(39 . 0.0)))

(if (not tenlayer1)(setq tenlayer1 "TEXT"))
(setq  	tenlayer (getstring T (strcat "\nNhap ten layer cua TEXT cao trinh [" tenlayer1 "]: ")))
(if (/= tenlayer "")(setq tenlayer1 tenlayer)(setq tenlayer tenlayer1))
(if (not (tblsearch "layer" tenlayer))
(command "layer" "m" tenlayer "c" "84" """")
)
(entmake
(list
 	(cons 0   "ATTDEF")
  	(cons 8 tenlayer)
	(cons 10 '(0.25 1.50 0.0))
	(cons 1   "0.00")
	(cons 2   "CT_ID")
	(cons 3   "Gia_tri_cao_trinh:")
	(cons 40   1.0)
	(cons 41   1.0)
	(cons 50   0.0)
	(cons 70   0)
	(cons 71   0)
	(cons 72   0)
	(cons 73   0)))
(entmake '((0 . "ENDBLK")))
(setq tenlayer nil)
(princ)
)
;---------------------

 

Hi vọng đúng ý bạn.........

Đúng rồi nhưng sao nó không tự tạo font do mình định sẵn mà mặc định là font standard vậy bạn.Thanks

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 nhưng sao nó không tự tạo font do mình định sẵn mà mặc định là font standard vậy bạn.Thanks

Chào bạn 790312,

Nó không tự tạo vì bạn không yêu cầu.

Là một cán bộ kỹ thuật , bạn nên hiểu rõ cái mình cần và đặt vấn đề cho nó mạch lạc, dứt khoát, đừng có lắt nhắt như trẻ con vậy. Mọi người không phải là bạn nên chả ai có thể hiểu bạn cần cái gì mà làm cho đúng ý bạn được. Cứ sau mỗi một lần bạn lại đẻ ra một thứ yêu cầu mới kiểu đó thì tốt nhất bạn hãy tự học lisp để mà có thể làm được theo đúng ý bạn hoặc ít nhất cũng có thể tự sửa những cái mọi người đã giúp thành cái mình muốn. Bạn muốn mọi người giúp đỡ bạn thì bạn phải biết cách tôn trọng và thông cảm với người giúp bạn bạn ạ. Đừng có ỷ lại quá mức vào người khác bạn ạ.....

Mong rằng bạn hãy cố gắng tự vận động nhiều hơ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

Mỗi lần sử dụng mình lại phát hiện 1 cái chưa đầy đủ,biết là làm vậy cũng hơi phiền mọi người.Có gì bỏ qua cho mình.Thanks.

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ỗi lần sử dụng mình lại phát hiện 1 cái chưa đầy đủ,biết là làm vậy cũng hơi phiền mọi người.Có gì bỏ qua cho mình.Thanks.

Bác Bình dạy chí phải bạn ạ, vừa mất công vừa phát sinh nhiều bài trả lời, bạn tham khảo cái này nhé, mới chỉnh lại cho bạn nè:

(DEFUN C:CT (/ CMD NBC OSM PT1 TSIZE STR PRMT layerold)
(setvar "cmdecho" 0)
(setvar "ATTMODE" 1)(setvar "attdia" 0)(setvar "attreq" 1)
(setq layerold (getvar "clayer"))
(if (not (tblsearch "layer" "ghichu"))
(entmake (list (cons 0 "LAYER")
       (cons 100 "AcDbSymbolTableRecord")
       (cons 100 "AcDbLayerTableRecord")
       (cons 2 "ghichu")
       (cons 62 150)
       (cons 70 0)
	 )
)
)
(if (not (tblobjname "block" "CTrinh"))
(taobl)
)
(SETQ PT1 (GETPOINT "\nDiem cao trinh:"))
(if (not TSIZE1)
(SETQ TSIZE1 (GETVAR "TEXTSIZE"))
)
(SETQ STR (RTOS TSIZE1 2)
PRMT (STRCAT "\nText height <" STR ">:")
TSIZE (GETDIST PRMT)
)
(if (not TSIZE)
(SETQ TSIZE TSIZE1)
(SETQ TSIZE1 TSIZE)
)
(PRINC "\n")
(command "-insert" "CTrinh" PT1 TSIZE "" "0")
(setvar "clayer" layerold)
(PRINC)
)
;---------------------
(defun taobl()
;-------------------TAO LAYER
(if (not tenlayer1)(setq tenlayer1 "TEXT"))
(setq  	tenlayer (getstring T (strcat "\nNhap ten layer cua TEXT cao trinh [" tenlayer1 "]: ")))
(if (/= tenlayer "")(setq tenlayer1 tenlayer)(setq tenlayer tenlayer1))
(if (not (tblsearch "layer" tenlayer))
(entmake (list (cons 0 "LAYER")
       (cons 100 "AcDbSymbolTableRecord")
       (cons 100 "AcDbLayerTableRecord")
       (cons 2 tenlayer)
       (cons 62 84)
       (cons 70 0)
	 )
)
)
;-------------------TAO STYLE
(if (not tenstyle1)(setq tenstyle1 "BEO"))
(setq  	tenstyle (getstring T (strcat "\nNhap ten layer cua StyleText cao trinh [" tenstyle1 "]: ")))
(if (/= tenstyle "")(setq tenstyle1 tenstyle)(setq tenstyle tenstyle1))
(if (not (tblsearch "style" tenstyle))
(entmake (list 	(cons 0  "STYLE") 
		(cons 100   "AcDbSymbolTableRecord")
		(cons 100   "AcDbTextStyleTableRecord")
		(cons 2  tenstyle)
		(cons 3   "VHARIAL.TTF")
		(cons 70   0)
	)
)
)
(entmake '((0 . "BLOCK")(2 . "CTrinh")(70 . 2)(10 0.0 0.0 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 -1.0 0.0 0.0)(11 1.0 0.0 0.0)))
(entmake
'((0 . "LINE")(62 . 7)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 1.0 0.5 0.0)))
(entmake
'((0 . "LINE")(62 . 7)(8 . "ghichu")
(10 1.0 0.5 0.0)(11 -1.0 0.5 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 0.0 3.0 0.0)))
(entmake
'((0 . "LINE")(62 . 150)(8 . "ghichu")
(10 -1.0 1.0 0.0)(11 4.5 1.0 0.0)))
(entmake
'((0 . "SOLID")(62 . 7)(8 . "ghichu")
(10 0.0 0.0 0.0)(11 0.0 0.5 0.0)
(12 -1.0 0.5 0.0)(13 0.0 0.5 0.0)
(39 . 0.0)))
(entmake
(list
 	(cons 0   "ATTDEF")
  	(cons 8 tenlayer)
	(cons 10 '(0.25 1.50 0.0))
	(cons 1   "0.00")
	(cons 2   "CT_ID")
	(cons 3   "Gia_tri_cao_trinh:")
	(cons 7  tenstyle)
	(cons 40   1.0)
	(cons 41   1.0)
	(cons 50   0.0)
	(cons 70   0)
	(cons 71   0)
	(cons 72   0)
	(cons 73   0)))
(entmake '((0 . "ENDBLK")))
(setq tenlayer nil tenstyle nil)
(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
Co ai giúp em với.Có lisp nào xoá tất cả các block trong 1 bản vẽ ko.em ngồi xoá từng cái block một mệt quá

Chào bạn Phamvanthiet108,

Xóa tất cả đi thì không khó nhưng bạn hãy xem lại cái yêu cầu này, xóa đi rồi thì việc phục hồi một vài block nào đó hoàn toàn không đơn giản đâu bạn ạ. Nhất là các block chứa thuộc tính.

Bạn chỉ muốn xóa các block có trên bản vẽ hiện hành hay là muốn xóa cả trong các bản vẽ khá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
Co ai giúp em với.Có lisp nào xoá tất cả các block trong 1 bản vẽ ko.em ngồi xoá từng cái block một mệt quá

Bạn dùng lệnh filter

Bạn chọn Block sau đó ấn add to list

Sau đó bạn chọn apply

gõ all rồi enter và sau đó bạn ấn delete hoặc ấn erase.

Bạn chú ý bác phamthanhbinh nói rồi đó xoá rồi là khó lấy lại đấy nhé :( chúc bạn có lựa chọn chính xác.

  • 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
1. Bạn chọn 1 điểm tâm -> Sử dụng hàm getpoint

2. Xác định điểm góc trái bên dưới (từ điểm tâm, từ chiều dài, chiều rộng cột)

3. Vẽ hình chữ nhật bằng Line hay Pline hoặc Rectang

Vấn đề của mình là tạo HCN,sau đó "cầm" nó để pick vào các điểm tâm một cách trực quan,gần gần giống như copy vậy. code mình mới viết được như ở dưới.Nhưng bị vướng ở chỗ mình đã tạo điểm tâm rõ ràng rồi,nhưng không hiểu sao nếu user nhập vào bằng bàn phím chiều dài cạnh,thì Tâm lại là trung điểm 1 cạnh :( Còn nếu user input chiều dài cạnh bằng cách pick điểm thì mới đúng ý mình.Thêm 1 ý nữa,lệnh copy chỉ thực hiện 1 lần,kể cả khi đã thêm dòng multiple trước khi thực hiện lệnh :(,không đúng ý mình..Mọi người xem code giùm mình với.Vạn sự khởi đầu nan :)( Cám ơn mọi người :D

(defun C:RECc (/ GOC1 dx dy temp-1 temp-2 GOC2 TAM)
 (setq GOC1 (getpoint "\nDiem dat.: ")
dx	 (getdist "\nChieu dai canh theo truc x: ")
dy	 (getdist "\nChieu dai canh theo theo truc y: ")
GOC2	 (list (+ (car GOC1) dx) (+ (cadr GOC1) dy) 0)
TAM	 (list (+ (car GOC1) (/ dx 2)) (+ (cadr GOC1) (/ dy 2)) 0)
)
 (vl-cmdf "._RECTANGLE" "_non" GOC1 "D" dx dy "_non" GOC2
   "_.copy" "L" "" TAM pause)
  )

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 đây là đối tượng độc lập duy nhất,nên dùng copy với tham số L còn có ý nghĩa,chứ nếu mình tạo hcn rồi,hatch rồi,dim rồi,abc rồi,thì ý tưởng của mình phá sản luôn,vì không biết làm sao chọn lại 1 loạt các đối tượng từ lúc chạy lệnh đến lúc tạo xong tập đối tượng :( Ai có ý tưởng gì giúp mình 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
Co ai giúp em với.Có lisp nào xoá tất cả các block trong 1 bản vẽ ko.em ngồi xoá từng cái block một mệt quá

 

Mình chọc ngoáy linh tinh cũng đc cái líp này. Bạn dùng thử xem nhé:

;; free lisp from cadviet.com
(defun c:xbl ( / tbl)
(alert "\n Chon vung co block")
(setq tbl (ssget (list (cons 0 "INSERT"))))
     (command "erase" tbl "")
      )

  • 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
Vấn đề của mình là tạo HCN,sau đó "cầm" nó để pick vào các điểm tâm một cách trực quan,gần gần giống như copy vậy. code mình mới viết được như ở dưới.Nhưng bị vướng ở chỗ mình đã tạo điểm tâm rõ ràng rồi,nhưng không hiểu sao nếu user nhập vào bằng bàn phím chiều dài cạnh,thì Tâm lại là trung điểm 1 cạnh :( Còn nếu user input chiều dài cạnh bằng cách pick điểm thì mới đúng ý mình.Thêm 1 ý nữa,lệnh copy chỉ thực hiện 1 lần,kể cả khi đã thêm dòng multiple trước khi thực hiện lệnh :(,không đúng ý mình..Mọi người xem code giùm mình với.Vạn sự khởi đầu nan :)( Cám ơn mọi người :D

Mình chỉnh sửa lại cho đúng ý bạn rồi nhé

;; free lisp from cadviet.com
(defun C:RECc (/ GOC1 dx dy temp-1 temp-2 GOC2 TAM)
(setq dx     (getdist "\nChieu dai canh theo truc x: ")
    dy     (getdist "\nChieu dai canh theo theo truc y: ")
   GOC1  (getpoint "\nDiem dat.: ")
    GOC2     (list (+ (car GOC1) dx) (+ (cadr GOC1) dy) 0)
    TAM     (list (+ (car GOC1) (/ dx 2)) (+ (cadr GOC1) (/ dy 2)) 0)
    )
  (vl-cmdf "._RECTANGLE" "_non" GOC1 "D" dx dy "_non" GOC2
       "_.copy" "L" "" "m" TAM pause)
   )

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 đây là đối tượng độc lập duy nhất,nên dùng copy với tham số L còn có ý nghĩa,chứ nếu mình tạo hcn rồi,hatch rồi,dim rồi,abc rồi,thì ý tưởng của mình phá sản luôn,vì không biết làm sao chọn lại 1 loạt các đối tượng từ lúc chạy lệnh đến lúc tạo xong tập đối tượng :( Ai có ý tưởng gì giúp mình với :(

Sau khi bạn tạo hình chữ nhật xong tạo cho nó một biến để sau này dung lại.

Khi tạo xong dùng hàm entlast. Ví dụ (setq el (entlast)). Biến el chính là hình chữ nhật bạn vừa tạo.

khi bạn muốn hatch nó chỉ việc: (vl-cmdf "hatch" "tenvatlieu" "tile" el "") là hình chữ nhật của bạn se đưọc hatch. Chúc bạn mau chóng 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
Vấn đề của mình là tạo HCN,sau đó "cầm" nó để pick vào các điểm tâm một cách trực quan,gần gần giống như copy vậy. code mình mới viết được như ở dưới.Nhưng bị vướng ở chỗ mình đã tạo điểm tâm rõ ràng rồi,nhưng không hiểu sao nếu user nhập vào bằng bàn phím chiều dài cạnh,thì Tâm lại là trung điểm 1 cạnh :( Còn nếu user input chiều dài cạnh bằng cách pick điểm thì mới đúng ý mình.Thêm 1 ý nữa,lệnh copy chỉ thực hiện 1 lần,kể cả khi đã thêm dòng multiple trước khi thực hiện lệnh :(,không đúng ý mình..Mọi người xem code giùm mình với.Vạn sự khởi đầu nan :D( Cám ơn mọi người :D

(defun C:RECc (/ GOC1 dx dy temp-1 temp-2 GOC2 TAM)
 (setq GOC1 (getpoint "\nDiem dat.: ")
dx	 (getdist "\nChieu dai canh theo truc x: ")
dy	 (getdist "\nChieu dai canh theo theo truc y: ")
GOC2	 (list (+ (car GOC1) dx) (+ (cadr GOC1) dy) 0)
TAM	 (list (+ (car GOC1) (/ dx 2)) (+ (cadr GOC1) (/ dy 2)) 0)
)
 (vl-cmdf "._RECTANGLE" "_non" GOC1 "D" dx dy "_non" GOC2
   "_.copy" "L" "" TAM pause)
  )

 

Chào bạn ketxu,

Rất vui vì bạn đã bắt tay vào thực thi cái ước muốn của mình.

Về cái lisp bạn đã viết khá tốt đấy chứ. Nó chạy hoàn toàn đúng kể cả khi bạn nhập khoảng cách dx dy từ bàn phím bạn ạ. Việc bạn chạy lỗi có nhẽ là do thao tác nhập liệu của bạn mà thôi. Có thể là do bạn chỉ nhập một biến dx hoặc một biến dy bạn ạ, Phải nhớ nhập đủ cả hai biến dx và dy.

Còn việc copy chỉ được một lần là do bạn chưa sử dụng đúng cái tham số multiple của lệnh copy mà thôi. Bạn chỉ cần bổ sung vào đoạn lisp:

(vl-cmdf "._RECTANGLE" "_non" GOC1 "D" dx dy "_non" GOC2 "_.copy" "L" "" TAM pause) để nó trở thành:

(vl-cmdf "._RECTANGLE" "_non" GOC1 "D" dx dy "_non" GOC2 "_.copy" "L" "" "m" TAM pause) là Ok.

 

À,nhưng đây là đối tượng độc lập duy nhất,nên dùng copy với tham số L còn có ý nghĩa,chứ nếu mình tạo hcn rồi,hatch rồi,dim rồi,abc rồi,thì ý tưởng của mình phá sản luôn,vì không biết làm sao chọn lại 1 loạt các đối tượng từ lúc chạy lệnh đến lúc tạo xong tập đối tượng :D Ai có ý tưởng gì giúp mình với :)

 

Để chọn nhiều đối tượng vào trong tập hợp để copy, bạn chỉ cần đặt tên biến cho các đối tượng này rồi sau đó khi dùng lệnh copy bạn gọi lại chúng là Ok.

Ví dụ: (setq hat (command "hatch" .......))

(setq dim1 (command "dimesion" ......))

..........

Sau đó khi copy thi

(command "copy" hat dim1 .... "" "m" tam pause)....

Bạn hãy thử xem nhé.

Chúc bạn thành công....

 

PS: Bạn chú ý trong cái hàm copy của bạn có sử dụng cái biến tam để làm điểm mốc cho sự copy. Đó chính là cái lý do mình nói với bạn trong bài post trước là không cần thiết phải vẽ cái tâm của hình chữ nhật làm chi, chỉ cần khi copy bạn lấy điểm mốc copy là điểm tâm của hình chữ nhật là Ok 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
Sau khi bạn tạo hình chữ nhật xong tạo cho nó một biến để sau này dung lại.

Khi tạo xong dùng hàm entlast. Ví dụ (setq el (entlast)). Biến el chính là hình chữ nhật bạn vừa tạo.

khi bạn muốn hatch nó chỉ việc: (vl-cmdf "hatch" "tenvatlieu" "tile" el "") là hình chữ nhật của bạn se đưọc hatch. Chúc bạn mau chóng thành công.

 

 

Chào bạn ketxu,

Rất vui vì bạn đã bắt tay vào thực thi cái ước muốn của mình.

Về cái lisp bạn đã viết khá tốt đấy chứ. Nó chạy hoàn toàn đúng kể cả khi bạn nhập khoảng cách dx dy từ bàn phím bạn ạ. Việc bạn chạy lỗi có nhẽ là do thao tác nhập liệu của bạn mà thôi. Có thể là do bạn chỉ nhập một biến dx hoặc một biến dy bạn ạ, Phải nhớ nhập đủ cả hai biến dx và dy.

Còn việc copy chỉ được một lần là do bạn chưa sử dụng đúng cái tham số multiple của lệnh copy mà thôi. Bạn chỉ cần bổ sung vào đoạn lisp:

(vl-cmdf "._RECTANGLE" "_non" GOC1 "D" dx dy "_non" GOC2 "_.copy" "L" "" TAM pause) để nó trở thành:

(vl-cmdf "._RECTANGLE" "_non" GOC1 "D" dx dy "_non" GOC2 "_.copy" "L" "" "m" TAM pause) là Ok.

Để chọn nhiều đối tượng vào trong tập hợp để copy, bạn chỉ cần đặt tên biến cho các đối tượng này rồi sau đó khi dùng lệnh copy bạn gọi lại chúng là Ok.

Ví dụ: (setq hat (command "hatch" .......))

(setq dim1 (command "dimesion" ......))

..........

Sau đó khi copy thi

(command "copy" hat dim1 .... "" "m" tam pause)....

Bạn hãy thử xem nhé.

Chúc bạn thành công....

 

PS: Bạn chú ý trong cái hàm copy của bạn có sử dụng cái biến tam để làm điểm mốc cho sự copy. Đó chính là cái lý do mình nói với bạn trong bài post trước là không cần thiết phải vẽ cái tâm của hình chữ nhật làm chi, chỉ cần khi copy bạn lấy điểm mốc copy là điểm tâm của hình chữ nhật là Ok bạn ạ

 

Cảm ơn 2 bạn rất nhiều,mình đã vỡ ra nhiều rồi^^.Mình sẽ tiếp tục dự định ban đầu :(

Cho mình hỏi là nếu hỏi đi hỏi lại thế này thì có làm loãng topic không?Vì ở đây còn rất nhiều request chưa được đáp ứng.Mình định lập 2pic cho những người mới bắt đầu về LSP hỏi những câu ngô nghê như vừa rồi,có lẽ tiện hơ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 bạn shockyboy87,

Bạn là thành viên mới, rất mong bạn tôn trọng nội quy diễn đàn, lần sau nếu bạn tiếp tục post cùng một vấn đề trên nhiều topic khác nhau, bạn sẽ bị xóa bài post đó.

Chúc bạn vui khi tham gia diễn đàn.

 

Sorry diễn đàn, vì mình post xong mới thấy topic này nên post lại. Dù sao vấn đề của mình cũng đã được bạn phamngoctukts giải đáp. Cám ơn các bạ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
Cảm ơn 2 bạn rất nhiều,mình đã vỡ ra nhiều rồi^^.Mình sẽ tiếp tục dự định ban đầu :(

Cho mình hỏi là nếu hỏi đi hỏi lại thế này thì có làm loãng topic không?Vì ở đây còn rất nhiều request chưa được đáp ứng.Mình định lập 2pic cho những người mới bắt đầu về LSP hỏi những câu ngô nghê như vừa rồi,có lẽ tiện hơn ^^

Chào bạn ketxu,

Bạn hoàn toàn có quyền thiết lập một topic riêng theo vấn đề bạn cần quan tâm bạn ạ. Rất vui khi bạn có những ý kiến cùng trao đổi trên diễ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

-Nhờ mọi người ngâm cứu lisp này giúp mình với , do khi chạy nova ( phần mềm thiết đường ) cao độ mia ở mặt cắt ngang chạy ra nó nhiều quá dẫn đến không nhìn được , mời mọi người xem hình ảnh ( mình cũng up luôn cả bản cad lên để mọi người tiện ngâm cứu).

-Hình ảnh đây capture.jpg

-Vấn đề của mình đặt ra là làm sao biến hình A thành hình B một cách nhanh nhất(xóa bớt cọc mia thừa và ghi lại khoảng cách mia).

-Mình xin đưa đa cấu trúc lisp như sau:

+ Tên lệnh HCM (hiệu chỉnh mia)

+ Chọn điểm đầu (ta chọnđiểm 1 trong hình A)

+ Chọn điểm cuối (ta chọnđiểm 2 trong hình A)

+ Chọn text ghi khoảng cách ( ta chọn vào text 1.10 (màu đỏ ở hình A)> nó cho kết quả là 1.99 (màu đỏ ở hình :(

+ Sau khi điền kết quả xong nó tự xóa luôn các cọc và các text(cọc màu ghi , text ở giữa 2 đi màu vàng ) ở giữa 2 điểm 1 và 2 mà ta chọn ban đầu

-Mong anh em xem giúp , có gì mình viết trên đây mà mọi người chưa rõ ý của mình thì mình sẽ nói rõ thêm . Chân thành cám ơn

-Đây là bản cad http://www.cadviet.com/upfiles/3/cadviet_1.dwg

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ửi bạn TUE _NV xem lại cho mình lisp này với nhé ( lần trước mình có nhờ bạn viết giùm link bài viết đó đây http://www.cadviet.com/forum/index.php?s=&...st&p=93439)

- Bạn TUE _NV có thể chỉnh lại cho để thay chữ A bằng anpha và cho ra giá trị góc là độ/phut/giâyđuợc không>>> Cám ơn nhé

- Mình up luôn lisp cần bạn sửa đây: http://www.cadviet.com/upfiles/3/tsdc.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
-Gửi bạn TUE _NV xem lại cho mình lisp này với nhé ( lần trước mình có nhờ bạn viết giùm link bài viết đó đây http://www.cadviet.com/forum/index.php?s=&...st&p=93439)

- Bạn TUE _NV có thể chỉnh lại cho để thay chữ A bằng anpha và cho ra giá trị góc là độ/phut/giâyđuợc không>>> Cám ơn nhé

- Mình up luôn lisp cần bạn sửa đây: http://www.cadviet.com/upfiles/3/tsdc.lsp

Bachngoctung thử cái này nhé :


(defun vtt(/ oldos)
  (setq oldos (getvar "osmode"))
 (setvar "osmode" 0)
   (princ "\n Chon 1 cung Arc :")
 (if (null (setq ss (ssget ":S" '((0 . "ARC"))) ))
 	(alert "\n Khong co cung Arc nao duoc chon ")
  (progn
   (setq ent (ssname ss 0))
    (setq tam (cdr(assoc 10 (entget ent))))
   (setq D (cdr(assoc 40 (entget ent))));bankinh
    (setq dd (vlax-curve-getstartpoint ent))
    (setq dc (vlax-curve-getendpoint ent))
    (setq p1 (polar dd (+ (/ pi 2) (angle dd tam)) 1))
    (setq p2 (polar dc (+ (/ pi 2) (angle dc tam)) 1))
    (if (setq a (inters dd p1 dc p2 nil))
      (progn
        (vl-cmdf "line" dd a "")
        (vl-cmdf "line" dc a "")
(setq c (/ (* 180 (abs (- (angle dd a) (angle dc a)))) pi))
      )
    )
   ))
  (setvar "osmode" oldos)
(princ)
)
;;;;;;;;
(defun C:TS (/ ro CC CAT MD CD C D N L do ph O M I H J AA RR KK TT PP ss)
(SETVAR "CMDECHO" 0)
 (command "-Style" "TS DUONG CONG" "arial" "0" "1" "0" "n" "")
 (command "-Layer" "n" "TS DUONG CONG" "c" "222" "TS DUONG CONG" "lw" "0.2" "TS DUONG CONG" "")
 (command "-Layer" "s" "TS DUONG CONG" "" "")
 (setq CC (getpoint "\nCHON TAM CUA DUONG TRON / Enter ket thuc "))
 (setq CAT (getreal "\nDUONG KINH DUONG TRON: ")) 
(while CC
 (command ".circle" CC "d" CAT) (vtt)
(if ss (progn
 (setq L (strcat "{\\fSymbol|b0|i0|c2|p18;a}" "="
	  (itoa (setq do (fix c)) ) "%%d"
	  (itoa (setq ph (fix (* 60 (- c do))))) "'"
     		  (itoa (fix (* 60 (- (* 60 (- c do)) ph)))) "''"
  )
 )
 (setq N (rtos D 2 2))
 (setq H (COS (/ (/ (* C PI) 180) 2)))       ;CONG THUC TINH GIA TRI COS(A/2)
 (setq O (/ (SIN (/ (/ (* C PI) 180) 2)) (COS (/ (/ (* C PI) 180) 2)))) ;CONG THUC TINH GIA TRI TAN(A/2)
 (setq M (rtos (* O D) 2 2))                  ;CONG THUC TINH GIA TRI T
 (setq I (rtos (* D (- (/ 1 H) 1)) 2 2))      ;CONG THUC TINH GIA TRI P
 (setq J (rtos (/ (* D C PI) 180) 2 2))       ;CONG THUC TINH GIA TRI K
 (setq AA L)            ;GIA TRI A
 (setq RR (strcat "R=" N))            ;GIA TRI R
 (setq KK (strcat "K=" J))            ;GIA TRI K
 (setq TT (strcat "T=" M))            ;GIA TRI T
 (setq PP (strcat "P=" I))            ;GIA TRI P
 (setq MD (/ CAT 10))
 (setq CD (list (car CC) (+ (cadr CC) (/ CAT 3.1))))
 (command ".text" "m" CD MD 0.0 AA) (setq e (entlast))   ;TEXT GIA TRI A
 (command ".text" "" RR)              ;TEXT GIA TRI R
 (command ".text" "" KK)              ;TEXT GIA TRI K
 (command ".text" "" TT)              ;TEXT GIA TRI T
 (command ".text" "" PP)              ;TEXT GIA TRI P
 (command "txt2mtxt" e "")
  (setq CC (getpoint "\nCHON TAM CUA DUONG TRON: "))
 ))
   )                                  ;dong WHILE
 (SETVAR "CMDECHO" 1)
 (PRINC)
)                                      ;KET THUC DEFUN

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

×