Đến nội dung


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

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


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

#1761 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 13 September 2010 - 08:08 PM

Bác nào cho em hỏi:
Lây tâm của đoạn pline cong thì làm thế nào.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1762 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 13 September 2010 - 11:08 PM

@thanhbinh:
E vữa thử 2 líp bác vữa đưa ra nhưng vẫn không đc bác ợ.
- Trong líp đầu (ch) nếu đối tượng đích ko có blok thì không sao, líp chạy tốt. Nhưng nếu có cả block thì nó báo :
Select objects: ; error: too many arguments và không chạy líp.
- Trong líp thứ 2 (sc). Thì nếu đối tượng đích mà có block thì dim trong block vẫn giữ nguyên, còn text thì vẫn tốt.
Đây là file cad e dùng để Test:

FileTEST
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1763 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 14 September 2010 - 01:04 AM

Chào bạn vothanhdn,
Bạn trình bày vấn đề hơi khó hiểu, đề nghị bạn nói lại chính xác vấn đề bạn cần.
Việc insert block có chứ thuộc tính và không chứa thuộc tính về cơ bản là như nhau. Với block có thuộc tính thì bạn phải nhập thêm các giá trị thuộc tính cho phù hợp mà thôi. Cách mà lisp insert block vào bản vẽ là sử dụng với lệnh command bạn ạ.
(command "insert" "blockname" position "" "" att1 att2 .... "")
Bạn cứ làm đúng từng bước như trong khi thực hiện lệnh insert block là Ok.


Cám ơn anh!
a xem bản vẽ file CAD này có lẽ dễ hiểu vấn đề hơn, a có thể viết giúp e được không ah.
Cám ơn!!!!
Down load bản vẽ
  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#1764 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 14 September 2010 - 09:44 AM

Chào các anh trên diễn đàn!
Các a có thể viết giùm 1 lisp với nội dung như sau được không ạ!
"Có 1 đường pline khép kín, chọn đường pline đó, sau đó pick vào 1 điểm, nếu điểm đó nằm ngoài vòng khép kín của pline thì xóa các đối tượng là text và block nằm phía trong vòng khép kín của pline và ngược lại nếu pick điểm bên ngoài."
- Các a cho e hỏi thêm 1 điều nữa là các a có thể cho e biết code của lệnh "insert" 1 block ATT tạo sẵn vào bản vẽ bằng ngôn ngữ lisp được không a!
Thanks a lots!

Tham khảo LISP liên quan đến đường pline khép kín : Chọn - Xóa các đối tuợng trong và ngoài đường pline khép kín.
http://www.cadviet.c...showtopic=11747

Như bác Bình đã viết :
Việc insert block có chứ thuộc tính và không chứa thuộc tính về cơ bản là như nhau. Với block có thuộc tính thì bạn phải nhập thêm các giá trị thuộc tính cho phù hợp mà thôi. Cách mà lisp insert block vào bản vẽ là sử dụng với lệnh command bạn ạ.
(command "insert" "blockname" position "" "" att1 att2 .... "")
Bạn cứ làm đúng từng bước như trong khi thực hiện lệnh insert block là Ok.


bổ sung thêm : khi chèn Block có chứa thuộc tính để bỏ qua các dòng nhắc liên quan đến thuộc tính, đặt biến hệ thống ATTREQ =0 truớc khi gọi lệnh.
  • 0

#1765 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 14 September 2010 - 10:31 AM

Mình là KTS giống như bao KTS khác đều ngại vẽ mặt cắt cầu thang. Chính vì vậy mình muốn xây dựng lisp để làm công việc này được nhanh chóng thuận lợi.
Mình đã xây dựng được code như thế này. Mong các bạn đóng góp ý kiến thêm để mình hoàn chỉnh.
Hình đã gửi
đây là code

