Đến nội dung


Hình ảnh
- - - - -

Nối các điểm chèn text thành những đoạn thẳng theo yêu cầu


  • Please log in to reply
41 replies to this topic

#21 xaydung

xaydung

    biết lệnh trim

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

Đã gửi 10 August 2007 - 05:08 PM

Xin lisp nối các điểm chèn text với nội dung sau:
chọn các text cơ sở lấy thứ tự là khoảng cách giữa các điểm
chèn text
ví dụ có 3 text A, B, C
A cách B là 1
B cách C là 2
A cách C là 4
có nghĩa là A gần B hơn C
Khoảng cách giữa các điểm chèn giới hạn là bao nhiêu
sẽ được lisp hỏi khi chạy
Sau đó vẽ 1 line nối A với B với C
  • 0

#22 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 10 August 2007 - 05:43 PM

tên lệnh là JPT. Lệnh sẽ yêu cầu bạn nhập 2 lần. Lần thứ nhất là select tập các đối tượng text cần nối với nhau. Lần thứ 2 là pick vào đối tượng text đầu tiên.

(defun c:jpt (/ ssp entbd index sop tapdiemxet entdt p diemht diemnoi
tapkq)

(defun hoanh_newerror (msg)
(if (and (/= msg "Function cancelled")
(/= msg "quit / exit abort")
)
(princ (strcat "\n" msg))
)
(done)
)

(defun init ()
(setq
HOANH_CMD (getvar "CMDECHO")
HOANH_OLDERROR *error*
*error* hoanh_newerror

)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
)

(defun done ()
(command ".redraw")
(command ".undo" "E")
(if HOANH_CMD
(setvar "CMDECHO" HOANH_CMD)
)
(if HOANH_OLDERROR
(setq *error* HOANH_OLDERROR)
)
(princ)
)

(defun luuos ()
(setq
HOANH_OSMODE (getvar "OSMODE")
HOANH_AUTOSNAP (getvar "AUTOSNAP")
)
)
(defun traos ()
(if HOANH_OSMODE
(setvar "OSMODE" HOANH_OSMODE)
)
(if HOANH_AUTOSNAP
(setvar "AUTOSNAP" HOANH_AUTOSNAP)
)
)

(defun timgannhat (p tapp / pp kq dmin)
(setq kq nil)
(foreach pp tapp
(if (or (not dmin)
(> dmin (distance p pp))
)
(setq dmin (distance p pp)
kq pp
)
)
)
kq
)
(init)
(princ "\nLisp noi text - © 2007, CADViet.com")
(princ "\nHay chon text")
(setq
ssp (ssget '((0 . "TEXT")))
entbd (car (entsel "\nChi dinh text bat dau:"))
index 0
sop (sslength ssp)
tapdiemxet nil
)
(repeat sop
(setq entdt (ssname ssp index)
index (1+ index)
p (cdr (assoc 10 (entget entdt)))
tapdiemxet (append tapdiemxet (list p))
)
)
(setq
diemht (cdr (assoc 10 (entget entbd)))
tapdiemxet (vl-remove diemht tapdiemxet)
tapkq (list diemht)
diemnoi (timgannhat diemht tapdiemxet)
)
(while diemnoi
(setq
tapdiemxet (vl-remove diemnoi tapdiemxet)
tapkq (append tapkq (list diemnoi))
diemht diemnoi
diemnoi (timgannhat diemht tapdiemxet)
)
)
(luuos)
(setvar "osmode" 0)
(command ".3dpoly")
(foreach p tapkq
(command p)
)
(command "")
(traos)
(done)
)
(princ "\nJPT - Free lisp from www.cadviet.com")
(princ)

  • 0

#23 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 10 August 2007 - 09:05 PM

tên lệnh là JPT. Lệnh sẽ yêu cầu bạn nhập 2 lần. Lần thứ nhất là select tập các đối tượng text cần nối với nhau. Lần thứ 2 là pick vào đối tượng text đầu tiên.


(defun c:jpt (/ ssp entbd index sop tapdiemxet entdt p diemht diemnoi
tapkq)

(defun hoanh_newerror (msg)
(if (and (/= msg "Function cancelled")
(/= msg "quit / exit abort")
)
(princ (strcat "\n" msg))
)
(done)
)

(defun init ()
(setq
HOANH_CMD (getvar "CMDECHO")
HOANH_OLDERROR *error*
*error* hoanh_newerror

)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
)

(defun done ()
(command ".redraw")
(command ".undo" "E")
(if HOANH_CMD
(setvar "CMDECHO" HOANH_CMD)
)
(if HOANH_OLDERROR
(setq *error* HOANH_OLDERROR)
)
(princ)
)

(defun luuos ()
(setq
HOANH_OSMODE (getvar "OSMODE")
HOANH_AUTOSNAP (getvar "AUTOSNAP")
)
)
(defun traos ()
(if HOANH_OSMODE
(setvar "OSMODE" HOANH_OSMODE)
)
(if HOANH_AUTOSNAP
(setvar "AUTOSNAP" HOANH_AUTOSNAP)
)
)

(defun timgannhat (p tapp / pp kq dmin)
(setq kq nil)
(foreach pp tapp
(if (or (not dmin)
(> dmin (distance p pp))
)
(setq dmin (distance p pp)
kq pp
)
)
)
kq
)
(init)
(princ "\nLisp noi text - © 2007, CADViet.com")
(princ "\nHay chon text")
(setq
ssp (ssget '((0 . "TEXT")))
entbd (car (entsel "\nChi dinh text bat dau:"))
index 0
sop (sslength ssp)
tapdiemxet nil
)
(repeat sop
(setq entdt (ssname ssp index)
index (1+ index)
p (cdr (assoc 10 (entget entdt)))
tapdiemxet (append tapdiemxet (list p))
)
)
(setq
diemht (cdr (assoc 10 (entget entbd)))
tapdiemxet (vl-remove diemht tapdiemxet)
tapkq (list diemht)
diemnoi (timgannhat diemht tapdiemxet)
)
(while diemnoi
(setq
tapdiemxet (vl-remove diemnoi tapdiemxet)
tapkq (append tapkq (list diemnoi))
diemht diemnoi
diemnoi (timgannhat diemht tapdiemxet)
)
)
(luuos)
(setvar "osmode" 0)
(command ".3dpoly")
(foreach p tapkq
(command p)
)
(command "")
(traos)
(done)
)
(princ "\nJPT - Free lisp from www.cadviet.com")
(princ)


cảm ơn anh Hoành
  • 0

#24 xaydung

xaydung

    biết lệnh trim

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

Đã gửi 11 August 2007 - 09:47 AM

Xin lisp nối các điểm chèn text với nội dung sau:
chọn các text cơ sở lấy thứ tự là khoảng cách giữa các điểm
chèn text
ví dụ có 3 text A, B, C
A cách B là 1
B cách C là 2
A cách C là 4
có nghĩa là A gần B hơn C
Khoảng cách giữa các điểm chèn giới hạn là bao nhiêu
sẽ được lisp hỏi khi chạy
Sau đó vẽ 1 line nối A với B với C
  • 0

#25 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 11 August 2007 - 10:16 AM

Xin lisp nối các điểm chèn text với nội dung sau:
chọn các text cơ sở lấy thứ tự là khoảng cách giữa các điểm
chèn text
ví dụ có 3 text A, B, C
A cách B là 1
B cách C là 2
A cách C là 4
có nghĩa là A gần B hơn C
Khoảng cách giữa các điểm chèn giới hạn là bao nhiêu
sẽ được lisp hỏi khi chạy
Sau đó vẽ 1 line nối A với B với C


Là lệnh JPT mà bạn?
  • 0

#26 dnhqs

dnhqs

    biết vẽ ellipse

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

Đã gửi 07 January 2008 - 10:26 AM

Là lệnh JPT mà bạn?

không biết pác Hoanh có còn hứng thú với chủ đề này không
mình vừa bê cái jpt của pác dùng tốt lắm nhưng nếu pác có hứng thú thì giúp mình thêm 1 đoạn nữa
chọn tập hợp text trên bản vẽ sau đó chọn tiếp 1 đường hay click vào bản vẽ chưng trình sẽ chọn ra một cặp text gần điểm chọn nhất (lấy ra textvar và toạ độ điểm chèn) vẽ 1 line qua 3 điểm (2 text và điểm chọn) lấy giá trị là trung bình cọng của 2 text và ghi vào toạ độ điểm chọn
mình không biết cách để đưa một file mẫu để dễ hiều
  • 0

#27 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 07 January 2008 - 10:53 AM

không biết pác Hoanh có còn hứng thú với chủ đề này không
mình vừa bê cái jpt của pác dùng tốt lắm nhưng nếu pác có hứng thú thì giúp mình thêm 1 đoạn nữa
chọn tập hợp text trên bản vẽ sau đó chọn tiếp 1 đường hay click vào bản vẽ chưng trình sẽ chọn ra một cặp text gần điểm chọn nhất (lấy ra textvar và toạ độ điểm chèn) vẽ 1 line qua 3 điểm (2 text và điểm chọn) lấy giá trị là trung bình cọng của 2 text và ghi vào toạ độ điểm chọn
mình không biết cách để đưa một file mẫu để dễ hiều

Rất hứng thú với chủ đề này,

Tuy nhiên chưa rõ yêu cầu của bạn ở chỗ:
- 'sau đó chọn tiếp 1 đường hay click vào bản vẽ', chọn 1 đường khác với click vào bản vẽ. Vì chọn đường là 2 điểm còn chọn điểm là 1 điểm.
- 'vẽ 1 line qua 3 điểm (2 text và điểm chọn)' hình như bạn nhầm vì 1 line qua 3 điểm khi và chỉ khi chúng thẳng hàng, còn điểm chọn là bất kỳ (không thẳng hàng với 2 text).
- Chương trình sẽ tạo ra đối tượng gì? line hay text hay cả hai?


Cách đưa file mẫu lên diễn đàn: bạn nén file lại dưới đuôi zip rồi vào tab upload phía trên bên phải diễn đàn. Hoặc vào trang http://www.myfreefilehosting.com để upload rồi paste đường link mà chương trình trả về vào bài viết.
  • 1

#28 elleHCSC

elleHCSC

    biết lệnh copy

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

Đã gửi 08 January 2008 - 09:38 AM

Trên màn hình tôi có các đối tượng là text có ghi các mã điểm (mã điểm có thể định dạng theo: 001, 002, 003 hoặc 1), 2), 3) . v. .v.) xin các anh giúp tôi tiện ích : khi chọn các text ghi các mã điểm này, lọc các text trong cùng một layer, hỏi mã điểm cần nối, sau đó nối các điểm chèn của text thành những đoạn thẳng theo thứ tự của người sử dụng nhập vào (ví dụ: người sử dụng type tại dòng command : nối điểm 001,002,003 ta sẽ vẽ được 1 đoạn thẳng mà điểm bắt đầu là điểm chèn của text thứ nhất, nối điểm 2 và kết thúc tại điểm chèn của text thứ 3 ) chân thành cảm ơn các anh.


