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

Viết Lisp theo yêu cầu

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

Các bác giúp em với:

1. Lisp tính tổng các số (thông qua việc chọn các text chữ số) sau đó ghi ra text với height=2, Justify=Bottom Right, vị trí text do người dùng chỉ định.

2. Lisp tính hiệu hai số (thông qua việc chọn các text chữ số): số trừ thuộc layer có tên là "layer1", số bị trừ có tên là "layer2". Mỗi phép trừ gồm hai text thuộc 2 lớp (Layer1, layer2), cách nhau 1 đoạn bằng 2.3. Kết quả của mỗi phép trừ sẽ ghi vào bên trái của text thuộc "layer1" và cách 1 đoạn bằng 4. Vì trong bản vẽ của em có rất nhiều phép trừ tương tự như thế.

Em xin chân thành cám ơn các bác trướ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
Các bác giúp em với:

1. Lisp tính tổng các số (thông qua việc chọn các text chữ số) sau đó ghi ra text với height=2, Justify=Bottom Right, vị trí text do người dùng chỉ định.

2. Lisp tính hiệu hai số (thông qua việc chọn các text chữ số): số trừ thuộc layer có tên là "layer1", số bị trừ có tên là "layer2". Mỗi phép trừ gồm hai text thuộc 2 lớp (Layer1, layer2), cách nhau 1 đoạn bằng 2.3. Kết quả của mỗi phép trừ sẽ ghi vào bên trái của text thuộc "layer1" và cách 1 đoạn bằng 4. Vì trong bản vẽ của em có rất nhiều phép trừ tương tự như thế.

Em xin chân thành cám ơn các bác trước

Bạn xem lisp công trừ nhân chia text ở đây

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, nhưng kết quả thì nó nằm trùng với hàng text đầu tiên. Nên phải di chuyển ra hơi mất thời gian 1 chút.

Bác có thể viết cho em 1 đoạn lisp để căn lề các đối tượng được không. Ví dụ: có nhiều text 1, text 2 ... Nằm ở các vị trí khác nhau. Khi mình chọn các đối tượng này và đưa chúng về hoặc là: cùng giá trị y, cùng giá trị x. Như kiểu là cùng hàng, hoặc cùng cột ấy.

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

Cám ơn bác, nhưng kết quả thì nó nằm trùng với hàng text đầu tiên. Nên phải di chuyển ra hơi mất thời gian 1 chút.

Bác có thể viết cho em 1 đoạn lisp để căn lề các đối tượng được không. Ví dụ: có nhiều text 1, text 2 ... Nằm ở các vị trí khác nhau. Khi mình chọn các đối tượng này và đưa chúng về hoặc là: cùng giá trị y, cùng giá trị x. Như kiểu là cùng hàng, hoặc cùng cột ấy.

Cám ơn 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
Cám ơn bác, nhưng kết quả thì nó nằm trùng với hàng text đầu tiên. Nên phải di chuyển ra hơi mất thời gian 1 chút.

Bác có thể viết cho em 1 đoạn lisp để căn lề các đối tượng được không. Ví dụ: có nhiều text 1, text 2 ... Nằm ở các vị trí khác nhau. Khi mình chọn các đối tượng này và đưa chúng về hoặc là: cùng giá trị y, cùng giá trị x. Như kiểu là cùng hàng, hoặc cùng cột ấy.

Cám ơn bác

bạn dùng lệnh TX và TY trong bộ ACV 1.0

  • 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 người có thể giúp đỡ mình viết lisp sau được ko, mình cám ơn rất nhiều:

- mình có 2 đường thẳng cắt nhau, mình dùng lệnh trim cắt phần dư của 1 đoạn thẳng rồi sau đó mình lại dùng lệnh line để vẽ lại đường thẳng đó rồi đổi thuộc tính của nó sang nét đứt. Vậy mình xin nhờ mọi người viết lisp để nó tự dùng lệnh cắt trim rồi đổi sang thuộc tính khác. Mình cám ơn mọi người rất nhiều

 

Bạn dùng code này sẽ cho phép cắt 2 đường LINE

