Đến nội dung


Hình ảnh
- - - - -

trích do


  • Please log in to reply
55 replies to this topic

#41 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 30 September 2009 - 02:30 PM

Mình chạy lisp của Anh phamthanhbinh, thường bị lỗi về bảng và ghi tên điểm, cạnh như file gởi kèm.
Mong được anh giúp
http://www.cadviet.c..._trich_thua.rar

Chào phamthanhbinh,
lisp của bác có 1 vài điều mình góp ý như sau:
- Lúc ban đầu nên đưa biến OSMODE = 0
- Khi tạo boundary xong, nên dùng lệnh move đối tượng (entlast), theo thiep thì nên dùng hàm (ACET-SS-DRAG-MOVE ss....) thích hợp hơn nhóm lệnh (command "copyclip" ent "") (command "pasteclip" pause "")
- Khi tạo bảng thống kê xong, thì nên dùng hàm (ACET-SS-DRAG-MOVE ss....) để move bảng thống kê về vị trí thích hợp
- Các điểm góc ranh nên đưa ra ngoài ranh (cái này hơi khó) và chiều cao bằng chiều cao text kích thước.
- Và khi tạo line, text, nên hạn chế bớt dùng (command .....) mà thay bằng hàm entmake, như vậy lisp sẽ chạy nhanh hơn và hy vọng không còn nhấp nháy nữa.
Một vài góp ý chân thành. Trân trọng!
  • 1

#42 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 September 2009 - 02:40 PM

Mình chạy lisp của Anh phamthanhbinh, thường bị lỗi về bảng và ghi tên điểm, cạnh như file gởi kèm.
Mong được anh giúp
http://www.cadviet.c..._trich_thua.rar

Chào bạn Khaosat 2009,
Mình đã xem cái bảng tọa độ bị lỗi của bạn thấy có một số điều cần trao đổi như sau:
1/- Các đường line vẽ bảng bị sai lệch:
Bạn kiểm tra lại kỹ các dòng code sau đây:
(command "line" pt5 pt8 "")
(command "line" pt6 pt9 "")
Đây là hai dòng code để thực hiện vẽ hai line từ điểm pt5 đến pt8 và pt6 đến pt9. Rõ ràng trên bản lỗi của bạn các điểm pt8 và pt9 đã được lấy đúng vị trí của nó. Hai điểm này đều được lấy theo tọa độ độc cực tương đối so với các điểm chuẩn là pt5 và pt6. Điều này thể hiện ở các dòng code sau trong hàm setq:
pt8 (polar pt5 (/ pi 2) (* (+ i 2) k))
pt9 (polar pt6 (/ pi 2) (* (+ i 3) k))
Do vậy chắc chắn các điểm pt5 và pt6 phải được lấy đúng vị trí rồi.
Vì thế các line nếu thực hiện đúng theo các dòng code đã nói ở trên chắc chắn phải đúng chứ không thể xiên như bạn được. Nghĩa là hai dòng code đó đã bị bạn hoặc ai đó sửa đổi. Theo thiển ý của mình hai dòng này bị biến thành :
(command "line" pt0 pt8 "")
(command "line" pt0 pt9 "")
Nếu như vậy bạn hãy sửa lại cho đúng là OK
2/- Text 4.85 bị đặt sai vị trí trong bảng tọa độ góc ranh:
Thật tình mình không thể tìm ra lý do của nó vì theo lisp mình viết các text này được ghi trong vòng lặp While theo thứ tự các đỉnh góc ranh. Vậy mà tất cả text trước và sau nó trong vòng lặp đều đúng với vị trí đã định, chỉ riêng ở bước ghi text này thì lại bị sai vị trí. Vị trí của các text trong vòng lặp này được xác định bởi điểm đặt text là pt theo dòng code:
pt (list (+ (car pt9) 2) (- (cadr pt9) (+ (* (+ d 3) k) 2)))
Do đó với hiện trạng cái sai như bạn đã gửi mình cho rằng không thể là do code lisp sai mà rất có thể text này sau khi chạy lisp mới bị di chuyển đi vì một lý do nào đó bạn ạ.
Bạn hãy thử chạy lisp lại cẩn thận và kiểm tra kết quả xem nhé.

3/- Như mình đã nói, mình chỉ đang học lisp nên việc viết code sai có thể xảy ra, mình không bảo thủ nhưng mình nghĩ cần phải hiểu nội dung cái mình viết nên mình đã cố gắng mà mới chỉ giải thích cho bạn được đến vậy. Các bác khác trên diễn đàn nếu có thể giúp mình chỉ ra chỗ sai thì mình cảm ơn lắm lắm. Tuy nhiên mình cũng khá tư tin là mình đã kiểm tra kỹ nó rồi, không thể có cái sai tệ đến như vậy được bạn ạ. Mong bạn thử test lại bạn nhé. Để chắc ăn bạn nên tắt chế độ snap trên bản vẽ đi bạn nhé.
Chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#43 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 September 2009 - 03:36 PM