(defun c:cat ()
(setvar "cmdecho" 0)
(setq old_layer (getvar "clayer"))
(setq tbl (tblsearch "layer" "_cat"))
(if (= tbl nil) (command "-layer" "n" "_cat" "c" "4" "_cat" ""))
(setq tbl1 (tblsearch "layer" "_hatch"))
(if (= tbl1 nil) (command "-layer" "n" "_hatch" "c" "8" "_hatch" ""))
(setq tbl2 (tblsearch "layer" "_thay"))
(if (= tbl2 nil) (command "-layer" "n" "_thay" "c" "23" "_thay" ""))
(setvar "clayer" "_cat")
(setq pc1 (getpoint "\nChon diem thu nhat: "))
(setq pc2 (getpoint "\nChon diem thu hai: " pc1))
(command "-view" "s" "v1")
(setq p (getpoint "\nChon diem de ve mat cat: "))
(command "-view" "s" "v2")
(setq ct (getreal "\nVao chieu cao tang: "))
(setq sb1 (getint "\nVao so bac: "))
(command "-view" "r" "v1")
(setq catb (ssget "f" (list pc1 pc2)))
(setq i 0)
(setq listpoint nil)
(setq listbac nil)
(while (< i (sslength catb))
(setq n (ssname catb i))
(setq pl1 (cdr (assoc 10 (entget n))))
(setq pl2 (cdr (assoc 11 (entget n))))
(setq pcat (inters pc1 pc2 pl1 pl2))
(setq listpoint (append listpoint (list pcat)))
(setq i (1+ i))
)
(setq i1 0)
(setq sb 0)
(while (< (1+ i1) (length listpoint))
(setq po1 (nth i1 listpoint))
(setq po2 (nth (1+ i1) listpoint))
(setq bac (distance po1 po2))
(setq listbac (append listbac (list bac)))
(if (equal (nth 0 (reverse listbac)) (nth 1 (reverse listbac)))
(setq sb (+ i1 2))
)
(setq i1 (1+ i1))
)
(vethangthang)
)

(defun vethangthang ()
(setq nb 20.0 bk 10.0
MBTong1 "ANSI32" tl1 100 angh1 0
MBTong2 "ar-conc" tl2 10 angh2 0
MBTong3 "ANSI31" tl3 200 angh3 0
MBTong4 "ar-sand" tl4 4 angh4 0
r (car listbac)
c (/ ct sb1)
d 100
oldos (getvar "osmode")
di (* sb (sqrt (+ (* c c) (* r r))))
ang (atan (/ c r))
p01 (polar p 0 10)
p02 (polar p01 (/ (* 270 pi) 180) 20)
p03 (polar p02 ang (/ 20 (sin ang)))
p2 (polar p02 ang di)
p22 (polar p2 (/ (* 90 pi) 180) 20)
p222 (polar p22 (/ (* 180 pi) 180) 10)
p3 (polar p03 0 (/ d (sin ang)))
p33 (polar p02 0 (/ d (sin ang)))
p4 (polar p2 (/ (* 3 pi) 2) (/ d (cos ang)))
dibt (/ 10 (cos ang))
pbt1 p02
pbt3 (polar p02 ang (/ (distance p02 p2) sb) )
pbt2 (list (car pbt1) (cadr pbt3) 0)
pbt4 (polar pbt2 (/ (* 90 pi) 180) 10)
)
(setvar "osmode" 0 )
(command "-view" "r" "v2")
(command ".pline")
(command p)
(repeat sb
(command
(strcat "@0," (rtos (- c (* 2.0 bk))))
(strcat "@" (rtos (- bk nb)) ",0")
"a"
(strcat "@0," (rtos (* 2.0 bk)))
"l"
(strcat "@" (rtos (+ (- nb bk) r)) ",0")
)
)
(command "")
(setvar "cmdecho" 0)
(command "line" p p01 "")
(setq el4 (entlast))
(command "pline" pbt1 pbt2 pbt3 "C")
(setq eL1 (entlast))
(command "hatch" MBTong3 tl3 angh3 eL1 "")
(command "change" "l" "" "p" "la" "_hatch" "")
(setq eL2 (entlast))
(command "line" pbt3 (list (car p) (cadr pbt3) 0) "")
(setq eL3 (entlast))
(command "ucs" "z" p02 p2)
(command "ARray" el1 el2 el3 el4 "" "R" "1" sb (/ di sb))
(command "ucs" "")
(command "-BOUNDARY" pbt4 "")
(setq eL5 (entlast))
(command "rectang" p pbt2)
(setq eL6 (entlast))
(command "hatch" MBTong4 tl4 angh4 eL5 "")
(command "change" "l" "" "p" "la" "_hatch" "")
(setq eL8 (entlast))
(command "hatch" MBTong4 tl4 angh4 el6 "")
(command "change" "l" "" "p" "la" "_hatch" "")
(setq eL7 (entlast))
(command "ucs" "z" p02 p2)
(command "ARray" eL5 eL6 el7 el8 "" "R" "1" sb (/ di sb))
(command "ucs" "")
(vethangcong)
(setvar "osmode" oldos)
(setvar "clayer" old_layer)
(princ)
)