wow thấy bác vbao hỏi thế này tôi mới biết bác cũng dùng cad để vẽ bình đồ. Câu hỏi của bác vì tôi ko viết được lisp nên chưa chắc đã có thể trả lời cũng như viết hay sửa code cho bác nhưng tôi cũng dùng cad để vẽ bản đồ nên có thể đóng góp cho bác 1 số ý kiến để bác tham khảo.

Với đầu bài của vbao thì nên nhờ anh em trong diễn đàn viết theo cách thức sau:

1. trên file vẽ CAD có các điểm text 001, 002, 003... 1, 2, 3 hay m1, m4,... gì đó (đại loại thế) chính là điểm mia và toạ độ điểm mia là toạ độ insert của điểm text.
2. Yêu cầu tất cả các điểm text trên màn hình phải thuộc 1 layer (nên thế vì sẽ rất thuận tiện cho người lập trình) và điều này thì các user phải tự làm.
3. Viết 1 đoạn chương trình để khi chạy CT đưa ra 1 hộp TEXT_BOX cho user nhập số liệu nối điểm (không nên nhập số liệu ở command line vì không nhập được nhiều điểm) theo mẫu sau :

dòng 1 : 001 003 008 m2 m6 ==>> nối điểm 001 với 003, 003 với 008, 008 với m2, m2 với m6.
dòng 2 : 001-017 ==>> nối từ điểm 001 đến 017.
dòng 3 : 1-3 m2 006 ==>> nối từ điểm 1 đến điểm 3, nối điểm 3 với điểm m2, nối m2 với 006
.......
v.v...