Chào phamthanhbinh,
lisp của bác có 1 vài điều mình góp ý như sau:
- Lúc ban đầu nên đưa biến OSMODE = 0
- Khi tạo boundary xong, nên dùng lệnh move đối tượng (entlast), theo thiep thì nên dùng hàm (ACET-SS-DRAG-MOVE ss....) thích hợp hơn nhóm lệnh (command "copyclip" ent "") (command "pasteclip" pause "")
- Khi tạo bảng thống kê xong, thì nên dùng hàm (ACET-SS-DRAG-MOVE ss....) để move bảng thống kê về vị trí thích hợp
- Các điểm góc ranh nên đưa ra ngoài ranh (cái này hơi khó) và chiều cao bằng chiều cao text kích thước.
- Và khi tạo line, text, nên hạn chế bớt dùng (command .....) mà thay bằng hàm entmake, như vậy lisp sẽ chạy nhanh hơn và hy vọng không còn nhấp nháy nữa.
Một vài góp ý chân thành. Trân trọng!

Chào bác Thiep,
Rất cám ơn bác đã góp ý chân tình, thực lòng mình cũng rất muốn học cho thiệt kỹ rồi mới xài, nhưng quả thực do trình độ còn non nên học chậm quá. Qua các bài viết của các bác mình cũng mót được rất nhiều. Mấy hàm thuộc nhóm ACET-.... bác có giới thiệu nhưng mình đọc vẫn chưa thông được, rồi cả nhóm các hàm vlax, vl nữa, mình đọc nó chậm vô lắm, nhiều cái khái niệm mình cũng chưa hiểu hết được nên đành cứ từ từ gặm dần. Sở dĩ vậy là do cái vốn tiếng Anh nó còn lủng củng quá bác ạ.
Một khó khăn nữa là các hàm thuộc nhóm ACET-... này theo như bác Giabach nói thì phải cài Express Tools mới xài được mà mình thì chưa cài được nó. Lý do là cái Cad2004 của mình do thợ nó cài giùm chứ mình chả có đĩa cài bác ạ. Thế mới khó để vọc chứ lị.
Qua các cái lisp mình viết chắc bác cũng hiểu được cái cách tư duy của mình, nó hơi lẩm cẩm nhưng phần nào nó cũng rất thật với con người mình, nghĩ sao mình mần vậy, cố gắng xài những cái thiệt dễ hiểu, đơn giản nhưng có hiệu quả thôi bác ạ. Mình cũng còn đang học lisp mà nên chắc chắn còn rất nhiều điều cần học nữa, như bác nói đó Học lisp học nữa học mãi mà. Chưa thiệt là hiệu quả lắm nhưng ít nhiều cũng giúp mình hiểu thêm cái công cụ này và có thêm hứng thú để học bác ạ.
Lisp còn nhiều, chắc còn phải mót của các bác hoài hoài à, mong các bác luôn mạnh khỏe, tâm sáng lòng trong để có được nhiều cái lisp hay cho mình mót với.
Hẹn gặp bác. Thân chào.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#44 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 30 September 2009 - 04:49 PM

Chào bạn Khaosat 2009,
Mình đã xem cái bảng tọa độ bị lỗi của bạn thấy có một số điều cần trao đổi như sau:
1/- Các đường line vẽ bảng bị sai lệch:
Bạn kiểm tra lại kỹ các dòng code sau đây:
(command "line" pt5 pt8 "")
(command "line" pt6 pt9 "")
Đây là hai dòng code để thực hiện vẽ hai line từ điểm pt5 đến pt8 và pt6 đến pt9. Rõ ràng trên bản lỗi của bạn các điểm pt8 và pt9 đã được lấy đúng vị trí của nó. Hai điểm này đều được lấy theo tọa độ độc cực tương đối so với các điểm chuẩn là pt5 và pt6. Điều này thể hiện ở các dòng code sau trong hàm setq:
pt8 (polar pt5 (/ pi 2) (* (+ i 2) k))
pt9 (polar pt6 (/ pi 2) (* (+ i 3) k))
Do vậy chắc chắn các điểm pt5 và pt6 phải được lấy đúng vị trí rồi.
Vì thế các line nếu thực hiện đúng theo các dòng code đã nói ở trên chắc chắn phải đúng chứ không thể xiên như bạn được. Nghĩa là hai dòng code đó đã bị bạn hoặc ai đó sửa đổi. Theo thiển ý của mình hai dòng này bị biến thành :
(command "line" pt0 pt8 "")
(command "line" pt0 pt9 "")
Nếu như vậy bạn hãy sửa lại cho đúng là OK
2/- Text 4.85 bị đặt sai vị trí trong bảng tọa độ góc ranh:
Thật tình mình không thể tìm ra lý do của nó vì theo lisp mình viết các text này được ghi trong vòng lặp While theo thứ tự các đỉnh góc ranh. Vậy mà tất cả text trước và sau nó trong vòng lặp đều đúng với vị trí đã định, chỉ riêng ở bước ghi text này thì lại bị sai vị trí. Vị trí của các text trong vòng lặp này được xác định bởi điểm đặt text là pt theo dòng code:
pt (list (+ (car pt9) 2) (- (cadr pt9) (+ (* (+ d 3) k) 2)))
Do đó với hiện trạng cái sai như bạn đã gửi mình cho rằng không thể là do code lisp sai mà rất có thể text này sau khi chạy lisp mới bị di chuyển đi vì một lý do nào đó bạn ạ.
Bạn hãy thử chạy lisp lại cẩn thận và kiểm tra kết quả xem nhé.

