Đế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

#141 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 August 2007 - 08:34 AM

:unsure:
Thế sao ?????? Tôi dùng thì bị nhu file ảnh tôi up lên mà :unsure:
Còn vụ đường kích thước xiên thì sao hả NH ? Lệnh SD bị miễn nhiễm với nó mà ...........
Cảm ơn NH nhé :unsure:

Việc xác định các thuật toán toán học trên đường dim DIMALIGNED phức tạp hơn các đường dim DIMLINEAR. Hiện nay, để gãi cho anh em đỡ ngứa ngáy, phiên bản đầu tiên tạm thế đã. Về sau sẽ nâng cấp lên bao gồm cả DIMALIGNED.

Vả lại nhiều khả năng chẳng cần nâng cấp, AutoDesk đợt tới cho ra phiên bản mới bao gồm luôn cả lệnh này cũng nên :) (Kinh nghiệm từ bản thân, các chương trình lisp hồi đầu tiên tôi viết thì bây giờ ACAD đã có sẵn gần hết rồi).
  • 1

#142 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 411 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 14 August 2007 - 09:26 AM

@NguyenHoanh Cho mình hỏi khoảng cách giữa các Dim được tính dựa vào thông số nào vậy? Nếu mình muốn quy định khoảng cách là giá trị khác có được không!

Cảm ơn bạn đã làm lisp này :unsure:
:unsure:) không ai cảm ơn mình sao :unsure:)
  • 0

#143 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 August 2007 - 09:34 AM

@NguyenHoanh Cho mình hỏi khoảng cách giữa các Dim được tính dựa vào thông số nào vậy? Nếu mình muốn quy định khoảng cách là giá trị khác có được không!

Cảm ơn bạn đã làm lisp này :unsure:
:unsure:) không ai cảm ơn mình sao :unsure:)

Khoảng cách giữa các dim cao gấp 3 lần kích cỡ chữ của Dim gốc.
Bạn muốn sửa thông số khác đi, bạn có thể tìm đến dòng lệnh (setq kcdimstandard (* 3.0 heightdimgoc)) và sửa số 3.0 thành số khác mà bạn muốn
  • 0

#144 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 411 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 14 August 2007 - 09:37 AM

Thanks!

@All lisp của NguyenHoanh có thể sắp xếp cả các dim chéo với điều kiện các bạn đổi trục toạ độ theo đường chéo của đim!
  • 0

#145 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 August 2007 - 10:05 AM

Thanks!

@All lisp của NguyenHoanh có thể sắp xếp cả các dim chéo với điều kiện các bạn đổi trục toạ độ theo đường chéo của đim!

Không phải đâu bạn!
Dim Rotate vẫn là DIMALIGNED không phải là DIMALIGNED.

Vì dim DIMALIGNED bao gồm Rotated, Horizontal và Vertical. DIMALIGNED cấu trúc khác hẳn. Để phân biệt bạn hãy kéo chân dim, nếu đường dim không thay đổi thì nó là DIMALIGNED; còn nếu đường dim thay đổi theo chân dim thì nó là DIMALIGNED. Cách tạo ra chúng cũng bằng 2 lệnh khác biệt là lệnh DIMALIGNED và lệnh DIMLINEAR.
  • 0

#146 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 14 August 2007 - 05:03 PM

Các bác ơi, em đang rất cần 1 lisp có nội dung như sau:
trên màn hình có các text dạng x,y,z khi chạy lisp chọn các text
trên thì sẽ vẽ ra các điểm point có toạ độ là x,y,z
nếu không có toạ độ z (tức là text dạng x,y ) thì cũng vẫn vẽ được các
điểm point (tức toạ độ trục z=0)
thanks các bác trước!
  • 0

#147 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 August 2007 - 05:34 PM

Các bác ơi, em đang rất cần 1 lisp có nội dung như sau:
trên màn hình có các text dạng x,y,z khi chạy lisp chọn các text
trên thì sẽ vẽ ra các điểm point có toạ độ là x,y,z
nếu không có toạ độ z (tức là text dạng x,y ) thì cũng vẫn vẽ được các
điểm point (tức toạ độ trục z=0)
thanks các bác trước!


Tên lệnh là T2P (Text to Point)

(defun c:t2p ()
(defun t2pone (ent)
(command ".POINT" (cdr (assoc 1 (entget ent))))
)
(setq ss (ssget '((0 . "TEXT"))))
(luuos)
(setvar "osmode" 0)
(sudung t2pone ss)
(traos)
)
(defun sudung (ham ss / sodt index entdt soapp)
(setq sodt (cond
(ss (sslength ss))
(t 0)
)
soapp 0
index 0
)
(repeat sodt
(setq entdt (ssname ss index)
index (1+ index)
)
(if (ham entdt)
(setq soapp (1+ soapp))
)
)
soapp
)
(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)
)
)

  • 1