với cách thức nhập số liệu như trên thì ta có thể nối các điểm rất mềm dẻo và thuận tiện. Thuận tiện vì mỗi lần nhập bạn có thể nối được nhiều "khối" với mỗi "khối" là một dòng số liệu. Mềm dẻo vì ta chỉ cần nhập tên điểm còn CT sẽ lấy toạ độ của các TEXT trên Cad mà đôi lúc ko cần quan tâm mã code của điểm mia là gì.
Bên tôi cũng dùng CAD để vẽ BD nhưng dùng 1 số chương trình ngoài cad (dos cũ thôi) để tính toán số liệu và xuất ra file DXF sau đó dùng file này để import vào CAD. Tuy nhiên cách thức nối thì theo như tôi đưa ra ở trên và anh em vẽ thấy khá thuận tiện. Tuy nhiên làm được trong cad thì rất thuận tiện và nhanh đấy.
  • 0
Share for all, all will share !

--------------------
HTTP://WWW.HCSC.VN
HTTP://WWW.HCSC.COM.VN

#29 dnhqs

dnhqs

    biết vẽ ellipse

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

Đã gửi 08 January 2008 - 10:02 AM

wow thấy bác vbao hỏi thế này tôi mới biết bác cũng dùng cad để vẽ bình đồ. Câu hỏi của bác vì tôi ko viết được lisp nên chưa chắc đã có thể trả lời cũng như viết hay sửa code cho bác nhưng tôi cũng dùng cad để vẽ bản đồ nên có thể đóng góp cho bác 1 số ý kiến để bác tham khảo.