3/- Như mình đã nói, mình chỉ đang học lisp nên việc viết code sai có thể xảy ra, mình không bảo thủ nhưng mình nghĩ cần phải hiểu nội dung cái mình viết nên mình đã cố gắng mà mới chỉ giải thích cho bạn được đến vậy. Các bác khác trên diễn đàn nếu có thể giúp mình chỉ ra chỗ sai thì mình cảm ơn lắm lắm. Tuy nhiên mình cũng khá tư tin là mình đã kiểm tra kỹ nó rồi, không thể có cái sai tệ đến như vậy được bạn ạ. Mong bạn thử test lại bạn nhé. Để chắc ăn bạn nên tắt chế độ snap trên bản vẽ đi bạn nhé.
Chúc bạn thành công.

Líp của bạn , mình không dám chỉnh gì hết, load vào dùng.
Mình tìm được nguyên nhân rố bạn à. Phải tắchế độ Snap và ortho thì nó mới ra bảng đúng.
Nhưng hàng số chưa được canh chỉnh ngay lắm. mong được bạn giúp tiếp.
  • 0

#45 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 September 2009 - 05:41 PM

Líp của bạn , mình không dám chỉnh gì hết, load vào dùng.
Mình tìm được nguyên nhân rố bạn à. Phải tắchế độ Snap và ortho thì nó mới ra bảng đúng.
Nhưng hàng số chưa được canh chỉnh ngay lắm. mong được bạn giúp tiếp.

Chào bạn Khaosat 2009,
1/- Ý bạn căn text như thế nào? Hiện tại mình căn cột text theo điểm đặt text ở góc dưới bên trái của text. Bạn xem lisp sẽ thấy. Còn về hàng thì cột giá trị chiều dài cạnh được căn vào khoảng giữa hai dòng text của cột text tọa độ.

2/- Bạn có thể bổ sung các dòng code sau đây vào cái lisp đó để không phải tắt bật chế độ snap và ortho nữa:
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
Hai dòng này chèn vào phía trên dòng lệnh (prompt "Hay pick thua dat") và dưới dòng (vl-load-com)
Chèn thêm dòng lệnh sau:
(setvar "osmode" oldos)
Vào trên dòng lệnh (princ)

3/- Bạn cho biết ý kiến về cái lisp trich họa đồ vị trí của mình. Nếu Ok mình có thể bổ sung hoàn chỉnh lại nó bao gồm cả phần mà cái lisp trích thửa đã làm.

Chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#46 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 01 October 2009 - 08:13 AM

Chào bạn Khaosat 2009,
1/- Ý bạn căn text như thế nào? Hiện tại mình căn cột text theo điểm đặt text ở góc dưới bên trái của text. Bạn xem lisp sẽ thấy. Còn về hàng thì cột giá trị chiều dài cạnh được căn vào khoảng giữa hai dòng text của cột text tọa độ.

Việc tạo bảng kê toạ độ thỉ các số căn về bên trái của cột, mong bạn giúp cho căn về bên phải hay nằm cân ở giửa cột.
Số ghi cạnh trên thửa có những số qúa sát vào cạnh, mong bạn chỉnh cho ra ít.
  • 0

#47 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 01 October 2009 - 08:30 AM

Chào bạn Khaosat 2009,

3/- Bạn cho biết ý kiến về cái lisp trich họa đồ vị trí của mình. Nếu Ok mình có thể bổ sung hoàn chỉnh lại nó bao gồm cả phần mà cái lisp trích thửa đã làm.

Riêng về Lisp trích họa đồ, do cấu hình máy cơ quan thấp, file bản vẽ lớn, nó chớp Trung bình 20 phút 1 khu vực trích ra, và việc tạo đường bao trong thửa chưa khớp .Bạn xem lại giúp
  • 0

#48 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 01 October 2009 - 12:09 PM

Chào khaosat2009, Lisp cwb của bác Gia_bach viết rất tuyệt vời khi copy, xóa, move các đối tượng trong ngoài 1 vùng kín, hay giữa 2 vùng kín. Tuy nhiên, các đối tượng gốc bị bẻ gãy hết. Lisp Thiep viết sau đây sẽ trích thửa bản đồ, theo 1 ô vuông có kích thước cạnh do user tự chọn.
Sau khi tạo ô vuông xong, user rê ô vuông này vào khu vực cần trích thửa, nó sẽ copy các đối tượng bên trong và giao với ô vuông (ô vuông giống như 1 nam châm). Sau đó, user rê các đối tượng này đến vị trí cần đặt, ví dụ đặt ở giữa bản vẽ TRÍCH ĐO ĐỊA CHÍNH THỬA ĐẤT. Lisp sẽ cắt bỏ những đường bên ngoài ô vuông.

