Đến nội dung


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

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#861 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 14 July 2008 - 11:32 PM

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.
  • 0

#862 dvdcad

dvdcad

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 15 July 2008 - 08:08 AM

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.
  • 0

#863 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 15 July 2008 - 09:51 AM

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.
  • 0

#864 vinataba

vinataba

    biết vẽ circle

  • Members
  • PipPip
  • 30 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 15 July 2008 - 11:07 AM

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.
[/quote]
Bác Hoành ơi lệnh này trong cad 2008 là như thế nào thế.
  • 0

#865 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 15 July 2008 - 11:51 AM

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

DIMSPACE
  • 0

#866 dvdcad

dvdcad

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 15 July 2008 - 12:45 PM

Đấy là hình mẫu bác Nguyen hoanh xem giúp
http://www.cadviet.c...files/Book1.csv
http://www.cadviet.c...s/Drawing_2.dwg
  • 0

#867 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 15 July 2008 - 01:27 PM

Đấ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',...
  • 0

#868 dvdcad

dvdcad

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 15 July 2008 - 03:40 PM

Hay là số thứ tự của tưng hình mà bác

http://www.cadviet.c...les/Book1_1.csv
  • 0

#869 Sony2007

Sony2007

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 85 (tàm tạm)

Đã gửi 15 July 2008 - 05:28 PM

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

Bác Hoành ơi, chỉnh ở dòng lệnh nào để kết quả cộng trừ không nằm trùng ở hàng text đầu tiên
  • 0

#870 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 15 July 2008 - 09:18 PM

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?
  • 0

#871 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 15 July 2008 - 10:55 PM

Bác Hoành ơi, chỉnh ở dòng lệnh nào để kết quả cộng trừ không nằm trùng ở hàng text đầu tiên

Bạn hãy nói rõ hơn!
  • 0

#872 kien_long

kien_long

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 15 July 2008 - 11:46 PM

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é !
  • 0

#873 Sony2007

Sony2007

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 85 (tàm tạm)

Đã gửi 16 July 2008 - 06:54 AM

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)
)
  • 0

#874 dvdcad

dvdcad

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 16 July 2008 - 07:01 AM

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.c...s/Drawing_3.dwg
  • 0

#875 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 16 July 2008 - 08:30 AM

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?
  • 0

#876 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 16 July 2008 - 08:43 AM

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.c...s/Drawing_3.dwg

Nghĩa là sao nhỉ? tôi đang đi vào mê cung với vấn đề của bạn.
Xin nêu lại sơ bộ các yêu cầu của bạn.
Lần 1: Bạn yêu cầu xuất text ra file txt hoặc csv, mỗi layer theo 1 cột, mỗi text là 1 hàng. Tôi phản hồi là bạn nêu rõ hơn thứ tự text được xuất ra.
Lần 2: Bạn đưa cho tôi 1 hình dwg và 1 file csv chẳng liên quan gì đến nhau. Tôi phản hồi là bạn hãy giải thích rõ hơn.
Lần 3: Bạn giải thích bằng cách đưa ra khái niệm hình mà trước đó chưa xuất hiện bao giờ. Tôi muốn bạn lý giải rõ về hình.
Lần 4: Bạn lại muốn xuất text ra file txt, chẳng thấy nhắc đến hình, layer,....

Bạn có thể nói thật ngắn gọn, súc tích cái bạn muốn được không?
  • 0

#877 vanduong

vanduong

    biết lệnh adcenter

  • Validating
  • PipPipPipPipPipPipPip
  • 1383 Bài viết
Điểm đánh giá: 536 (tốt)

Đã gửi 16 July 2008 - 09:01 AM

Nghĩa là sao nhỉ? tôi đang đi vào mê cung với vấn đề của bạn.
Bạn có thể nói thật ngắn gọn, súc tích cái bạn muốn được không?

thật khó cho bác hoành, ông dvdcad này đặt vấn đề khó hiểu ý quá - mập mờ - mập mờ ngay cả trên file (hãy ghi rõ yêu cầu trên flle dwg kèm theo - thật súc tích-chi tiết nếu muốn người ta giúp)
  • 0

#878 Sony2007

Sony2007

    biết lệnh copy

  • Members
  • PipPipPip
  • 115 Bài viết
Điểm đánh giá: 85 (tàm tạm)

Đã gửi 16 July 2008 - 10:07 AM

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?

Em dùng rồi mà. Dùng rồi mới bị trùng ngay ở hàng text thứ nhất đấy mà. Thì em dùng code mà em gửi lên đấy thôi. Hay có trục trặc ở chố nào không bác.
  • 0

#879 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 16 July 2008 - 10:16 AM

Em dùng rồi mà. Dùng rồi mới bị trùng ngay ở hàng text thứ nhất đấy mà. Thì em dùng code mà em gửi lên đấy thôi. Hay có trục trặc ở chố nào không bác.

bạn up file ví dụ của bạn lên diễn đàn xem?
  • 0

#880 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 16 July 2008 - 10:23 AM

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é !

Bạn hãy upload 1 file dwg ví dụ đi.
2 điều kiện đầu tiên thì tôi hiểu.
Đến điều kiện thứ 3, vẽ các line có chiều dài 500 đơn vị và chèn vào các điểm đó thì chiều hướng các line này thế nào?
  • 0