Với đầu bài của vbao thì nên nhờ anh em trong diễn đàn viết theo cách thức sau:

1. trên file vẽ CAD có các điểm text 001, 002, 003... 1, 2, 3 hay m1, m4,... gì đó (đại loại thế) chính là điểm mia và toạ độ điểm mia là toạ độ insert của điểm text.
2. Yêu cầu tất cả các điểm text trên màn hình phải thuộc 1 layer (nên thế vì sẽ rất thuận tiện cho người lập trình) và điều này thì các user phải tự làm.
3. Viết 1 đoạn chương trình để khi chạy CT đưa ra 1 hộp TEXT_BOX cho user nhập số liệu nối điểm (không nên nhập số liệu ở command line vì không nhập được nhiều điểm) theo mẫu sau :

dòng 1 : 001 003 008 m2 m6 ==>> nối điểm 001 với 003, 003 với 008, 008 với m2, m2 với m6.
dòng 2 : 001-017 ==>> nối từ điểm 001 đến 017.
dòng 3 : 1-3 m2 006 ==>> nối từ điểm 1 đến điểm 3, nối điểm 3 với điểm m2, nối m2 với 006
.......
v.v...


với cách thức nhập số liệu như trên thì ta có thể nối các điểm rất mềm dẻo và thuận tiện. Thuận tiện vì mỗi lần nhập bạn có thể nối được nhiều "khối" với mỗi "khối" là một dòng số liệu. Mềm dẻo vì ta chỉ cần nhập tên điểm còn CT sẽ lấy toạ độ của các TEXT trên Cad mà đôi lúc ko cần quan tâm mã code của điểm mia là gì.
Bên tôi cũng dùng CAD để vẽ BD nhưng dùng 1 số chương trình ngoài cad (dos cũ thôi) để tính toán số liệu và xuất ra file DXF sau đó dùng file này để import vào CAD. Tuy nhiên cách thức nối thì theo như tôi đưa ra ở trên và anh em vẽ thấy khá thuận tiện. Tuy nhiên làm được trong cad thì rất thuận tiện và nhanh đấy.

mình rất hứng thú với đề tài này nhưng đang mắc bận nên chưa tham gia với các bác được, mình sẽ tham gia với các bác khi có thể hề hề
  • 0

#30 dnhqs

dnhqs

    biết vẽ ellipse

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

Đã gửi 08 January 2008 - 05:18 PM

Rất hứng thú với chủ đề này,

Tuy nhiên chưa rõ yêu cầu của bạn ở chỗ:
- 'sau đó chọn tiếp 1 đường hay click vào bản vẽ', chọn 1 đường khác với click vào bản vẽ. Vì chọn đường là 2 điểm còn chọn điểm là 1 điểm.
- 'vẽ 1 line qua 3 điểm (2 text và điểm chọn)' hình như bạn nhầm vì 1 line qua 3 điểm khi và chỉ khi chúng thẳng hàng, còn điểm chọn là bất kỳ (không thẳng hàng với 2 text).
- Chương trình sẽ tạo ra đối tượng gì? line hay text hay cả hai?