;;;-----------------------
(defun SS-enlst (ss / c L)
(setq c -1)
(repeat (sslength ss)
(setq L (cons (ssname ss (setq c (1+ c))) L))
)
(reverse L)
)
;;;====================================================================
(defun break_with (Lstent enL / lst masterlist ss oc break_obj intpts)
(princ "\nCalculating Break Points, Please Wait.\n")

;;========================================
;; Break entity at break points in list
;;========================================

(defun break_obj (ent brkptlst / brkobjlst en
enttype maxparam closedobj minparam
obj obj2break p1param p2param
brkpt2 dlst idx brkptS
brkptE brkpt result result
ignore dist tmppt #ofpts
enddist lastent obj2break stdist
)
(setq obj2break ent
brkobjlst (list ent)
enttype (dxf 0 ent)
)
(if (not (or (eq (dxf 0 obj2break) "TEXT")
(eq (dxf 0 obj2break) "MTEXT")
)
)
(setq closedobj (vlax-curve-isclosed obj2break))
)
(setq spt (vlax-curve-getstartpoint ent)
ept (vlax-curve-getendpoint ent)
brkptlst (vl-remove-if
'(lambda (x)
(or (< (distance x spt) 0.0001)
(< (distance x ept) 0.0001)
)
)
brkptlst
)
)
(if (and brkptlst
(not (or (eq (dxf 0 obj2break) "TEXT")
(eq (dxf 0 obj2break) "MTEXT")
)
)
)
(progn
(setq brkptlst
(mapcar
'(lambda (x)
(list
x
(vlax-curve-getdistatparam
obj2break
(cond
((vlax-curve-getparamatpoint obj2break x)
)
((vlax-curve-getparamatpoint
obj2break
(vlax-curve-getclosestpointto
obj2break
x
)
)
)
)
)
)
)
brkptlst
)
)

(setq
brkptlst (vl-sort brkptlst
'(lambda (a1 a2) (< (cadr a1) (cadr a2)))
)
)

(foreach brkpt (reverse brkptlst)
(setq brkptS (car brkpt)
brkptE brkptS
)
;; get last entity created via break in case multiple breaks
(if brkobjlst
(progn
(setq tmppt brkptS) ; use only one of the pair of breakpoints
;; if pt not on object x, switch objects
(if (not (numberp (vl-catch-all-apply
'vlax-curve-getdistatpoint
(list obj2break tmppt)
)
)
)
(progn ; find the one that pt is on
(setq idx (length brkobjlst))
(while
(and (not (minusp (setq idx (1- idx))))
(setq obj (nth idx brkobjlst))
(if (numberp (vl-catch-all-apply
'vlax-curve-getdistatpoint
(list obj tmppt)
)
)
(null (setq obj2break obj))
; switch objects, null causes exit
t
)
)
)
)
)
)
); end (if brkobjlst

;;; Handle any objects that can not be used with the Break Command
;;; using one point, gap of 0.000001 is used
(if (not (or (eq (dxf 0 obj2break) "TEXT")
(eq (dxf 0 obj2break) "MTEXT")
)
)
(setq closedobj (vlax-curve-isclosed obj2break))
)
;;; single breakpoint ----------------------------------------------------
(if
(and closedobj
(not (setq
brkptE (vlax-curve-getPointAtDist
obj2break
(+ (vlax-curve-getdistatparam
obj2break
;;(vlax-curve-getparamatpoint obj2break brkpts)) 0.00001))))
;; ver 2.0 fix
(cond
((vlax-curve-getparamatpoint
obj2break
brkpts
)
)
((vlax-curve-getparamatpoint
obj2break
(vlax-curve-getclosestpointto
obj2break
brkpts
)
)
)
)
)
0.00001
)
)
)
)
)
(setq
brkptE (vlax-curve-getPointAtDist
obj2break
(- (vlax-curve-getdistatparam
obj2break
(cond ((vlax-curve-getparamatpoint
obj2break
brkpts
)
)
((vlax-curve-getparamatpoint
obj2break
(vlax-curve-getclosestpointto
obj2break
brkpts
)
)
)
)
)
0.00001
)
)
); end setq brkptE
); end fi (and closedobj

;; (if (null brkptE) (princ)) ; debug
(setq LastEnt (GetLastEnt))
(if (not (or (eq (dxf 0 obj2break) "TEXT")
(eq (dxf 0 obj2break) "MTEXT")
)
)
(command "._break"
obj2break
"_non"
(trans brkptS 0 1)
"_non"
(trans brkptE 0 1)
)
)
(and (= "CIRCLE" enttype) (setq enttype "ARC"))
(if (and (not closedobj) ; new object was created
(not (equal LastEnt (entlast)))
)
(setq brkobjlst (cons (entlast) brkobjlst))
); end (if (and
); end (foreach brkpt
);end progn brkptlst
); end if brkptlst

); defun break_obj