(defun vethangcong ()
(setq goc01 (polar p ang di))
(setq i2 sb)
(setq ptt goc01)
(while (< i2 (length listbac))
(setq rbc (nth i2 listbac))
(command ".pline")
(command ptt)
(command
(strcat "@0," (rtos (- c (* 2.0 bk))))
(strcat "@" (rtos (- bk nb)) ",0")
"a"
(strcat "@0," (rtos (* 2.0 bk)))
"l"
(strcat "@" (rtos (+ 10 rbc)) ",0")
""
)
(setq ptt1 (polar ptt (/ (* 90 pi) 180) (- c (* 2.0 bk))))
(setq ptt2 (polar ptt1 0 10))
(setq ptt3 (polar ptt2 (/ (* 90 pi) 180) 10))
(command "rectang" ptt ptt2)
(command "hatch" MBTong4 tl4 angh4 "l" "")
(command "change" "l" "" "p" "la" "_hatch" "")
(command ".pline")
(command ptt1)
(command
(strcat "@" (rtos (+ 10 rbc)) ",0")
(strcat "@0," (rtos (* 2.0 bk)))
(strcat "@" (rtos (- bk nb)) ",0")
""
)
(setq ptt (getvar "lastpoint"))
(command "-hatch" ptt3 "")
(command "change" "l" "" "p" "la" "_hatch" "")
(setq i2 (1+ i2))
)
(setq pocuoi (polar ptt (/ (* 270 pi) 180) (/ (* c 2) 3)))
(setq pocuoi1 (polar pocuoi (/ (* 270 pi) 180) (/ (* c 2) 3)))
(command ".pline" p02 p2 "a" pocuoi "")
(setq noi1 (entlast))
(command "offset" "100" noi1 pocuoi1 "")
(setq noi2 (entlast))
(setq popcuoi (cdr (assoc 10 (reverse (entget noi2)))))
(setq popdau (cdr (assoc 10 (entget noi2))))
(command ".pline")
(command p02)
(command
(strcat "@-200,0")
(strcat "@0,-300")
(list (car popdau) (- (cadr p02)300))
)
(command popdau "")
(command "")
(setq noi3 (entlast))
(command ".pline" pocuoi popcuoi "")
(setq noi4 (entlast))
(command "pedit" noi1 "j" noi1 noi2 noi3 noi4 "" "")
(setq banbt (entlast))
(command "hatch" MBTong1 tl1 angh1 banbt "")
(command "change" "l" "" "p" "la" "_hatch" "")
(command "hatch" MBTong2 tl2 angh2 banbt "")
(command "change" "l" "" "p" "la" "_hatch" "")
(command "line" ptt pocuoi "")
(setq pohatch (polar goc01 0 20))
(command "-hatch" "p" MBTong3 tl3 angh3 pohatch "")
(command "change" "l" "" "p" "la" "_hatch" "")
)

  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1766 nguyenh001

nguyenh001

    biết zoom

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

Đã gửi 14 September 2010 - 10:33 AM

nhờ các cao thủ giúp đỡ, mình đang cần viết lisp để chọn (select) các dim có phần tiền tố (prefix) hay hậu tố(suffĩ) giống nhau mà không thấy trong danh sách thông tin của đối tượng (entget),lisp minh cần viết gần giống lệnh qselect. ai biết cách làm xin viết lisp giúp hay chỉ giùm mình cách làm cũng được.Thanks
hình minh họa
http://www.cadviet.c...es/3/prefix.jpg
  • 0