Cách đưa file mẫu lên diễn đàn: bạn nén file lại dưới đuôi zip rồi vào tab upload phía trên bên phải diễn đàn. Hoặc vào trang http://www.myfreefilehosting.com để upload rồi paste đường link mà chương trình trả về vào bài viết.

http://www.cadviet.c.../hoihoanh_1.dwg
text màu tím là cao độ
dùng bộ lọc chọn bọn text màu tím
click vào điểm C chẵn hạn chương trình sẽ chọn 2 thằng text có khoảng cách gận nhất ví dụ là 2 và 4 lấy ra trị số của 2 thảng text màu tím cộng lại rồi viết vào chỗ C (trong bản vẽ trên mình quên cộng chúng nên kết quả là 44.157 sau đó vẽ các đoạn thẳng nối 2,4,C lại (ở lần trước mình nhầm
chương trình tạo ra cả line hoặc pline và text
mục đích của mình hỏi là để vận dụng cách lập trình
  • 0

#31 dnhqs

dnhqs

    biết vẽ ellipse

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

Đã gửi 11 January 2008 - 03:47 PM

http://www.cadviet.com/upfiles/hoihoanh_1.dwg
text màu tím là cao độ
dùng bộ lọc chọn bọn text màu tím
click vào điểm C chẵn hạn chương trình sẽ chọn 2 thằng text có khoảng cách gận nhất ví dụ là 2 và 4 lấy ra trị số của 2 thảng text màu tím cộng lại rồi viết vào chỗ C (trong bản vẽ trên mình quên cộng chúng nên kết quả là 44.157 sau đó vẽ các đoạn thẳng nối 2,4,C lại (ở lần trước mình nhầm
chương trình tạo ra cả line hoặc pline và text
mục đích của mình hỏi là để vận dụng cách lập trình

trời ơi sao không ai trả lời :)
  • 0

#32 be_chanh

be_chanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1712 Bài viết
Điểm đánh giá: 889 (rất tốt)

Đã gửi 11 January 2008 - 04:11 PM

sao sao. không ai trả lời à ? :) làm gì có chuyện đó :)
  • 0

t: 097.323.1199 | m: cudstk@gmail.com | w: http://www.aicollect.com


#33 dnhqs

dnhqs

    biết vẽ ellipse

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

Đã gửi 14 January 2008 - 07:06 AM

sao sao. không ai trả lời à ? :) làm gì có chuyện đó :)