(defun c:catdt ( / ent1 ent2 sp1 sp2 ep1 ep2 pickpoint int layer)
 (setq ent1 (car (entsel "\nChon duong chan:"))
ent2 (entsel "\nChon diem cat:")
sp1 (cdr (assoc 10 (entget ent1)))
ep1 (cdr (assoc 11 (entget ent1)))
sp2 (cdr (assoc 10 (entget (car ent2))))
ep2 (cdr (assoc 11 (entget (car ent2))))
pickpoint (cadr ent2)
int (inters sp1 ep1 sp2 ep2)
layer (cdr (assoc 8 (entget (car ent2))))
)
 (entdel (car ent2))
 (if (<
(distance sp2 int)
(distance sp2 pickpoint))
   (vedt1)
   (vedt2)
   )
 )
(defun vedt2 ()
 (entmake (list ( cons 0 "line") (cons 8 layer) (cons 10 sp2) (cons 11 int) (cons 6  "HIDDEN")))
 (entmake (list ( cons 0 "line") (cons 8 layer) (cons 10 int) (cons 11 ep2) ))
 )
(defun vedt1 ()
 (entmake (list ( cons 0 "line") (cons 8 layer) (cons 10 ep2) (cons 11 int) (cons 6  "HIDDEN")))
 (entmake (list ( cons 0 "line") (cons 8 layer) (cons 10 int) (cons 11 sp2) ))
 )

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ệnh là SD (sắp dim)

 

Chương trình sẽ yêu cầu người sử dụng chọn đường Dim chuẩn. Sau đó, yêu cầu người sử dụng chọn các đường Dim cần sắp xếp. Chương trình sẽ tự động dàn các Dim theo hàng đều.

sapdim.gif

Bác có thể nâng cấp viết lệnh sắp xếp SD này cho đường kích thước theo dạng xiên có được 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ác nguyen hoanh em có vấn đề này nhờ bác giúp: em có 1 bản vẽ trên đó có các text khác nhau ở các lớp khác nhau. bác xem có lisp nào mà xuất ra file *.txt hoặc *csv mà mỗi lớp 1 cột. cam ơn bác 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
Bác nguyen hoanh em có vấn đề này nhờ bác giúp: em có 1 bản vẽ trên đó có các text khác nhau ở các lớp khác nhau. bác xem có lisp nào mà xuất ra file *.txt hoặc *csv mà mỗi lớp 1 cột. cam ơn bác nhiều

Thứ tự của text thì sao bạn,

Trường hợp các đối tượng trong các layer không giống nhau thì mặc 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
Bác có thể nâng cấp viết lệnh sắp xếp SD này cho đường kích thước theo dạng xiên có được không ?

Bạn hãy dùng dimlinear, sau đó rotate cho xiên đi là dùng được lệnh SD (thay vì dùng dimaligned).

 

tôi không tiếp tục nâng cấp lệnh SD nữa, lý do là đến phiên bản ACAD 2008 đã có lệnh này rồ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
cần thứ tự của text. mà các đối tượng cùng một layer thì liệt kê vào một côt thôi.

câu: 'cần thứ tự của text' của bạn chẳng rõ chút nào. thứ tự như thế nào? sắp xếp theo trục x, trục y, hay theo thời điểm create, hay theo giá trị,...

 

Tôi chờ file dwg và file csv của bạn. File dwg chứa các đối tượng text. File csv là giá trị text sau khi chạy lisp.

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 không tiếp tục nâng cấp lệnh SD nữa, lý do là đến phiên bản ACAD 2008 đã có lệnh này rồi.

Bác Hoành ơi lệnh này trong cad 2008 là như thế nào thế.

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à hình mẫu bác Nguyen hoanh xem giúp

Không hiểu ý bạn.

 

Trong file CAD không có text nào mang giá trị: 'Hinh','Toa do lay toa do tam hinh','1','Truc X','Truc Y','Layer_ten','Layer_tuoi','Layer_ngay_sanh',...

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
Hay là số thứ tự của tưng hình mà bác
Tôi chẳng hiểu gì cả, Sao lại có hình gì ở đây!

File csv của bạn cũng chẳng liên quan tẹo nào đến file dwg.

 

Yêu cầu ban đầu của bạn đây:

Bác nguyen hoanh em có vấn đề này nhờ bác giúp: em có 1 bản vẽ trên đó có các text khác nhau ở các lớp khác nhau. bác xem có lisp nào mà xuất ra file *.txt hoặc *csv mà mỗi lớp 1 cột. cam ơn bác nhiều
Ở yêu cầu này làm gì có hình nào đâ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

Em nhờ các bác trên CadViet giúp e viết 1 lệnh với