#1767 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 September 2010 - 11:04 AM

@thanhbinh:
E vữa thử 2 líp bác vữa đưa ra nhưng vẫn không đc bác ợ.
- Trong líp đầu (ch) nếu đối tượng đích ko có blok thì không sao, líp chạy tốt. Nhưng nếu có cả block thì nó báo :
Select objects: ; error: too many arguments và không chạy líp.
- Trong líp thứ 2 (sc). Thì nếu đối tượng đích mà có block thì dim trong block vẫn giữ nguyên, còn text thì vẫn tốt.
Đây là file cad e dùng để Test:

FileTEST

Chào bạn nguyentuyen6,
Quả thật mình không hiểu nó lỗi ở đâu nữa??? Đây là cái mình đã chạy thử bằng chính cái file bạn đã post lên diễn đàn và chính cáo lisp mà bạn bảo bị lỗi.
Hình đã gửi
Đây là trước khi chạy lisp, trong đó có hai block chứa dimension nằm bên ngoài khung chữ nhật. một cái có kích thước dim nhỏ và một cái có kích thước dim lớn
Hình đã gửi
Đây là hình ảnh sau khi chạy lisp ch với block nguồn có kich thước dim text nhỏ.
Hình đã gửi
Đây là hình ảnh sau khi chạy lisp ch với block nguồn có kích thước dim text lớn
Hình đã gửi
Đây là hình ảnh sau khi chạy lisp cs với hệ số tỷ lệ theo trục x, tlx , của block nguồn là 2
Hình đã gửi
Đây là hình ảnh sau khi chạy lisp với hệ số tỷ lệ theo trục y tly của block nguồn là 2. Sở dĩ bạn thấy nó chả có xi nhê gì là do cái lisp cs bạn đã tự điều chỉnh bỏ đi phần lựa chọn cái hệ số tỷ lệ của mình mà mặc định là chọn theo tỷ lệ scale của trục x. mà cái block nguồn của mình lại có tỷ lệ scale theo trục x là 1.

Bằng các kết quả này chứng tỏ lisp không hề chết như bạn đã test và với các đối tượng nằm trong block nó vẫn xử lý được. Do đó bạn nên xem lại cấu tạo các block nguồn của bạn xem nhé. Cũng có thể là lỗi do một vài biến hệ thống nào đó của bạn mà mình thì mù tịt luôn nên bạn hãy kiểm tra lại các biến hệ thống và đặt nó về mặc định bạn ạ.
Mình gửi luôn ở đây cái file CAD mà mình đã dùng để bạn tiện kiểm tra.
Chúc bạn may mắn và tìm ra được cái lỗi của lisp nếu có. Mình thua rồi.
http://www.cadviet.c.../drawing2_3.dwg
File CAD đây bạn nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1768 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 September 2010 - 11:28 AM

Bác nào cho em hỏi:
Lây tâm của đoạn pline cong thì làm thế nào.

Chào bạn Phamngoctukts.
Bạn thử nghiên cứu cái hàm này xem sao, nó trả về vecto pháp tuyến của đường cong tại vị trí đang xét


vlax-curve-getSecondDeriv Function


Returns the second derivative (in WCS) of a curve at the specified location

(vlax-curve-getSecondDeriv curve-obj param)

Arguments

curve-obj

The VLA-object to be measured.

param

A number specifying a parameter on the curve.

Return Values

A 3D vector list, if successful; otherwise nil.

Examples

For the following example, assume that splineObj points to the spline shown in the example of the vlax-curve-getDistAtParam function.

Obtain the start parameter of the curve:

_$ (setq startSpline (vlax-curve-getStartParam splineObj))
0.0
Obtain the end parameter of the curve:

_$ (setq endSpline (vlax-curve-getEndParam splineObj))
17.1546
Determine the second derivative at the parameter midway along the curve:

_$ (vlax-curve-getSecondDeriv splineObj
( / (- endspline startspline) 2))
(0.0165967 0.150848 0.0)

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

