Đến nội dung


Hình ảnh
- - - - -

Hỏi về hàm open


  • Please log in to reply
3 replies to this topic

#1 pdle

pdle

    biết lệnh mtext

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

Đã gửi 22 June 2010 - 06:56 PM

Return Values

If successful, open returns a file descriptor that can be used by the other I/O functions. If mode "r" is specified and filename does not exist, open returns nil.


Em không hiểu ở đây file descriptor là cái gì ạ , thấy trong ví dụ của AutoCAD có cái đại loại như :

# file < "c:\\my documents\\new.tst" >

Thế cái này có giống như address của file kô ạ ?
I/O functions có phải là Input/Output files không ạ ?

E còn một câu hỏi nữa là làm sao khi dùng ssget để select a line, thì sau đó ta sẽ biết được start point và end point của line được chọn ạ ?
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#2 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 26 June 2010 - 06:12 PM

Em không hiểu ở đây file descriptor là cái gì ạ , thấy trong ví dụ của AutoCAD có cái đại loại như :
Thế cái này có giống như address của file kô ạ ?
I/O functions có phải là Input/Output files không ạ ?

E còn một câu hỏi nữa là làm sao khi dùng ssget để select a line, thì sau đó ta sẽ biết được start point và end point của line được chọn ạ ?

khi dùng ssget để chọn line thì bạn dùng cú pháp này
(setq ss (ssget '(
(-4 . " (0 . "LINE")
(-4 . "AND>")
)
)
)
sau đó dùng lệnh repeat để tách ra từng line
(setq x 0)
(setq caochu 5.00)

(repeat (sslength ss)
(setq ent (ssname ss x))
(setq ents (entget ent))
(setq pt1 (cdr (assoc 10 ents)))
(setq pt2 (cdr (assoc 11 ents)))
;;;từ đây bạn có thể viết tiếp để in ra điểm đầu, cuối của line
(setq x (+ x 1))
)
Keke
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#3 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 01 July 2010 - 12:14 PM

Em không hiểu ở đây file descriptor là cái gì ạ , thấy trong ví dụ của AutoCAD có cái đại loại như :
Thế cái này có giống như address của file kô ạ ?
I/O functions có phải là Input/Output files không ạ ?

E còn một câu hỏi nữa là làm sao khi dùng ssget để select a line, thì sau đó ta sẽ biết được start point và end point của line được chọn ạ ?

Bạn đọc thêm đoạn này sẽ sáng tỏ hơn:
A file descriptor is a pointer to a file opened by the AutoLISP open function. The open function returns this pointer as an alphanumeric label. You supply the file descriptor as an argument to other AutoLISP functions that read or write to the file.

Đúng như bạn nhận định, pointer là biến con trỏ. Khi bạn gọi đến nó, nó sẽ... "chỉ trỏ" vào file address.
I/O functions ám chỉ các hàm dùng để read or write to the file
Hiểu vậy đủ rồi, chẳng cần đi sâu hơn. Vấn đề là áp dụng nó, bạn vận dụng open file, read from file, write to file... với những số liệu cụ thể. Qua đó, bạn sẽ tự chiêm nghiệm vấn đề sâu sắc hơn cả ngàn lời giải thích.
  • 0

#4 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 01 July 2010 - 12:24 PM

khi dùng ssget để chọn line thì bạn dùng cú pháp này
(setq ss (ssget '(
(-4 . " (0 . "LINE")
(-4 . "AND>")
)
)
)
sau đó dùng lệnh repeat để tách ra từng line
(setq x 0)
(setq caochu 5.00)

(repeat (sslength ss)
(setq ent (ssname ss x))
(setq ents (entget ent))
(setq pt1 (cdr (assoc 10 ents)))
(setq pt2 (cdr (assoc 11 ents)))
;;;từ đây bạn có thể viết tiếp để in ra điểm đầu, cuối của line
(setq x (+ x 1))
)
Keke

Sao phải lằng nhằng vậy bạn?
1- ssget chọn line chỉ cần: (ssget '((0 . "LINE")))
2- (setq caochu 5.00) không có vai trò gì trong việc này!

@pdle
Nếu chỉ chọn 1 line, bạn dùng (car (entsel "\nSelect a line:")) thì hơn
  • 0