;;====================================
;; CAB - get last entity in datatbase
(defun GetLastEnt (/ ename result)
(if (setq result (entlast))
(while (setq ename (entnext result))
(setq result ename)
)
)
result
)
;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;; S T A R T S U B R O U T I N E H E R E
;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

(if (and Lstent enL)
(progn
;; CREATE a list of entity & it's break points
(foreach en Lstent
; check each object in Lstent
(if (not (acet-layer-locked (dxf 8 en)))
(progn
(setq lst nil)
;; check for break pts with other objects in Lstentwith
(if (and (not (equal en enint))
(setq intpts (acet-geom-intersectwith en enL 0))
)
(setq lst (append intpts lst))
; entity w/ break points
)
(if lst
(setq masterlist
(cons (cons en lst) masterlist)
)
)
)
)
)
(princ "\nBreaking Objects.\n")
(if masterlist
(foreach obj2brk masterlist
(break_obj (car obj2brk) (cdr obj2brk))
)
)
)
)
);end break_with
;;===========================================================================
;; get all objects touching entities in the sscross
;; limited obj types to "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE"
;; returns a list of enames
;;===========================================================================
(defun gettouching (en / ss lst lstb lstc objl)
(and
(setq objl (vlax-ename->vla-object en))
(setq
ss
(ssget
"_A"
(list
(cons 0
"LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE"
)
(cons 410 (getvar "ctab"))
)
)
)
(setq lst (SS-enlst ss)
lst (mapcar 'vlax-ename->vla-object lst))
(mapcar
'(lambda (x)
(if (not
(vl-catch-all-error-p
(vl-catch-all-apply
'(lambda ()
(vlax-safearray->list
(vlax-variant-value
(vla-intersectwith objl x acextendnone)
)
)
)
)
)
)
(setq lstc (cons (vlax-vla-object->ename x) lstc))
)
)
lst
)
)
lstc
)
;;;------------------------------------------------
(defun LWP (Lpoint *Model* / PntArr)
(setq PntArr (vlax-make-safearray
vlax-vbDouble
(cons 0 (1- (length Lpoint)))
)
)
(vlax-safearray-fill PntArr Lpoint)
(vla-AddLightWeightPolyline *Model* PntArr)
)
;;;------------------------------------------------
(defun DXF (code en) (cdr (assoc code (entget en))))
;;;============================================================
;;;=======================MAIN LISP============================
;;;============================================================
(defun c:trichthua (/ ss p2 encur lstss1 emin emax p3 LenssBR)
(setq ActDoc (vla-get-ActiveDocument (vlax-get-acad-object))
*Model* (vla-get-ModelSpace ActDoc)
)
(vla-StartUndoMark ActDoc)
(setq a (cond (a)
(50)
)
)
(setq olda a)
(setq a (getreal (strcat "\nChon kich thuoc cat hinh vuong cat <"
(rtos olda 2 1)
"> : ")))
(if (null a) (setq a olda))
(setq emin (list (car (getvar "extmin")) (cadr (getvar "extmin"))))
(setvar "cecolor" "104")
(setq lstp (list (car emin)
(cadr emin)
(+ (car emin) a)
(cadr emin)
(+ (car emin) a)
(+ (cadr emin) a)
(car emin)
(+ (cadr emin) a)
)
)
(vla-put-closed (LWP lstp *Model*) :vlax-True)
(setq ss (ssadd (entlast) (ssadd)))
(setq p2 (ACET-SS-DRAG-MOVE
ss
(list (car emin) (cadr emin))
"Chon vi tri bat dau trich thua: "
)
)
(command ".move" ss "" emin p2)
(setq encur (entlast)
lstp (acet-geom-VERTEX-LIST encur))
(setq ss (ssdel encur (ssget "_CP" lstp)))
(command ".copy" ss "" p2 p2)
(setq p3 (ACET-SS-DRAG-MOVE
(ssadd encur ss)
p2
"Chon vi tri dat ban do trich thua: "
)
)
(command ".move" ss encur "" p2 p3)
(setvar "cecolor" "0")
(setq encur (ssname (ssget "X" '((62 . 104))) 0))
(setq lstobj1 (vl-remove encur (gettouching encur))
ss (acet-list-to-ss lstobj1)
)
(acet-ss-zoom-extents ss)
(break_with lstobj1 encur)
(vlax-invoke-method ActDoc 'Regen acActiveViewport)
(vla-offset (vlax-ename->vla-object encur) (* (getvar "viewsize") 0.002))
(setq lst3 (acet-geom-vertex-list (entlast)))
(entdel (entlast))
(setq LenssBR (SS-enlst (ssget "F" lst3)))
(foreach x LenssBR
(if (or (not (eq (dxf 0 x) "TEXT"))
(not (eq (dxf 0 x) "MTEXT"))
)
(entdel x)
)
)
(vla-EndUndoMark ActDoc)
(princ "\nChuc cac ban gat hai nhieu thanh cong. Thiep")
)

Chào anh thiep.
Xin lỗi anh nha, vì yêu cầu công việc, việc trích thửa đó phải làm thêm theo hình chử nhật.
Mong anh viết thêm giúp cho:
Lisp hỏi : cắt theo ô vuông / chử nhật
Nếu chọn ô vuông ---> Cạnh bao nhiêu.?
Nếu chọn chử nhật ---> Dài bao nhiêu ? Rộng bao nhiêu ?

Cám ơn

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 19 November 2010 - 02:07 PM

  • 0

#49 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 01 October 2009 - 12:38 PM

Chào phamthanhbinh,
lisp của bác có 1 vài điều mình góp ý như sau:
- Lúc ban đầu nên đưa biến OSMODE = 0
- Khi tạo boundary xong, nên dùng lệnh move đối tượng (entlast), theo thiep thì nên dùng hàm (ACET-SS-DRAG-MOVE ss....) thích hợp hơn nhóm lệnh (command "copyclip" ent "") (command "pasteclip" pause "")
- Khi tạo bảng thống kê xong, thì nên dùng hàm (ACET-SS-DRAG-MOVE ss....) để move bảng thống kê về vị trí thích hợp
- Các điểm góc ranh nên đưa ra ngoài ranh (cái này hơi khó) và chiều cao bằng chiều cao text kích thước.
- Và khi tạo line, text, nên hạn chế bớt dùng (command .....) mà thay bằng hàm entmake, như vậy lisp sẽ chạy nhanh hơn và hy vọng không còn nhấp nháy nữa.
Một vài góp ý chân thành. Trân trọng!


Tôi sử dụng gặp lỗi như sau:
trichthua.lsp successfully loaded.
Command: ; error: malformed list on input
Thiep có thể hướng dẫn tôi khắc phục lỗi trên. Thanks
  • 0

#50 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 01 October 2009 - 01:27 PM

Chào anh thiep.
Xin lỗi anh nha, vì yêu cầu công việc, việc trích thửa đó phải làm thêm theo hình chử nhật.
Mong anh viết thêm giúp cho:
Lisp hỏi : cắt theo ô vuông / chử nhật
Nếu chọn ô vuông ---> Cạnh bao nhiêu.?
Nếu chọn chử nhật ---> Dài bao nhiêu ? Rộng bao nhiêu ?
Cám ơn

Chào khaosat2009, thiep đoán cũng có ngày có người yêu cầu trích thửa theo hình chữ nhật, sau đó theo hình tròn, elipse. khaosat2009 chờ nhé, thiep sẽ viết luôn 1 thể.

Tôi sử dụng gặp lỗi như sau:
trichthua.lsp successfully loaded.
Command: ; error: malformed list on input
Thiep có thể hướng dẫn tôi khắc phục lỗi trên. Thanks

Chào VBảo, lỗi này là do copy file bị thiếu dấu ")" bạn nên chép lại file trichthua.lsp; Hoặc có thể do trong codebox có 1 dòng mã lỗi, Vbảo xóa nó đi và xóa luôn ")"
  • 0

#51 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 02 October 2009 - 01:59 PM

Việc tạo bảng kê toạ độ thỉ các số căn về bên trái của cột, mong bạn giúp cho căn về bên phải hay nằm cân ở giửa cột.
Số ghi cạnh trên thửa có những số qúa sát vào cạnh, mong bạn chỉnh cho ra ít.
http://www.cadviet.c..._bang_tke_3.rar

Chào bạn Khaosat 2009,

Để căn lề cho các text bạn có thể sử dụng các lisp đã có trên diễn đàn, tùy theo ý bạn nhé. Các lisp đó bạn có thể tham khảo ở đây:
http://www.cadviet.c...showtopic=13737

Còn việc bạn muốn cho text nằm xa ra khỏi đường bao bạn có thể chỉnh sửa lại giá trị cộng thêm vào cao độ y của điểm đặt pt1 của text tại các dòng code :
pt1 (list (/ (+ x11 x22) 2) (/ (+ y11 y22 2) 2))

(setq pt0 (list (/ (+ x00 x22) 2) (/ (+ y00 y22 2) 2))

Ví dụ: (setq pt0 (list (/ (+ x00 x22) 2) (/ (+ y00 y22 4) 2)) sẽ đẩy text ra xa hơn đường bao với cao độ là 2 gấp đôi giá trị cũ là 1 bạn ạ. Có điều khi sửa như vậy thì tất cả các text ghi độ dài cạnh đều bị đẩy xa hơn chứ không riêng cho thằng nào cả. Bởi vì các giá trị này là như nhau trong vòng lặp chứ không phải là lựa chọn riêng cho từng thằng bạn ạ.

Còn xa bao nhiêu là phù hợp thì bạn sẽ phải tự chọn thôi. Nếu muốn đẹp bản vẽ bạn phải sử dụng move để di chuyển nó sau khi chạy líp.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#52 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 02 October 2009 - 02:31 PM

Riêng về Lisp trích họa đồ, do cấu hình máy cơ quan thấp, file bản vẽ lớn, nó chớp Trung bình 20 phút 1 khu vực trích ra, và việc tạo đường bao trong thửa chưa khớp .Bạn xem lại giúp
http://www.cadviet.c...em_lai_giup.rar

Chào bạn khaosat 2009,
Cái chỗ không khớp mà bạn đánh dấu đó là do cái bản đồ gốc của bạn nó không khớp đấy, bạn hãy kiểm tra lại xem. Có thể do khi bạn vẽ bạn đặt chế độ snap chưa đúng. Lisp của mình chỉ thực hiện lệnh break và copy từ bản gốc ra thôi chứ chả hề thêm bớt chi tiết nào cả.
Việc máy bạn có cấu hình thấp thế nào mình chưa rõ nhưng nếu như trên bản đồ gốc mà bạn cung cấp thì mình chạy mất 1phút 30 giây cho một thửa trích thế này:
http://www.cadviet.c...es/2/test_2.dwg
Tức là một khoảng thời gian đủ để bạn moi ra một điếu thuốc, mồi nó lên và rít hai hơi bạn ạ.
Theo mình vậy là không quá tệ và có thể giúp ích ít nhiều cho công việc của bạn rồi. Hề hề. Tuy chưa thật xuất sắc nhưng cũng là một tiến bộ ra trò so với việc phải trích bộ bằng Cad phải không bạn.
Cái vụ chớp chớp nháy nháy thì bác Thiep đã gợi ý khắc phục nhưng mình chưa thử được, mong bạn thông cảm nhé.

Cái mình quan tâm ở líp này chính là cái trích ra đã thỏa mãn ý muốn của bạn chưa để mình tiếp tục cải thiện nó. Nếu cái họa đồ trích ra mà Ok thì mình mới có cái khoái để hoàn thiện nó, còn như nó chả có ích gì cho bạn thì mình xin dừng lại ở đây và tự rút ra bài học cho mình để tiếp tục cày lisp thêm cho nát bạn ạ.
Hề hề, chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#53 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 02 October 2009 - 04:21 PM

Chào bạn khaosat 2009,
Cái chỗ không khớp mà bạn đánh dấu đó là do cái bản đồ gốc của bạn nó không khớp đấy, bạn hãy kiểm tra lại xem. Có thể do khi bạn vẽ bạn đặt chế độ snap chưa đúng. Lisp của mình chỉ thực hiện lệnh break và copy từ bản gốc ra thôi chứ chả hề thêm bớt chi tiết nào cả.
Việc máy bạn có cấu hình thấp thế nào mình chưa rõ nhưng nếu như trên bản đồ gốc mà bạn cung cấp thì mình chạy mất 1phút 30 giây cho một thửa trích thế này:
http://www.cadviet.c...es/2/test_2.dwg
Tức là một khoảng thời gian đủ để bạn moi ra một điếu thuốc, mồi nó lên và rít hai hơi bạn ạ.
Theo mình vậy là không quá tệ và có thể giúp ích ít nhiều cho công việc của bạn rồi. Hề hề. Tuy chưa thật xuất sắc nhưng cũng là một tiến bộ ra trò so với việc phải trích bộ bằng Cad phải không bạn.
Cái vụ chớp chớp nháy nháy thì bác Thiep đã gợi ý khắc phục nhưng mình chưa thử được, mong bạn thông cảm nhé.

Cái mình quan tâm ở líp này chính là cái trích ra đã thỏa mãn ý muốn của bạn chưa để mình tiếp tục cải thiện nó. Nếu cái họa đồ trích ra mà Ok thì mình mới có cái khoái để hoàn thiện nó, còn như nó chả có ích gì cho bạn thì mình xin dừng lại ở đây và tự rút ra bài học cho mình để tiếp tục cày lisp thêm cho nát bạn ạ.
Hề hề, chúc bạn thành công.

Cám ơn bạn, Mình vẩn mong chờ sự giúp đỡ của Bạn.
  • 0

#54 thanhhoa.36

thanhhoa.36

    biết vẽ circle

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

Đã gửi 09 December 2009 - 11:29 PM

Chào bạn Trang7889,
1/- Việc tọa độ bị trừ là do bản đồ gốc nó như vậy, hình như người vẽ cố tình để thế cho oai hay sao đó chứ mình đâu có dám thay đổi tọa độ của bản vẽ gốc đâu, bạn đừng hiểu nhầm mình tội nghiệp.
2/- Hình như bạn hơi nhầm chút xíu, bản đồ gốc là tỷ lệ 1/1000 thì khi bạn trích thửa với tỷ lệ 1/500 , hệ số scale sẽ là 2, còn khi trích thửa với tỷ lệ 1/200 thì hệ số scale phải là 5 chứ không phải 4 bạn ạ. Để thuận lợi cho người dùng, theo ý của bác Khaosat 2009 mình đã để cho người dùng nhập tỷ lệ mong muốn của bản vẽ trích thửa, và nhập tỷ lệ của bản đồ gốc. Như vậy bạn hoàn toàn yên tâm về việc lấy hệ số scale mà không sợ sai bạn ạ.
3/- Bảng tọa độ góc ranh là mình lấy theo tọa độ trên bản đồ gốc đấy chứ, không phải là lấy theo tọa độ trên bản vẽ trích thửa đôu bạn ạ. Bạn kiểm tra lại xem nhé. Ngay cả chiều dài các cạnh cũng vậy, đều được lấy theo kích thước trên bản đồ gốc đó , không phải trên bản đồ trích thửa đâu vì trên bản đồ trích thửa chúng đã được scale lên rồi mà.
4/- Thực tế lisp của mình yêu cầu bạn phải copy cái bản trích đo mẫu vào bản đồ gốc trước khi chạy lisp. Việc mở một file bản vẽ khác trong khi lisp đang chạy mình vẫn chưa thủng lắm, mặc dù đã được các bác Tue_NV, Giabach chỉ dạy. Khổ nỗi do trí não hơi lùn , chưa vận dụng được nên yêu cầu của bạn chắc phải vài ba bữa nữa mình mới có thể trả lời.
5/- Cái vụ đánh số đỉnh của thửa đất thì mình cũng chưa biết cách chọn nó sao cho hợp lý cả vì có thể mỗi ngưới có yêu cầu cách đánh số khác nhau. Hiện tại mình đánh theo trật tự các đỉnh dược hình thành khi xài lệnh boundary. Nếu muốn đánh theo một trật tự nhất định sẽ phải bổ sung một đoạn lisp để sắp xếp lại các đỉnh theo một quy luật đã định đó. Bạn hãy cho mình cái quy luật của bạn mình sẽ cố gắng bổ sung thêm theo ý bạn.
6/- Bạn có thể gửi cho mình file bản đồ của bạn để mình kiểm tra không??? thực tế mình không phải dân trắc địa . giao thông hay quy hoạch gì cả mà là một thằng "me cha ni cô" , do vậy chả có cái bản đồ nào để thử, lisp mình viết dựa trên cái file mà bạn gửi đó và file của bác khaosat 2009 . Lisp có thể chạy sai vì một số nguyên nhân sau:
a/- Trên file bản đổ của bạn text style hiện hành đang có giá trị textsize khác 0, bạn hãy đặt lại giá trị này về 0 xem nhé.
b/- Có thể trong quá trình bạn copy các dòng code bị thiếu đi một vài cái ký tự nào đó.
c/- Các biến hệ thống trên bản vẽ của bạn có thể xung đột gì đó với lisp.

Nhưng theo mình có lẽ nguyên nhân a là lớn hơn cả vì khi mình viết lisp đã phải chỉnh lại cái textsize trên bản vẽ của bạn đó.
Chúc bạn đạt nguyện vọng của mình.




Em mới ra trường và cũng vừa đia làm , khi đi làm em thường xuyên tiếp xúc với các loại trích đo. Trước đây em thường dùng MicroStation SE để làm nhưng công ty em bây giwò lại dùng chủ yếu là CAD. Mấy hôm trước em mới biết đuợc về Lisp vì trong bộ cài của máy tại cơ quan cũng có một số Lisp tiện ích nhưng chưa có Lisp này. Hôm nay em tình cờ lên mạng và nhớ ra cong dụng của Lisp và đọc được bài của anh em thấy rất hay. Em cũng đang định làm một chương trình trên VB6 những khi đọc được bài của anh em thấy viết trên Lisp hay hơn trên VB6 nhưng viết trên Lisp thì em lại chưa biết gì, có lẽ em sẽ tìm hiểu về cách viết này. Cảm ơn anh về bài viết này !
  • 0

#55 vuongminh

vuongminh

    Chưa sử dụng CAD

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

Đã gửi 22 April 2012 - 12:46 PM

Chào các bạn!
Mình đang có nhu cầu muốn tạo Lisp Hồ sơ kỹ thuật để phục vụ cho công tác GPMB. Nhưng do mới tập tò viếc lisp nên không thể hoàn thành được. Rất mong các bạn quan tâm giúp mình.
Yêu cầu Lisp: Từ một bản đồ địa chính tạo ra Hồ sơ kỹ thuật một thửa đất được chọn có: trích đo thửa đất đó, bảng kê tạo độ, chiều dài cạnh. (Như file mình gửi kèm theo)
http://www.cadviet.c...skt.rar&w=51859
Rất mong các bạn giúp đỡ.
  • 0

#56 anhtuan01022014

anhtuan01022014

    Chưa sử dụng CAD

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

Đã gửi 30 May 2014 - 10:14 AM

Dear bac Thiep

HIện nay tôi chạy lisp của bạn nó bị báo lỗi này

Command: ; error: bad argument type: 2D/3D point: nil
Mong bác chỉ giúp


  • 0