#1769 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 14 September 2010 - 11:48 AM

nhờ các cao thủ giúp đỡ, mình đang cần viết lisp để chọn (select) các dim có phần tiền tố (prefix) hay hậu tố(suffĩ) giống nhau mà không thấy trong danh sách thông tin của đối tượng (entget),lisp minh cần viết gần giống lệnh qselect. ai biết cách làm xin viết lisp giúp hay chỉ giùm mình cách làm cũng được.Thanks
hình minh họa
http://www.cadviet.c...es/3/prefix.jpg

Bạn thử cái này nhé:
(defun c:qsd(/ ss)
(setq ss(ssget (list (cons 0 "DIMENSION")
(cons 1 (strcat (getstring t "\n Nhap tien to :")
"<>"
(getstring t "\n Nhap hau to :")
)
)
)
)
)
(sssetfirst ss ss)
(princ)
)

  • 0

#1770 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 September 2010 - 12:08 PM

nhờ các cao thủ giúp đỡ, mình đang cần viết lisp để chọn (select) các dim có phần tiền tố (prefix) hay hậu tố(suffĩ) giống nhau mà không thấy trong danh sách thông tin của đối tượng (entget),lisp minh cần viết gần giống lệnh qselect. ai biết cách làm xin viết lisp giúp hay chỉ giùm mình cách làm cũng được.Thanks
hình minh họa
http://www.cadviet.c...es/3/prefix.jpg

Chào bạn nguyenh001,
Để lấy tiền tố của một đối tượng dimension, bạn có thể sử dụng hàm (vla-get-Alttextprefix obj)
Để lấy hậu tố của một đối tượng dimension, bạn có thể sử dụng hàm (vla-get-Alttextsuffix obj)
Trong đó obj là tên đối tượng VLA-OBJECT. Bạn có thể lấy nó từ hàm sau (vlax-ename->vla-object ent) với ent là tên cúng cơm của cái dimension bạn chọn trong CAD thường được gọi là entity name đó. Có nhiều cách để lấy dược thằng ent này, tùy thoe bạn lựa chọn.
Nếu bạn thấy khó khăn thì hãy post lên mọi người sẽ giúp bạn hoàn thành nguyện vọng thôi.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1771 nguyenh001

nguyenh001

    biết zoom

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

Đã gửi 14 September 2010 - 01:14 PM

Bạn thử cái này nhé:

(defun c:qsd(/ ss)
(setq ss(ssget (list (cons 0 "DIMENSION")
(cons 1 (strcat (getstring t "\n Nhap tien to :")
"<>"
(getstring t "\n Nhap hau to :")
)
)
)
)
)
(sssetfirst ss ss)
(princ)
)


Cám ơn bạn Tue_NV nhiều, câu lệnh của bạn thật đơn giản và hiệu quả.Thank you so much
@thanhbinh: cám ơn bạn đã trả lời.cách của bạn hơi phức tạp đối với mình, hiện giờ mình sử dụng cách của tue_nv là đủ rồi, nếu cần truy xuất sâu hơn mình sẽ dùng cách của bạn, đến lúc đó mình sẽ hỏi bạn thêm, vì mấy hàm vl mình cũng chưa hiểu mấy
cám ơn mọi người.
  • 0

#1772 quynhnn

quynhnn

    biết zoom

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

Đã gửi 14 September 2010 - 03:05 PM

em xuất từ GPS ra file autocad thì các điểm định vị P001, P002, P003... là các block thuộc tính. nhờ các bác viết giúp em lisp chuyển từ block này thành các text có nội dung tương ứng. ví dụ: P514 thành 514. Em gửi kèm file để các bác làm giúp. Xin cảm ơn!
http://www.cadviet.c...es/3/test_2.dwg
  • 0

#1773 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 14 September 2010 - 03:47 PM

em xuất từ GPS ra file autocad thì các điểm định vị P001, P002, P003... là các block thuộc tính. nhờ các bác viết giúp em lisp chuyển từ block này thành các text có nội dung tương ứng. ví dụ: P514 thành 514. Em gửi kèm file để các bác làm giúp. Xin cảm ơn!
http://www.cadviet.c...es/3/test_2.dwg