- Lệnh này khi chọn 2 điểm trên màn hình

(thì có 1 khoảng cách khác 0)

- NHập vào số điểm cần chia đều

(chia đều khoảng cách bên trên giống lệnh Divide)

- Vẽ các đoạn line có chiều dài 500 đơn vị và chèn vào các điểm đó

(Ở lệnh Div có tuỳ chon là Block )

Cảm ơn các bác trước 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
Bạn hãy nói rõ hơn!

Em thực thi lệnh như sau:

+ Lệnh cong:

nhap vao hang text dau tien tiến hành chọn hàng text đầu tiên

nhap vao hang text thứ hai tiến hành chọn hàng text thứ hai

Và kết quả của phép cộng hai hàng này là nó nằm trùng vào hàng text1 có cùng kích cỡ chữ, cùng layer. Nên khó di chuyển ra khỏi text1

Tương tự phép trừ cũng vậy. Bác có cách nào để kết quả của các phép tính không trùng với text1 không ?

 

Đây là lisp cộng trừ nhân chia của bác đây. Giúp em với nhé

 

(defun c:cong () (xulytext +))

(defun c:tru () (xulytext -))

(defun c:nhan () (xulytext *))

(defun c:chia () (xulytext /))

 

(defun xulytext (ham / lst1 lst2 sst1 sst2 ykq)

(princ "\nNhap vao hang text dau tien: ")

(setq sst1 (ssget '((0 . "TEXT"))))

(princ "\nNhap vao hang text thu hai: ")

(setq sst2 (ssget '((0 . "TEXT"))))

 

(if (/= (sslength sst1) (sslength sst2))

(alert

"\nHai tap chon co so doi tuong khong bang nhau!\nHay chon lai!"

)

(progn

(setq

lst1 (mapcar 'entget (ss2ent sst1))

lst2 (mapcar 'entget (ss2ent sst2))

Ykq (- (* 2 (caddr (assoc 10 (car lst2)))) (caddr (assoc 10 (car lst1))))

lsterr ""

)

(mapcar

'entmake

(mapcar '(lambda (t1 t2 / tt pp gt)

(setq gt (vl-catch-all-apply

'ham

(list (atof (cdr (assoc 1 t1)))

(atof (cdr (assoc 1 t2)))

)

)

)

(if (vl-catch-all-error-p gt)

(setq lsterr (strcat lsterr "- " (vl-catch-all-error-message gt) "\n")

gt "#"

)

(setq gt (vl-string-right-trim "." (vl-string-right-trim "0" (rtos gt))))

)

(setq

p (cdr (assoc 10 t1))

pp (list 10 (car p) Ykq (caddr p))

tt (subst (cons 1 gt) (assoc 1 t1) t1)

tt (subst pp (assoc 10 t1) tt)

)

)

lst1

lst2

)

)

(if (/= lsterr "")

(alert

(strcat "Trong qua trinh tinh toan, co cac loi sau:\n"

lsterr

)

)

)

)

)

)

(defun ss2ent(ss / sodt index lstent)

(setq

sodt (if ss (sslength ss) 0)

index 0

)

(repeat sodt

(setq ent (ssname ss index)

index (1+ index)

lstent (cons ent lstent)

)

)

(reverse lstent)

)

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ác Nguyen hoanh em gửi bác file cad này bác nghiên cứu cho em file lisp nhé. em vẽ ra các hình đó và thực hiện lisp để tính ra diện tích rồi ghi vào đúng tâm hình đó. sau đó lại dùng lisp để xuất cái diện tích đó ra file *TXT. cám ơn bác nhieu.

http://www.cadviet.com/upfiles/Drawing_3.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
Em thực thi lệnh như sau:

+ Lệnh cong:

nhap vao hang text dau tien tiến hành chọn hàng text đầu tiên

nhap vao hang text thứ hai tiến hành chọn hàng text thứ hai

Và kết quả của phép cộng hai hàng này là nó nằm trùng vào hàng text1 có cùng kích cỡ chữ, cùng layer. Nên khó di chuyển ra khỏi text1

Tương tự phép trừ cũng vậy. Bác có cách nào để kết quả của các phép tính không trùng với text1 không ?

Đây là lisp cộng trừ nhân chia của bác đây. Giúp em với nhé

 

Tại sao nhỉ?

 

Kết quả Lisp này tạo ra 1 hàng text nằm dưới hàng text thứ 2 mà!

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

×