jukibo không thấy à đâu có ai trả lời câu hỏi của mình
http://www.cadviet.c.../hoihoanh_1.dwg
text màu tím là cao độ
dùng bộ lọc chọn bọn text màu tím
click vào điểm C chẵn hạn chương trình sẽ chọn 2 thằng text có khoảng cách gận nhất ví dụ là 2 và 4 lấy ra trị số của 2 thảng text màu tím cộng lại rồi viết vào chỗ C (trong bản vẽ trên mình quên cộng chúng nên kết quả là 44.157 sau đó vẽ các đoạn thẳng nối 2,4,C lại (ở lần trước mình nhầm
chương trình tạo ra cả line hoặc pline và text
  • 0

#34 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 14 January 2008 - 10:12 AM

jukibo không thấy à đâu có ai trả lời câu hỏi của mình
http://www.cadviet.com/upfiles/hoihoanh_1.dwg
text màu tím là cao độ
dùng bộ lọc chọn bọn text màu tím
click vào điểm C chẵn hạn chương trình sẽ chọn 2 thằng text có khoảng cách gận nhất ví dụ là 2 và 4 lấy ra trị số của 2 thảng text màu tím cộng lại rồi viết vào chỗ C (trong bản vẽ trên mình quên cộng chúng nên kết quả là 44.157 sau đó vẽ các đoạn thẳng nối 2,4,C lại (ở lần trước mình nhầm
chương trình tạo ra cả line hoặc pline và text

Câu trả lời nằm ở các chương trình lisp đã post lên có liên quan. Ji nói như vậy dựa trên cơ sở bạn là lập trình viên lisp chứ không phải user thông thường!
Nếu chưa thông thì ssg gợi ý tiếp:
1) Chọn các text màu magenta trong bản vẽ của bạn: (ssget '((0 . "TEXT") (62 . 6)))
2) Chọn 2 "thằng" text gần điểm C nhất? Bạn xem lại hàm getntv ở topic "Lấy thuộc tính từ block" (của chính bạn lập), bổ sung một chút là có ngay.
3) Lấy giá trị và toạ độ của 1 thằng text bất kỳ? Bạn thử ví dụ sau:
(defun C:VD()
(setq
e (car (entsel "Select a text object:"));;;Text entity
d (entget e);;;Database of e
txt (cdr (assoc 1 d));;;Text value of e
p (cdr (assoc 10 d));;;Insert point of e
)
;;;Report
(alert (strcat
"\nREPORT"
"\nText value = " txt
"\n Insert point = " (rtos (car p)) ";" (rtos (cadr p)) ";" (rtos (caddr p))
)
)
)
Lưu ý: lấy toạ độ point thì cũng như trên thôi, dxf 10 luôn dành cho toạ độ, bất kể đối tượng là gì.
4) Tạo ra line, pline và text? Chuyện thường ngày của lập trình viên lisp!
Hy vọng rằng với những gợi ý trên, bạn sẽ tự giải quyết được.
  • 0

#35 dnhqs

dnhqs

    biết vẽ ellipse

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

Đã gửi 14 January 2008 - 03:05 PM

Câu trả lời nằm ở các chương trình lisp đã post lên có liên quan. Ji nói như vậy dựa trên cơ sở bạn là lập trình viên lisp chứ không phải user thông thường!
Nếu chưa thông thì ssg gợi ý tiếp:
1) Chọn các text màu magenta trong bản vẽ của bạn: (ssget '((0 . "TEXT") (62 . 6)))
2) Chọn 2 "thằng" text gần điểm C nhất? Bạn xem lại hàm getntv ở topic "Lấy thuộc tính từ block" (của chính bạn lập), bổ sung một chút là có ngay.
3) Lấy giá trị và toạ độ của 1 thằng text bất kỳ? Bạn thử ví dụ sau:

(defun C:VD()
(setq
e (car (entsel "Select a text object:"));;;Text entity
d (entget e);;;Database of e
txt (cdr (assoc 1 d));;;Text value of e
p (cdr (assoc 10 d));;;Insert point of e
)
;;;Report
(alert (strcat
"\nREPORT"
"\nText value = " txt
"\n Insert point = " (rtos (car p)) ";" (rtos (cadr p)) ";" (rtos (caddr p))
)
)
)
Lưu ý: lấy toạ độ point thì cũng như trên thôi, dxf 10 luôn dành cho toạ độ, bất kể đối tượng là gì.
4) Tạo ra line, pline và text? Chuyện thường ngày của lập trình viên lisp!
Hy vọng rằng với những gợi ý trên, bạn sẽ tự giải quyết được.

ssg nhầm rồi, mình chẳng phải là "lập trình viên" gì sất. Trước đây mình tự học lisp từ mấy cuốn sách của Nguyễn Hữu Lộc, nhưng mà khi bí thì chả biết hỏi ai. mình ở vùng quê nên cũng ít được tiếp xúc với "văn minh" cho mấy. Thậm chí chỗ mình mấy thằng còn vẽ thiết kế bằng bút kim nữa kìa. Từ ngày vào diễn đàn này mình học được nhiều lắm. ssg biết không thực sự mình cũng không muốn hỏi những câu hỏi "buồn cười" ấy đâu nhưng thực sự bí.
à! trước mắt cảm ơn ssg về gợi ý trên nếu có gì chưa rõ mình sẽ tiếp tục "cầu cứu"
còn lấy thuộc tính của block mình loay hoay hoài mà chưa được
  • 0

#36 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 14 January 2008 - 04:36 PM

ssg nhầm rồi, mình chẳng phải là "lập trình viên" gì sất. Trước đây mình tự học lisp từ mấy cuốn sách của Nguyễn Hữu Lộc, nhưng mà khi bí thì chả biết hỏi ai. mình ở vùng quê nên cũng ít được tiếp xúc với "văn minh" cho mấy. Thậm chí chỗ mình mấy thằng còn vẽ thiết kế bằng bút kim nữa kìa. Từ ngày vào diễn đàn này mình học được nhiều lắm. ssg biết không thực sự mình cũng không muốn hỏi những câu hỏi "buồn cười" ấy đâu nhưng thực sự bí.
à! trước mắt cảm ơn ssg về gợi ý trên nếu có gì chưa rõ mình sẽ tiếp tục "cầu cứu"
còn lấy thuộc tính của block mình loay hoay hoài mà chưa được