bác save xuống cad thấp thấp anh em nhờ tốt nhất là CAD 2004
  • 1
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#1774 tamkt

tamkt

    biết vẽ ellipse

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

Đã gửi 14 September 2010 - 04:45 PM

LỆNH CẮT DIM SỬ DỤNG KO DC, NÓ BỊ LỖI NHƯ VẬY NÈ:

"Command: cd Unknown command "CD". Press F1 for help.

Command: ap APPLOAD Successfully loaded 2 files.


Command:
Command:
Sap xep dim, xd - free lisp from www.cadviet.com
Command:
Command: cd Please select dimension object!
Select objects: Specify opposite corner: 3 found

Select objects: Point to trim or extend:
Error: bad DXF group: (13)
Command: Specify opposite corner:
Command: *Cancel* "

CÓ ANH NÀO GIÚP EM VỚI.
  • 0

#1775 nhiemhan

nhiemhan

    Chưa sử dụng CAD

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

Đã gửi 14 September 2010 - 05:00 PM

Hề hề đúng như mình nghĩ. Đặt câu hỏi xong rồi mới nghĩ ra

Bạn nào có phần mềm Qplot cho Mình xin với!Link trên diễn đàn Mình không down được!Xin cảm ơn rất nhiều!
  • 1

#1776 tamkt

tamkt

    biết vẽ ellipse

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

Đã gửi 14 September 2010 - 05:01 PM

Em đã tìm ra trên diễn đàn rùi, Bác NATACA quá giỏi, Bác thật là tuyệt.
đây là đạon code của bác NATCA:

;*******************************************************************************

;* WRITTEN BY DAO NGUYEN THANG 94X3 - HANOI ARCHITECTURAL UNIVERSITY (VIETNAM) *
;*******************************************************************************

(defun myerror (s) ; If an error (such as CTRL-C) occurs
; while this command is active...
(cond
((= s "quit / exit abort") (princ))
((/= s "Function cancelled") (princ (strcat "\nError: " s)))
)
(setvar "cmdecho" CMD) ; Restore saved modes
(setvar "osmode" OSM)
(setq *error* OLDERR) ; Restore old *error* handler
(princ)
)
;*******************************************************************************

(DEFUN C:CD (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI PT13I PT14I
PT13N PT14N O13 O14 N13 N14 OSM OLDERR PT10 PT11)
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETQ OLDERR *error*
*error* myerror)
(PRINC "Please select dimension object!")
(SETQ SS (SSGET))
(SETVAR "CMDECHO" 0)
(SETQ PT (reverse (cdr (reverse (GETPOINT "Point to trim or extend:")))))
(SETQ PT (TRANS PT 1 0))
(COMMAND "UCS" "W")
(SETQ LTH (SSLENGTH SS))
(SETQ DEM 0)
(WHILE (< DEM LTH)
(PROGN
(SETQ DS (ENTGET (SSNAME SS DEM)))
(SETQ KDL (CDR (ASSOC 0 DS)))
(IF (= "DIMENSION" KDL)
(PROGN
(SETQ PT10 (reverse (cdr (reverse (CDR (ASSOC 10 DS))))))
(SETQ PT11 (reverse (cdr (reverse (CDR (ASSOC 11 DS))))))
(SETQ PT13 (reverse (cdr (reverse (CDR (ASSOC 13 DS))))))
(SETQ PT14 (reverse (cdr (reverse (CDR (ASSOC 14 DS))))))
(SETQ N70 (CDR (ASSOC 70 DS)))
(IF (OR (= N70 0) (= N70 32) (= N70 33) (= N70 160) (= N70 161))
(PROGN
(SETQ GOCY (ANGLE PT10 PT14))
(SETQ GOCX (+ GOCY (/ PI 2)))
)
)
(SETVAR "OSMODE" 0)
(SETQ PTI (POLAR PT GOCX 2))
(SETQ PT13I (POLAR PT13 GOCY 2))
(SETQ PT14I (POLAR PT14 GOCY 2))
(SETQ PT13N (INTERS PT PTI PT13 PT13I NIL))
(SETQ PT14N (INTERS PT PTI PT14 PT14I NIL))
(SETQ O13 (ASSOC 13 DS))
(SETQ O14 (ASSOC 14 DS))
(SETQ N13 (CONS 13 PT13N))
(SETQ N14 (CONS 14 PT14N))
(SETQ DS (SUBST N13 O13 DS))
(SETQ DS (SUBST N14 O14 DS))
(ENTMOD DS)
)
)
(SETQ DEM (+ DEM 1))
)
)
(COMMAND "UCS" "P")
(SETVAR "CMDECHO" CMD)
(SETVAR "OSMODE" OSM)
(setq *error* OLDERR) ; Restore old *error* handler
(PRINC)
)
;******************************************************************************

