Chuyển đến nội dung
Diễn đàn CADViet
hantinh

[Nhờ viết Lsp] nhờ các cao thủ viết hộ cái lsp mir-tag ghi chú thép trong ASD

Các bài được khuyến nghị

hiện tại mình đang bị vướng mắc khi viết lsp để mir thằng này. viết mãi mà hok thành công. dù có người đã chi đường đi rồi nhưng làm vẫn hok có được. Hik. Viết rồi nhưng mà nó hok có chạy.

 

Còn đây là gợi ý của cao thủ đó:


[b][color=#FFD700]Tập 1 : bí danh là gì?[/color][/b]
Command: LIST
Select objects:
[color=#FFD700]RBCRENBARSHAPEDESC[/color] (tên đối tượng)
Layer: [color=#FFD700]"AutoCAD_Structural_Detailing_Description of bar shape"[/color] (lớp chưa đối tượng)
Space: Model space
Handle = bb74
Group = REVITGROUP

... "Mơ cũng thấy mờ mờ..."

Truy tìm đối tượng, lisp cho nó mấy dòng
(defun C:Ob (/ ename ename1 ename2)
(setq ename (entsel "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
)
)

và kết quả trả về của lisp
(
(-1 . <[color=#FF0000]Entity name: 7ec46f20[/color]>)
(0 .[color=#FFD700]"RBCRENBARSHAPEDESC"[/color])
(5 . "BB74")
(102 . "{ACAD_REACTORS")
(330 . <[color=#FF0000]Entity name: 7ec46fb0[/color]>)
(102 . "}")
(330 . <[color=#FF0000]Entity name: 7ec41cf8[/color]>)
(100 ."AcDbEntity")
(67 . 0)
(410 . "Model")
(8 .[color=#FFD700]"AutoCAD_Structural_Detailing_Description of bar shape"[/color])
(100 . "RbcrEntity")
(90 . 1)
(340 . <[color=#FF0000]Entity name: 7ec46f18[/color]>)
(100 . "REPREZENTATION")
(90 . 1)
(1 ."RBCR_DEFAULT")
(100 . "REPREZENTATION")
(90 . 1)
(1 . "RBCR_DEFAULT")
(100 ."REPREZENTATION")
(90 . 1)
(1 . "RBCR_EDIT")
(100 . "RbcrObjectClientEntity")
(90 . 1)
(100 . "RbcrEnDescription")
(90 . 1)
(100 . "RbcrEnBarDescBase")
(90 .1)
(100 . "RbcrEnBarShapeDesc")
(90 . 1)
)

... "Dữ liệu nào cần tím? Xử lý nó ra sao? ..."

Truy tiếo bằng Dictionaries

(defun C:Odj (/ maindict adict Db) ;
(setq maindict (namedobjdict))
(while
(setq adict (dictnext maindict (not adict)))
(princ (cdr (assoc -1 adict)))
(if
(not (cdr (assoc 0 adict)))
(setq db "Unknown")
(setq db (cdr (assoc 0 adict)))
)
(princ (strcat "\t(type = " Db ")\n"))
)
(princ)
)

Và kết quả phản hồi :

< Entity name: 7ec4ac68> (type = DICTIONARY)
< Entity name: 7ec4acd0> (type = DICTIONARY)
< Entity name: 7ec49c00> (type = DICTIONARY)
< Entity name: 7ec49df8> (type = DICTIONARY)
< Entity name: 7ec4acb8> (type = DICTIONARY)
< Entity name: 7ec4acc8> (type = DICTIONARY)
< Entity name: 7ec4ac70> (type = ACDBDICTIONARYWDFLT)
< Entity name: 7ec49d68> (type = DICTIONARY)
< Entity name: 7ec49d58> (type = DICTIONARY)
< Entity name: 7ec49cc8> (type = DICTIONARY)
< Entity name: 7ec4af30> (type = DICTIONARY)
< Entity name: 7ec49918> (type = RBCSCRSECDICTIONARY)
< Entity name: 7ec498b8> (type = RBCSMATERIALDICTIONARY)
< Entity name: 7ec4ad78> (type = ___RBCTMainRootDictionary)
< Entity name: 7ec10ce8> (type = Unknown)
< Entity name: 7ec49328> (type = RBCTALTERNATIVESTORAGE)
< Entity name: 7ec10198> (type = Unknown)
< Entity name: 7ec10cf0> (type = DICTIONARY)
< Entity name: 7ec498d0> (type = DICTIONARY)
< Entity name: 7ec49598> (type = Unknown)

... "Rối rố rối, bởi dữ liệu ..."

bí danh nó đây:
[size=4][b][color=#FFD700](340 . <Entity name: 7ec46f18>) [/color][/b][/size]

;=====================================================

[b][color=#FFD700]Tập 2 : Dấu vết mong manh[/color][/b]

Sau khi có tên đối tượng, giờ là lúc truy tìm lý lịch của nó
chèn thêm 2 dòng mã vào chương trình trên

[b][color=#FFD700]ename3 (cdr (assoc 340 ename2))[/color][/b]
[b]ename4 (entget ename3) [/b]


và truy vấn lý lịch của nó, ta được số liệu sau :

(
(-1 . <Entity name: 7ec42f18>)
(0 ."RBCRREBARSHAPEDESC")
(5 . "BB73")
(102 . "{ACAD_REACTORS")
(330 . <Entity name: 7ec49770>)
(102 . "}")
(330 . <Entity name: 7ec49770>)
(100 ."RbcrObject")
(90 . 4)
(100 . "LONG")
(90 . 1)
(90 . 0) (100 ."ENTITYSOFTPOINTER")
(90 . 1)
(330 . <Entity name: 0>)
(100 ."ENTITYSOFTPOINTER")
(90 . 1)
(90 . 0)
(100 . "STATUS_ATTR")
(90 . 1)
(90 . 0)
(100 . "RbcrReDescription")
(90 . 2)
(340 . <Entity name: 7ec42f10>)
(100 ."SCALE")
(90 . 1)
(40 . 0.05)
(70 . 1)
(100 . "RbcrReCompoundTablet")
(90 . 1)
(100 . "RbcrObjectVectorClient")
(90 . 1)
(70 . 1)
(100 ."RbcrObjectPointerLink")
(90 . 1)
(340 . <Entity name: 7ec42f08>)
(100 ."SOFTPOINTER")
(90 . 1)
(330 . <Entity name: 7ec42ef0>)
(100 ."RbcrReBarDescBase")
(90 . 2)
(70 . 3)
(100 . "POINT3D")
(90 . 1)
[color=#FFD700](10 792.5 634.0 0.0)[/color] [color=#FF0000]'point 01[/color]
(100 . "POINT3D")
(90 . 1)
[color=#FFD700](10 792.5 725.806 0.0)[/color] [color=#FF0000]'point 02[/color]
(100 . "POINT3D")
(90 . 1)
[color=#FFD700](10 992.5 725.806 0.0)[/color] [color=#FF0000]'point 03[/color]
(100 . "LONG")
(90 . 1) (90 . 1)
(100 ."DOUBLE")
(90 . 1)
(40 . 0.0)
(100 . "RbcrReBarShapeDesc")
(90 . 3)
(0 ."RBCRDESCSHAPEBAR")
(100 . "RbctBaseStyle")
(90 . 1)
(1 . "Style_1")
(100 ."RbcrDescShapeBar")
(90 . 2)
(100 . "STYLDESC_POS")
(90 . 2)
(40 . 5.0)
(41 .2.5)
(1 . "style1")
(90 . 0)
(91 . 0)
(92 . 0)
(93 . 0)
(94 . 2)
(100 . "STYLDESC_TEXT")
(90 . 2)
(40 . 2.5)
(41 . 1.0)
(42 . 0.0)
(1 . "style1")
(90 . 2)
(100 . "STYLDESC_ADDLINE")
(90 . 1)
(40 . 2.0)
(90 . 3)
(91 . 0)
(1 . "")
(100 . "STYLDESC_REINSHAPE")
(90 . 3)
(40 . 2.5)
(41 . 2.5)
(90 . 0)
(91 . 0)
(100 . "STYLDESC_ELEM")
(90 . 7)
(90 . 1)
(91 . 0)
(92 . 1)
(93 . 0)
(94 . 0)
(95 . 0)
(96 . 0)
(97 . 0)
(98 . 0)
(99 . 0)
(100 . "")
(101 . "")
(1 ."{%num}{%%c}{%dia}") ' cái này quen quá phải không [img=http://arttool.vn/images/smilies/biggrin.gif]
(100 . "BARTRACE")
(90 . 1)
(90 . 1)
(100 . "LONG")
(90 . 1)
(90 . 0)
)
[img=http://arttool.vn/images/error.gif] This image has been resized. Click this bar to view the full image.
[img=http://upload.arttool.vn/images/seal01.jpg]

[color=#FF0000]nó đây :[/color]

[size=4][b][color=#FFD700](10 792.5 634.0 0.0)[/color][/b][/size]
[b](10 792.5 725.806 0.0)[/b]
[b](10 992.5 725.806 0.0) [/b]

[b][color=#FFD700]Tập 3 : Lộ gót Achilles[/color][/b]
Điều cần đã lộ ra 3 point được xác định bởi các thông số

(10 792.5 634.0 0.0)
(10 792.5 725.806 0.0)
(10 992.5 725.806 0.0)

Giờ chỉ còn việc lên [size=4][b][color=#FFD700]pa truy bắt và xử lý obiect[/color][/b][/size]

[b][color=#FFD700]1-[/color][/b] Style reinforcement Description text appearance chuyển sang dạng placed between

[b][color=#FFD700]2-[/color][/b] Bắt chính xác object có chọn lọc
=> bằng cặp (0 . "RBCRENBARSHAPEDESC")

[b][color=#FFD700]3-[/color][/b] Lọc và sử lý p3 trước
=>p3 (nth 50 ename3)

[b][color=#FFD700]4-[/color][/b] Tạo p4 là ảnh của p3 qua trục p1,p2
(if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)

[b][color=#FFD700]5-[/color][/b] Cài vào cơ sở dữ liệu p3 thành p4
=>ename5 (subst p4 p3 ename4)

[b][color=#FFD700]6-[/color][/b] Hoàn thiện dữ liệu trên
=>ename1 (append enam1 neame5)

[b][color=#FFD700]7-[/color][/b] Update datbase
=>(entmod ename1)

[b][color=#FFD700]8-[/color][/b] Thu dọn hiện trường
Miror (0 ."RBCRREBARSHAPEDESC") qua trục p1-p2

[b][color=#FFD700]9-[/color][/b] Chôn trong lòng biển (Mã hóa dữ liệu lsp)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

còn đây là cai lsp mà minh viết nhưng khi load vào thì nó báo là ít đối số quá hem có hiểu tại sao luôn. Hik


(defun c:ob (/ ename ename1 ename2 ename3 ename4 ename5
x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
(setq ename (entsel "\nchon doi tuong:")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
);end setq
(ssget
(
(-4. "or")
(0 . "RBCRENBARSHAPEDESC")
(0 . "RBCR_ENDE_BARDDESC")
(-4 . "or>")
)
p3(nth 50 ename3)
p2(nth 47 ename3)
p1(nth 44 ename3)
x1(car
(nth 44 ename3)
)
x2(cadr
(nth 47 ename3)
)
x3(cadr
(nth 50 ename3)
)
(if (>x3 x2)
(setq x4(- x2 kcach))
(setq x4(+ x2 kcach))
)
(setq
ename5(subst p4 p3 ename4)
ename1(append ename1 ename5)
(entmod ename1)
)
(command:_.mirror
(ssget
(
(-4. "or")
(0 . "RBCRENBARSHAPEDESC")
(0 . "RBCR_ENDE_BARDDESC")
(-4 . "or>")
)
)
)
(princ)
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bạn tách dấu / ra khỏi ename ở dòng đầu tiên đã :

(defun c:ob (/ ename

Mong bạn sửa lại cách post bài cho phù hợp nội quy box

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

đã sửa theo gợi ý của bạn nhưng khi load vao thì no báo là lỗi dữ liệu đầu vào

Ít nhất là bạn bị lỗi ở 2 dòng code dưới đây:

(if (>x3 x2)

(command:_.mirror (ssget ((-4. "or") (0 . "RBCRENBARSHAPEDESC") (0 . "RBCR_ENDE_BARDDESC") (-4 . "or>")))

Dòng 1: không thể viết >x3 liền nhau như thế, và trước (( phải có dấu '.

Dòng 2: lệnh mirror phải viết đủ kiểu thế này (command "_.mirror" ss "" p1 p2)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

mình đã kiểm tra và sửa toàn bộ lỗi rồi nhưng mà nó báo khi thi hành lệnh là hok hiểu. Hik hok co hiểu tại sao luôn

còn đây là code mình đã sửa lại

 
(defun C:ccb (/ ename ename1 ename2 ename3 ename4 ename5
  	x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
 (setq
ename (entsel "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
);end setq
 (ssget
'((-4 . "<or")
 	(0 . "RBCRENBARSHAPEDESC")
 	(0 . "RBCR_ENDE_BARDDESC")
 	(-4 . "or>")
 	)'
)
 p3 (nth 50 ename3)
 p2 (nth 47 ename3)
 p1 (nth 44 ename3)
 x1 (cadr
  	(nth 44 ename3)
  	)
 x2 (cadr
  	(nth 47 ename3)
  	)
 x3 (cadr
  	(nth 50 ename3)
  	)
 (if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)
 (setq
ename5 (subst p4 p3 ename4)
ename1 (append enam1 neame5)
(entmod ename1)
	)
 (Command: "_.mirror" ss "" p1 p2)
 (princ)
 )


Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

mình đã kiểm tra và sửa toàn bộ lỗi rồi nhưng mà nó báo khi thi hành lệnh là hok hiểu. Hik hok co hiểu tại sao luôn

còn đây là code mình đã sửa lại

'((-4 . "<or") (0 . "RBCRENBARSHAPEDESC") (0 . "RBCR_ENDE_BARDDESC") (-4 . "or>"))'

(Command: "_.mirror" ss "" p1 p2)

 

Sao bạn sửa máy móc quá vậy??? Tiếc là tôi không có mấy cái dạng đối tượng "RBCRENBARSHAPEDESC" và "RBCR_ENDE_BARDDESC" của bạn nên test không được và chỉ nói nguyên lý thôi, hơn nữa bạn cũng biết lisp nên hãy cố sửa cho mau lên tay.

1) Làm gì có cái dấu ' ở đằng sau?

2) Ở dòng 2 thì ss là tên tập hợp chọn của bạn, p1p2 là 2 điểm tạo thành đường mirror, cớ sao bạn lại bê nguyên xi???

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình k dùng ASD, nhưng nhìn qua đã thấy bạn đặt dấu );end setq sai chỗ khi vẫn còn đang gán biến

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

sau khi chạy thử cái lsp mà mình đã viết ở trên thì nó bảo lỗi thiếu đối số tại điểm

SETQ: (SETQ ENAME5 (SUBST P4 P3 ENAME4)

ENAME1 (APPEND ENAM1 NEAME5) (ENTMOD ENAME1))

không hiểu tại sao lại bị vậy. mong các bạn giúp đỡ là tại sao?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

mình đã kiểm tra và sửa toàn bộ lỗi rồi nhưng mà nó báo khi thi hành lệnh là hok hiểu. Hik hok co hiểu tại sao luôn

còn đây là code mình đã sửa lại

(setq

ename5 (subst p4 p3 ename4)

ename1 (append enam1 neame5)

(entmod ename1)

)

 

Chưa kết thúc hàm setq bằng ) , bạn đã mở ngoặc ( cho hàm entmod rồi nên bị lỗi

(setq

ename5 (subst p4 p3 ename4)

ename1 (append enam1 neame5)

) ;;;; -> Kết thúc setq

(entmod ename1)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

hiện h cái lệnh chọn đối tượng của mình chỉ chon được có 1 đối tượng. mình phải đổi lệnh như thế nào để có thể chọn được nhiều đối tượng cùng 1 lúc

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

hiện h cái lệnh chọn đối tượng của mình chỉ chon được có 1 đối tượng. mình phải đổi lệnh như thế nào để có thể chọn được nhiều đối tượng cùng 1 lúc

 

a

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

a

cái lsp do mình tự viết nên hem có cái đó nên mình đang cần khai báo lại thế nào để có thể chọn được nhiều đối tượng cùng 1 lúc mà. cái lsp mình viết ở trên

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

cái lsp do mình tự viết nên hem có cái đó nên mình đang cần khai báo lại thế nào để có thể chọn được nhiều đối tượng cùng 1 lúc mà. cái lsp mình viết ở trên

 

Để chọn nhiều đối tượng: bạn dùng hàm (ssget...) chứ đừng dùng hàm (entsel). Còn cách hay nhất là bạn upload file lisp lên để dễ chỉ cụ thể cho bạn. Dạo này CADViet bị sao ấy, tôi viết đầy đủ, hoá ra đọc lại chỉ có mỗi chữ "a".

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

cái lsp do mình tự viết nên hem có cái đó nên mình đang cần khai báo lại thế nào để có thể chọn được nhiều đối tượng cùng 1 lúc mà. cái lsp mình viết ở trên

:angry2:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

đây là cái lsp mà mình tự viết

(defun C:ccb (/ ename ename1 ename2 ename3 ename4 ename5
  	x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
 (setq
ename (entsel "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
)
 (ssget
'((-4 . "<or")
 	(0 . "RBCRENBARSHAPEDESC")
 	(0 . "RBCR_ENDE_BARDDESC")
 	(-4 . "or>")
 	)
)
 p3 (nth 50 ename3)
 p2 (nth 47 ename3)
 p1 (nth 44 ename3)
 x1 (cadr
  	(nth 44 ename3)
  	)
 x2 (cadr
  	(nth 47 ename3)
  	)
 x3 (cadr
  	(nth 50 ename3)
  	)
 (if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)
 (setq
ename5 (subst p4 p3 ename4)
ename1 (append enam1 neame5)
);;;
(entmod ename1)
)
 (Command: "_.mirror" ss "")
 (princ)
 )

 

nó đã chạy được rồi nhưng đang co van đề là nó đang báo sai đối tượng. mình đang phải thử nghiệm lại cả cái temp của asd nữa xem có lỗi về khai báo đối tượng ji hok nữa

@ketxu: đã có lời cảm ơn ae giúp đỡ rồi mà sao bạn lại :angry2: ????????????????????????

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

đây là cái lsp mà mình tự viết

(defun C:ccb (/ ename ename1 ename2 ename3 ename4 ename5
  	x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
 (setq
ename (entsel "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
)
 (ssget
'((-4 . "<or")
 	(0 . "RBCRENBARSHAPEDESC")
 	(0 . "RBCR_ENDE_BARDDESC")
 	(-4 . "or>")
 	)
)
 p3 (nth 50 ename3)
 p2 (nth 47 ename3)
 p1 (nth 44 ename3)
 x1 (cadr
  	(nth 44 ename3)
  	)
 x2 (cadr
  	(nth 47 ename3)
  	)
 x3 (cadr
  	(nth 50 ename3)
  	)
 (if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)
 (setq
ename5 (subst p4 p3 ename4)
ename1 (append enam1 neame5)
);;;
(entmod ename1)
)
 (Command: "_.mirror" ss "")
 (princ)
 )

 

nó đã chạy được rồi nhưng đang co van đề là nó đang báo sai đối tượng. mình đang phải thử nghiệm lại cả cái temp của asd nữa xem có lỗi về khai báo đối tượng ji hok nữa

: đã có lời cảm ơn ae giúp đỡ rồi mà sao bạn lại :angry2: ????????????????????????

 

Có 2 thắc mắc với bạn:

1). Lúc đầu bạn hỏi cách chọn nhiều đối tượng, bây giờ bạn lại nói nó báo sai đối tượng. Vậy tóm lại là sao?

2). Chương trình mà bạn chép lên đây không thể chạy được, vì nó sai cú pháp:

- ss là gì thì bạn chưa setq.

- Mirror mà không có 2 điểm làm gương thì sao mirror được?

- Trước p3 bạn cũng chưa setq.

Không biết còn lỗi nào không nữa...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Có 2 thắc mắc với bạn:

1). Lúc đầu bạn hỏi cách chọn nhiều đối tượng, bây giờ bạn lại nói nó báo sai đối tượng. Vậy tóm lại là sao?

2). Chương trình mà bạn chép lên đây không thể chạy được, vì nó sai cú pháp:

- ss là gì thì bạn chưa setq.

- Mirror mà không có 2 điểm làm gương thì sao mirror được?

- Trước p3 bạn cũng chưa setq.

Không biết còn lỗi nào không nữa...

 

cái đầu là mình đang muốn chuyển nó để(chọn) đánh dấu nhiêu đối tượng. khi mình chạy thử thi nó báo lỗi đối tượng. mình đã hỏi lại bác chỉ dẫn cho minh thi f bác ấy bảo là có thể là do lỗi đối tượng khi minh gán trong templet của asd nó chưa đúng cũng có thể gây ra lỗi trên nên mình đang tính thaddoooir hàm để có thể chọn nhiều đối tượng rồi làm lại cái temp khác để chạy thử nghiệm lại xem là do lỗi ở đâu và do thàng nào. 1 mặt thì kiểm tra lai temp của asd do mình tự tay làm và có hướng dẫn tạo nó, mặt khác kiểm tra lại lsp mình viết có lỗi ji hem. nếu hok lần ra được thì nhờ ae chỉ giúp để sửa cho nó hòn thiện đê minh dùng và cho 1 số ae trong nhóm làm việc của minh cùng sử dụng để sửa những cái hok giong s với t.kế của VN mà

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

đây là cái lsp mà mình tự viết

(defun C:ccb (/ ename ename1 ename2 ename3 ename4 ename5
  	x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
 (setq
ename (entsel "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
)
[color=#ff0000]  (ssget[/color]
[color=#ff0000]	'((-4 . "<or")[/color]
[color=#ff0000]  	(0 . "RBCRENBARSHAPEDESC")[/color]
[color=#ff0000]  	(0 . "RBCR_ENDE_BARDDESC")[/color]
[color=#ff0000]  	(-4 . "or>")[/color]
[color=#ff0000]  	)[/color]
[color=#ff0000]	)[/color]
[color=#ff0000]  p3 (nth 50 ename3)[/color]
 [color=#ff0000]p2 (nth 47 ename3)[/color]
 p1 (nth 44 ename3)
 x1 (cadr
  	(nth 44 ename3)
  	)
 x2 (cadr
  	(nth 47 ename3)
  	)
 x3 (cadr
  	(nth 50 ename3)
  	)
 (if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)
 (setq
ename5 (subst p4 p3 ename4)
ename1 (append enam1 neame5)
);;;
(entmod ename1)
)
 (Command: "_.mirror" ss "")
 (princ)
 )

 

nó đã chạy được rồi nhưng đang co van đề là nó đang báo sai đối tượng. mình đang phải thử nghiệm lại cả cái temp của asd nữa xem có lỗi về khai báo đối tượng ji hok nữa

@ketxu: đã có lời cảm ơn ae giúp đỡ rồi mà sao bạn lại :angry2: ????????????????????????

Dòng màu đỏ trên là đoạn mà bạn viết không đúng cú pháp

Bạn đóng ngoặc cho hàm ssget ) thì mở ngoặc setq ( cho các biến p1, p2, p3 ở dưới.

Chưa setq cho biến ss.

Kết quả là thừa dấu )

Số lượng ngoặc ( bằng số lượng ) trong 1 hàm

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

sau khi đọc bài của ae giúp đỡ mình đã sửa lại nó như sau

(defun C:ccb (/ ename ename1 ename2 ename3 ename4 ename5
  	x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
 (setq
ename (ssget "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
)
 (setq ss (ssget
 	'((-4 . "<or")
   	(0 . "RBCRENBARSHAPEDESC")
   	(0 . "RBCR_ENDE_BARDDESC")
   	(-4 . "or>")
   	)
 	)
)
 (setq
p3 (nth 50 ename3)
p2 (nth 47 ename3)
p1 (nth 44 ename3)
x1 (cadr
  	(nth 44 ename3)
  	) 
x2 (cadr
 (nth 47 ename3)
 )
x3 (cadr
 (nth 50 ename3)
 )
)
(if (> x3 x2)
 	(setq x4 (- x2 kcach))
 	(setq x4 (+ x2 kcach))
 	)
	(setq
  	ename5 (subst p4 p3 ename4)
  	ename1 (append enam1 neame5)
  	);;;
(entmod ename1)
	)
 (Command: "_.mirror" ss "")
 (princ)
 )

đến đoạn

(if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)

 

thì nó báo lỗi. mình xem lại thì cái biến "kcach" chưa được khi báo.

cái này là dư liệu mình càn đánh dấu( chọn)

((-4 . "<or")
(0 . "RBCRENBARSHAPEDESC")
(0 . "RBCR_ENDE_BARDDESC")
(-4 . "or>")
)

 

mình khai báo thế nầy hok hiểu đã đúng chưa

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

sau khi đọc bài của ae giúp đỡ mình đã sửa lại nó như sau

...

đến đoạn

...

thì nó báo lỗi. mình xem lại thì cái biến "kcach" chưa được khi báo.

...

cái này là dư liệu mình càn đánh dấu( chọn)

...

mình khai báo thế nầy hok hiểu đã đúng chưa

 

Nói tóm lại: bạn đặt y/c bằng lời văn rồi mọi người giúp bạn sửa lisp. Từ đó bạn dễ rút ra kinh nghiệm hơn. Thực ra là tôi chưa biết lisp của bạn mục đích cuối cùng để làm gì, nên sửa từng đoạn thì khó lắm.

Thân thương!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

sau khi đọc bài của ae giúp đỡ mình đã sửa lại nó như sau

(defun C:ccb (/ ename ename1 ename2 ename3 ename4 ename5
  	x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
 (setq
ename (ssget "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
)
 (ssget
'((-4 . "<or")
 	(0 . "RBCRENBARSHAPEDESC")
 	(0 . "RBCR_ENDE_BARDDESC")
 	(-4 . "or>")
 	)
)
 (setq
p3 (nth 50 ename3)
p2 (nth 47 ename3)
p1 (nth 44 ename3)
x1 (cadr
  	(nth 44 ename3)
  	)

x2 (cadr
 (nth 47 ename3)
 )
x3 (cadr
 (nth 50 ename3)
 )
(if (> x3 x2)
 	(setq x4 (- x2 10))
 	(setq x4 (+ x2 10))
 	)
(setq
  	ename5 (subst p4 p3 ename4)
  	ename1 (append enam1 neame5)
  	);;;
(entmod ename1)
)
 (Command: "_.mirror" ss "")
 (princ)
 )

đến đoạn

(if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)

 

thì nó báo lỗi. mình xem lại thì cái biến "kcach" chưa được khi báo.

cái này là dư liệu mình càn đánh dấu( chọn)

((-4 . "<or")
(0 . "RBCRENBARSHAPEDESC")
(0 . "RBCR_ENDE_BARDDESC")
(-4 . "or>")
)

 

mình khai báo thế nầy hok hiểu đã đúng chưa

Ch­ưa đúng.

(setq ename (ssget "\n Chon doi tuong :")

.......

Bạn xem lại cú pháp của hàm ssget nhé. Viết vầy là chưa đúng rồi

cái nữa là biến ss chưa được set

nên dòng này có thể lỗi đấy

(Command: "_.mirror" ss "")

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@ketxu: tks bạn nhé. tại bỏ tới 6 năm rồi hem viết lách cái ji cả nên h quên hết mất rồi. h đang phải học lại. Hik

Nếu hok dùng hàm ssget ở đầu thì có thể dùng hàm thay thế là hàm prompt có được không vậy?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×