Tất nhiên là mình biết, không nhầm đâu. Bạn đang học lập trình lisp, gọi "lập trình viên" cho nó... oai!
Mình cũng là dân kỹ thuật như bạn, tự mày mò lập trình, tự tạo những tiện ích để làm việc đỡ cực hơn thôi.
Bạn cố gắng vượt qua giai đoạn cơ bản sẽ thấy nhẹ nhàng hơn, chẳng có gì ghê gớm!
Mình luôn khuyến khích và rất sẵn lòng hỗ trợ bạn khi cần.
  • 0

#37 be_chanh

be_chanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1712 Bài viết
Điểm đánh giá: 889 (rất tốt)

Đã gửi 14 January 2008 - 04:50 PM

vào diễn đàn để hỏi cũng là 1 cách hay. nhưng tôi chỉ làm việc đó khi không tìm thấy trên các diễn đàn khác của nước ngoài. nhất là vấn đề lập trình, tôi cũng từng viết 1 vài tool nhỏ. khi bí. tôi chỉ search và luôn tìm được câu trả lời thỏa đáng. tôi không mấy khi vào các diễn đàn việt nam vì người mình vẫn còn ky quá. chẳng muốn cho chỉ muốn nhận thôi. đó là chút tâm sự muốn chia sẻ cùng bạn và mọi người.
  • 0

t: 097.323.1199 | m: cudstk@gmail.com | w: http://www.aicollect.com


#38 bonchen

bonchen

    Chưa sử dụng CAD

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

Đã gửi 27 August 2009 - 03:23 PM

wow thấy bác vbao hỏi thế này tôi mới biết bác cũng dùng cad để vẽ bình đồ. Câu hỏi của bác vì tôi ko viết được lisp nên chưa chắc đã có thể trả lời cũng như viết hay sửa code cho bác nhưng tôi cũng dùng cad để vẽ bản đồ nên có thể đóng góp cho bác 1 số ý kiến để bác tham khảo.

Với đầu bài của vbao thì nên nhờ anh em trong diễn đàn viết theo cách thức sau:

1. trên file vẽ CAD có các điểm text 001, 002, 003... 1, 2, 3 hay m1, m4,... gì đó (đại loại thế) chính là điểm mia và toạ độ điểm mia là toạ độ insert của điểm text.
2. Yêu cầu tất cả các điểm text trên màn hình phải thuộc 1 layer (nên thế vì sẽ rất thuận tiện cho người lập trình) và điều này thì các user phải tự làm.
3. Viết 1 đoạn chương trình để khi chạy CT đưa ra 1 hộp TEXT_BOX cho user nhập số liệu nối điểm (không nên nhập số liệu ở command line vì không nhập được nhiều điểm) theo mẫu sau :

dòng 1 : 001 003 008 m2 m6 ==>> nối điểm 001 với 003, 003 với 008, 008 với m2, m2 với m6.
dòng 2 : 001-017 ==>> nối từ điểm 001 đến 017.
dòng 3 : 1-3 m2 006 ==>> nối từ điểm 1 đến điểm 3, nối điểm 3 với điểm m2, nối m2 với 006
.......
v.v...


với cách thức nhập số liệu như trên thì ta có thể nối các điểm rất mềm dẻo và thuận tiện. Thuận tiện vì mỗi lần nhập bạn có thể nối được nhiều "khối" với mỗi "khối" là một dòng số liệu. Mềm dẻo vì ta chỉ cần nhập tên điểm còn CT sẽ lấy toạ độ của các TEXT trên Cad mà đôi lúc ko cần quan tâm mã code của điểm mia là gì.
Bên tôi cũng dùng CAD để vẽ BD nhưng dùng 1 số chương trình ngoài cad (dos cũ thôi) để tính toán số liệu và xuất ra file DXF sau đó dùng file này để import vào CAD. Tuy nhiên cách thức nối thì theo như tôi đưa ra ở trên và anh em vẽ thấy khá thuận tiện. Tuy nhiên làm được trong cad thì rất thuận tiện và nhanh đấy.