(DEFUN C:sd (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI
PT10 PT10I PT10N O10 N10 PT11 PT11N O11 N11 KC OSM OLDERR)
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETQ OLDERR *error*
*error* myerror)
(PRINC "Please select dimension object!")
(SETQ SS (SSGET))
(SETVAR "CMDECHO" 0)
(SETQ PT (reverse (cdr (reverse (GETPOINT "Point to trim or extend:")))))
(SETQ PT (TRANS PT 1 0))
(COMMAND "UCS" "W")
(SETQ LTH (SSLENGTH SS))
(SETQ DEM 0)
(WHILE (< DEM LTH)
(PROGN
(SETQ DS (ENTGET (SSNAME SS DEM)))
(SETQ KDL (CDR (ASSOC 0 DS)))
(IF (= "DIMENSION" KDL)
(PROGN
(SETQ PT13 (reverse (cdr (reverse (CDR (ASSOC 13 DS))))))
(SETQ PT14 (reverse (cdr (reverse (CDR (ASSOC 14 DS))))))
(SETQ PT10 (reverse (cdr (reverse (CDR (ASSOC 10 DS))))))
(SETQ PT11 (reverse (cdr (reverse (CDR (ASSOC 11 DS))))))
(SETQ N70 (CDR (ASSOC 70 DS)))
(IF (OR (= N70 0) (= N70 32) (= N70 33) (= N70 160) (= N70 161))
(PROGN
(SETQ GOCY (ANGLE PT10 PT14))
(SETQ GOCX (+ GOCY (/ PI 2)))
)
)
(SETVAR "OSMODE" 0)
(SETQ PTI (POLAR PT GOCX 2))
(SETQ PT10I (POLAR PT10 GOCY 2))
(SETQ PT10N (INTERS PT PTI PT10 PT10I NIL))
(SETQ KC (DISTANCE PT10 PT10N))
(SETQ O10 (ASSOC 10 DS))
(SETQ N10 (CONS 10 PT10N))
(SETQ DS (SUBST N10 O10 DS))
(SETQ PT11N (POLAR PT11 (ANGLE PT10 PT10N) KC))
(SETQ O11 (ASSOC 11 DS))
(SETQ N11 (CONS 11 PT11N))
(SETQ DS (SUBST N11 O11 DS))
(ENTMOD DS)
)
)
(SETQ DEM (+ DEM 1))
)
)
(COMMAND "UCS" "P")
(SETVAR "CMDECHO" CMD)
(SETVAR "OSMODE" OSM)
(setq *error* OLDERR)
(PRINC)
)

CÁM ƠN BÁC VÀ CÁC ANH EM TRÊN CAD VIỆT.
  • 0

#1777 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 September 2010 - 06:19 PM

em xuất từ GPS ra file autocad thì các điểm định vị P001, P002, P003... là các block thuộc tính. nhờ các bác viết giúp em lisp chuyển từ block này thành các text có nội dung tương ứng. ví dụ: P514 thành 514. Em gửi kèm file để các bác làm giúp. Xin cảm ơn!
http://www.cadviet.c...es/3/test_2.dwg