#148 kts.ngocquan

kts.ngocquan

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 14 August 2007 - 09:49 PM

HI EVERY BODY !
^_^ :) .
:unsure: :unsure:
:) :)
Say quá ...............!
Chào riêng NH 1 cái nhé :unsure: NH ah , tôi muốn có 1 cái LISP chuyển toàn bộ layerA sang layerB (kiểu như layer merge của Express) , NH giúp tôi nhé
  • 0

#149 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 August 2007 - 10:36 PM

HI EVERY BODY !
^_^ :) .
:unsure: :unsure:
:) :)
Say quá ...............!
Chào riêng NH 1 cái nhé :unsure: NH ah , tôi muốn có 1 cái LISP chuyển toàn bộ layerA sang layerB (kiểu như layer merge của Express) , NH giúp tôi nhé

Bạn dùng lệnh laytrans của AutoCAD!
  • 0

#150 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 14 August 2007 - 11:42 PM


(defun c:mcaltext (/ ent tt old gt vt gtmoi)
(if (not c:cal)
(load "geomcal.arx")
)
(defun calone (ent)
(setq
tt (entget ent)
old (assoc 1 tt)
gt (cdr old)
vt (vl-string-position (ascii "=") gt)
ht vt
htsau (+ vt 2)
)
(while (and (> ht 0)
(member (substr gt ht 1) (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "." "+" "-" "*" "/"))
)
(setq ht (1- ht))
)
(while (and
(member (substr gt htsau 1) (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "." "+" "-" "*" "/"))
)
(setq htsau (1+ htsau))
)
(setq
gttruoc (substr gt 1 ht)
gtsau (substr gt htsau)
gtmoi (substr gt (1+ ht) (- vt ht))
kq (rtos (c:cal gtmoi))
kq (vl-string-right-trim "0" kq)
kq (vl-string-right-trim "." kq)
gtmoi (strcat gttruoc gtmoi "=" kq gtsau)
tt (subst (cons 1 gtmoi) old tt)
)
(entmod tt)
(entupd ent)
)
(setq ss (ssget '((0 . "TEXT"))))
(sudung calone ss)
(princ)
)
(defun sudung (ham ss / sodt index entdt soapp)
(setq sodt (cond
(ss (sslength ss))
(t 0)
)
soapp 0
index 0
)
(repeat sodt
(setq entdt (ssname ss index)
index (1+ index)
)
(if (ham entdt)
(setq soapp (1+ soapp))
)
)
soapp
)


Bác hoanh ơi cái lisp này chạy ngon mỗi tội khi phép tính có những
dấu ngoặc "()" thì không chạy bác à?
  • 0

#151 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 August 2007 - 08:18 AM

Bác hoanh ơi cái lisp này chạy ngon mỗi tội khi phép tính có những
dấu ngoặc "()" thì không chạy bác à?

Có dấu ngoặc vẫn chạy tốt, miễn là đúng cú pháp toán học.
  • 0

#152 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 15 August 2007 - 10:13 AM

Th­ực sự là không được anh hoành à
nó toàn báo lỗi là: bad argument type : numberp nil
bác xem hộ em chút nha!?
  • 0

#153 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 16 August 2007 - 03:18 PM

Các bác ơi em đang cần tìm 1 lisp có nội dung giống lisp joint
(nối các đường line rời thành 1 đường liền) đã có trên diễn đàn
nhưng ở đây là không gian 3D, có bác nào biết không giúp em chút nha?!
Thanks!
  • 0

#154 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 August 2007 - 04:11 PM

Các bác giúp em tên của 1 kiểu dim , ví dụ như em đang đúng kieu dim abc , em thu hiền 1 lenh nào đó bằng autolíp , thị tên abc đó được gần cho 1 biên nào đó ! Mong các bác giúp đỡ !

style của dim hiện hành được lưu trong biến "DIMSTYLE", muốn lấy nó bạn dùng lệnh (getvar "DIMSTYLE").
  • 0

#155 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 August 2007 - 04:18 PM

Các bác việt cho em đoán líp lấy đường dẫn của 1 file lisp mà mình vừa load len (trong file đó có chưa cái đoạn mã này ), ví dụ như em vừa load len file 123 .lsp thi doan líp đó sẽ lấy đường dẫn và gần cho 1 biên nào đó , và đưa ra thông báo này khi mình load file
Và 1 doan líp dùng để xoá 1 file líp nguy hiểm nào đó , ví dụ như em cần biết đường dẫn file 123 .lsp để xoa nó khi nó vừa được load len , xoa vinh viện luôn !
Các bác có cách nào để lấy được số mã của o cũng không , lấy bằng 1 mà nào đó của autolisp thoi , sau khi lấy được nó sẽ lập tức gán cho 1 biên nào đó !
Mong các bac giúp đỡ em , em rất can !

Cái này trước đây bàn một lần rồi, kết quả là vô phương cứu chữa!
Không có cách nào cả.
  • 0

#156 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 August 2007 - 05:13 PM

Các bác ơi em đang cần tìm 1 lisp có nội dung giống lisp joint
(nối các đường line rời thành 1 đường liền) đã có trên diễn đàn
nhưng ở đây là không gian 3D, có bác nào biết không giúp em chút nha?!
Thanks!

Lệnh là JL3D.
Lệnh này sẽ lấy đường thẳng đầu tiên trong tập chọn làm gốc, và từ đó phát triển dần đường 3DPolyLine. Vì thế, nếu tập line được chọn không liền, những line nào "dính" với line đầu tiên trong tập chọn sẽ được xử lý.

(defun c:jl3d ()
(defun timpointketiep (p / kq)
(setq pp t
i -1
)
(while (and (not kq)
pp
)
(setq i (1+ i)
pp (nth i lstline)
)
(if (= (car pp) p)
(if (not (member (cdr pp) lstkq))
(setq kq (cdr pp)
)
)
(if (not (member (car pp) lstkq))
(if (= (cdr pp) p)
(setq kq (car pp)
)
)
)
)
)
kq
)
(defun pindex (point / pp kq)
(foreach pp lstpoint
(if (< (distance point (cdr pp)) 0.001)
(setq kq (car pp))
)
)
(cond
(kq kq)
(t
(setq lstpoint (append lstpoint
(list (cons (1+ (length lstpoint)) point))
)
kq (length lstpoint)
)
)
)
)
(defun ent2ln (ent / tt)
(setq tt (entget ent)
p1 (cdr (assoc 10 tt))
p2 (cdr (assoc 11 tt))
)
(cons (pindex p1) (pindex p2))
)
(princ "\nJoint multi Line to 3DPolyline © CADViet.com")
(setq ssl (ssget '((0 . "LINE")))
lstent (ss2ent ssl)
lstpoint nil
lstline (mapcar 'ent2ln lstent)
lstkq nil
)
(setq pht (car (car lstline)))
(while (setq pht (timpointketiep pht))
(setq lstkq (append lstkq (list pht)))
)
(setq pht (cdr (car lstline)))
(while (setq pht (timpointketiep pht))
(setq lstkq (append (list pht) lstkq))
)
(luuos)
(setvar "osmode" 0)
(command ".3dpoly")
(foreach pp lstkq
(command (cdr (assoc pp lstpoint)))
)
(command "")
(traos)
(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 ss2ent(ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

(princ "\nJoint multi Line to 3DPolyline - free lisp from www.cadviet.com")
(princ "\nType JL3D to start!")
(princ)

  • 0

#157 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 17 August 2007 - 10:34 PM

Thanks bác Hoanh, em đang cần 1 lisp nữa có nội dung như sau:
khi chạy lisp chọn đối tượng muốn copy array, chọn điểm cơ sở
nhập số lượng cần copy (mặc định là quay 360 độ)

tức là giống như lệnh array polar nhưng không muốn hiện lên 1
cái bảng lằng nhằng của cad cao mà nhập ở dòng lệnh như cad
R14 đó. bác nào biết giúp em nha, thanks!
  • 0

#158 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 18 August 2007 - 07:35 AM

Thanks bác Hoanh, em đang cần 1 lisp nữa có nội dung như sau:
khi chạy lisp chọn đối tượng muốn copy array, chọn điểm cơ sở
nhập số lượng cần copy (mặc định là quay 360 độ)

tức là giống như lệnh array polar nhưng không muốn hiện lên 1
cái bảng lằng nhằng của cad cao mà nhập ở dòng lệnh như cad
R14 đó. bác nào biết giúp em nha, thanks!

Không hiểu tại sao bạn lại có yêu cầu như vậy?! Thích thì chiều:
(command "array" (ssget) "" "P" pause)
  • 0

#159 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 18 August 2007 - 08:51 AM

Cám ơn SSg, tui đang cần 1 lisp nữa có nội dung như sau:
trên màn hình 3D có 2 rectang như nhau nhưng 1 cái nằm trong mặt phẳng XY
1 cái song song với mặt phẳng XY nhưng có toạ độ Z.
khi chạy lisp hỏi chọn các hình vẽ, lisp sẽ tự động vẽ các đường line nối 4 góc
của các rectang tạo thành 1 hình hộp dạng mô hình 3D khung dây.
  • 0

#160 kts.ngocquan

kts.ngocquan

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 36 (tàm tạm)

Đã gửi 18 August 2007 - 09:54 AM

NH ơi
Ông xem lại cái này tý nhé
http://www.cadviet.com/forum/index.php?showtopic=1544
Lệnh chuyển Layer mà ông viết phải nhập tên Layer , sao không pick luôn vào đối tượng nhỉ :unsure:
Đề nghị chuyển lại ngay nhé :unsure:
  • 0