Ý của elleHCSC rất giống ý tôi,tôi seach trên cadviet mà chưa thấy có lisp như vậy...nếu có thì rất hữu ích cho anh em trắc địa...mong các cao thủ cadviet giúp...
  • 0

#39 tnmtpc

tnmtpc

    biết dimcontinue

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

Đã gửi 20 November 2009 - 02:49 PM

wow thấy bác vbao hỏi thế này tôi mới biết bác cũng dùng cad để vẽ bình đồ. Câu hỏi của bác vì tôi ko viết được lisp nên chưa chắc đã có thể trả lời cũng như viết hay sửa code cho bác nhưng tôi cũng dùng cad để vẽ bản đồ nên có thể đóng góp cho bác 1 số ý kiến để bác tham khảo.

Với đầu bài của vbao thì nên nhờ anh em trong diễn đàn viết theo cách thức sau:

1. trên file vẽ CAD có các điểm text 001, 002, 003... 1, 2, 3 hay m1, m4,... gì đó (đại loại thế) chính là điểm mia và toạ độ điểm mia là toạ độ insert của điểm text.
2. Yêu cầu tất cả các điểm text trên màn hình phải thuộc 1 layer (nên thế vì sẽ rất thuận tiện cho người lập trình) và điều này thì các user phải tự làm.
3. Viết 1 đoạn chương trình để khi chạy CT đưa ra 1 hộp TEXT_BOX cho user nhập số liệu nối điểm (không nên nhập số liệu ở command line vì không nhập được nhiều điểm) theo mẫu sau :

dòng 1 : 001 003 008 m2 m6 ==>> nối điểm 001 với 003, 003 với 008, 008 với m2, m2 với m6.
dòng 2 : 001-017 ==>> nối từ điểm 001 đến 017.
dòng 3 : 1-3 m2 006 ==>> nối từ điểm 1 đến điểm 3, nối điểm 3 với điểm m2, nối m2 với 006
.......
v.v...


với cách thức nhập số liệu như trên thì ta có thể nối các điểm rất mềm dẻo và thuận tiện. Thuận tiện vì mỗi lần nhập bạn có thể nối được nhiều "khối" với mỗi "khối" là một dòng số liệu. Mềm dẻo vì ta chỉ cần nhập tên điểm còn CT sẽ lấy toạ độ của các TEXT trên Cad mà đôi lúc ko cần quan tâm mã code của điểm mia là gì.
Bên tôi cũng dùng CAD để vẽ BD nhưng dùng 1 số chương trình ngoài cad (dos cũ thôi) để tính toán số liệu và xuất ra file DXF sau đó dùng file này để import vào CAD. Tuy nhiên cách thức nối thì theo như tôi đưa ra ở trên và anh em vẽ thấy khá thuận tiện. Tuy nhiên làm được trong cad thì rất thuận tiện và nhanh đấy.

Yêu cầu này thiết thực, ứng dụng mạnh trong thành lập bản đồ. Sao không bác nào giúp một cái lisp như vậy nhỉ
  • 0

#40 elleHCSC

elleHCSC

    biết lệnh copy

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

Đã gửi 20 November 2009 - 04:01 PM

Yêu cầu này thiết thực, ứng dụng mạnh trong thành lập bản đồ. Sao không bác nào giúp một cái lisp như vậy nhỉ


Từ lúc nói cái ý tưởng này viết trên lisp cho đến hiện nay thì cũng là một thời gian khá dài elleHCSC tiếp cận và để tâm tới viết bằng lisp trên CAD và cũng đã hoàn thành bước 1 nghĩa là đã nối được theo tên điểm mia trên màn hình. Chỉ oái oăm nhất là mình chưa tìm thấy cái edit_text dạng multi_line trên cad đâu cả...nên hiện giờ mỗi lần nối chỉ nhập số liệu được trên có 1 dòng lệnh (command line) nên hạn chế có 256 ký tự. Các bạn chờ 1 thời gian mình tìm hiểu thêm rồi public lên sau nha !

http://www.cadviet.c..._diem_video.rar

Ngày cuối tuần vui vẻ !
  • 1
Share for all, all will share !

--------------------
HTTP://WWW.HCSC.VN
HTTP://WWW.HCSC.COM.VN