Chào bạn quynhnn,
Mình đã xem file của bạn gửi, trong đó cái block point của bạn chứa tới gần hai chục attref . hầu hết trong số chúng được lấy giá trị mặc định. Tuy nhiên mình chưa rõ là cái bạn cần ra sao. Bạn có thể post cái kết quả bạn cần như thế nào lên được không vì quả thực mình không biết nên bỏ hay nên lấy thuộc tính nào trong cái mớ thuộc tính này bạn ạ.
Nếu có thể bạn nên post file ở dạng CAD2004 sẽ có nhiều người đọc được hơn bạn nhé.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1778 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 14 September 2010 - 10:24 PM

Chào bạn Phamngoctukts.
Bạn thử nghiên cứu cái hàm này xem sao, nó trả về vecto pháp tuyến của đường cong tại vị trí đang xét
vlax-curve-getSecondDeriv Function


Returns the second derivative (in WCS) of a curve at the specified location

(vlax-curve-getSecondDeriv curve-obj param)

Arguments

curve-obj

The VLA-object to be measured.

param

A number specifying a parameter on the curve.

Return Values

A 3D vector list, if successful; otherwise nil.

Examples

For the following example, assume that splineObj points to the spline shown in the example of the vlax-curve-getDistAtParam function.

Obtain the start parameter of the curve:

_$ (setq startSpline (vlax-curve-getStartParam splineObj))
0.0
Obtain the end parameter of the curve:

_$ (setq endSpline (vlax-curve-getEndParam splineObj))
17.1546
Determine the second derivative at the parameter midway along the curve:

_$ (vlax-curve-getSecondDeriv splineObj
( / (- endspline startspline) 2))
(0.0165967 0.150848 0.0)

Chào bạn Bình
có phải nó sử dụng như thế này không bạn.
Nó cho ra toạ độ của 1 điểm mà mình không biết điểm đó là điểm nào.

(defun c:tam ()
(setq ss (ssget (list (cons 0 "lwpolyline"))))
(setq ent (ssname ss 0))
(setq start (vlax-curve-getStartParam ent))
(setq end (vlax-curve-getEndParam ent))
(vlax-curve-getSecondDeriv ent ( / (- end start) 2))
)

  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1779 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 15 September 2010 - 10:55 AM

Chào bạn Bình
có phải nó sử dụng như thế này không bạn.
Nó cho ra toạ độ của 1 điểm mà mình không biết điểm đó là điểm nào.


(defun c:tam ()
(setq ss (ssget (list (cons 0 "lwpolyline"))))
(setq ent (ssname ss 0))
(setq start (vlax-curve-getStartParam ent))
(setq end (vlax-curve-getEndParam ent))
(vlax-curve-getSecondDeriv ent ( / (- end start) 2))
)

Hề hề hề,
Bạn Phamngoctukts ơi,
Ngó vậy mà hổng phải vậy đâu, đó không phải là tọa độ của điểm mà là tọa độ của vec tơ pháp tuyến của đường cong tại chính cái điểm đang xét trên đường cong bác à. Còn mối liên hệ giữa cái véc tơ pháp tuyến này với bán kính của đường cong tại điểm đó chắc bác phải mò thêm chút xíu nữa bác à. Tỷ như cái đoạn lisp bác viết là nó xác định cái véc tơ pháp tuyến tại điểm giữa của đường cong đó .
Rất mong bác 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.

#1780 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 September 2010 - 11:05 AM

Hề hề hề,
Bạn Phamngoctukts ơi,
Ngó vậy mà hổng phải vậy đâu, đó không phải là tọa độ của điểm mà là tọa độ của vec tơ pháp tuyến của đường cong tại chính cái điểm đang xét trên đường cong bác à. Còn mối liên hệ giữa cái véc tơ pháp tuyến này với bán kính của đường cong tại điểm đó chắc bác phải mò thêm chút xíu nữa bác à. Tỷ như cái đoạn lisp bác viết là nó xác định cái véc tơ pháp tuyến tại điểm giữa của đường cong đó .
Rất mong bác thành công....

Bổ sung thêm tý nữa : Độ dài của vectơ đó chính là bán kính cong của đoạn cong đó tai điểm đang xét. Như vậy, có bán kính cong, có góc với điểm đang xét => ta xác định được tâm cong (hàm polar)
  • 1