嗨,李,
我最初有这个代码(在互联网上的某个地方找到):
- (defun C:test ()
- (setq TOTAL 0.)
- (setvar "OSMODE" 0)
- (print "Please Select blocks")
- (setq SSPICK (ssget))
- (setq SSAMT (sslength SSPICK))
- (setq INDEX 0.)
- ;
- (while (< INDEX SSAMT); Selection Set Loop
- (setq ENT-NO (ssname SSPICK INDEX))
- (setq DXF (entget ENT-NO))
- (setq XYZ (cdr (assoc 10 DXF)))
- (command "insert" "TESTBLOCK" XYZ 1 "" "") ; TESTBLOCK = Yes...
- (princ)
- (setq INDEX (+ INDEX 1.))
- (princ INDEX) (print ENT-NO)
- ); end while
- (princ)
- )
首先,你可能想解释一些问题,因为我不知道代码是从哪里来的,所以我不能在那里问。
1.我看到:TOTAL=变量:在开始时设置为0。-->点(.)是什么在那里做什么?
2、Osmode关闭
3、提出行动,然后(setq SSPICK(ssget))。
4.SSPICK=SSPICK变量中放入选定的块/事物
5.(setq SSAMT(sslength SSPICK))=这是“计数”放置在SSPICK中的块/项目是否正确?
把一个变量设为零,再加一个点。。。为什么?
7.While function->只要索引小于ssamt,它就会在(While….和)之间循环;结束,对吗?
8、这三行是不可得的:
- (setq ENT-NO (ssname SSPICK INDEX))
它将变量ENT-NO设置为(..?)
- (setq DXF (entget ENT-NO))
它将Variable DXF设置为(entget ENT-NO)
- (setq XYZ (cdr (assoc 10 DXF)))
XYZ是从(cdr(assoc 10 dxf))中获得的点,它是插入点。
9.(setq指数(+指数1))这里1被添加到索引。。。
10.然后索引和ENT-NO打印在命令行上
11.如果索引小于ssamt,则返回函数的else端。
我无法从头开始创建上述lisp,但我想学习阅读代码是学习过程的一部分。
上面的代码适用于我需要做的事情:将一个块放置在另一个块插入点上。
它不适用于我必须修改(尝试)的外部参照中的块。
您的代码可能有帮助:
- (polar
- (cdr (assoc 10 (entget <ename>))) ; Insertion Point
- (+ pi
- (cdr (assoc 50 (entget <ename>))) ; Rotation
- ) ; End Addition
- 15
- ) ; end polar
但如何将两者结合起来呢?
你能帮我开始吗?
- (defun C:test ()
- (setvar "OSMODE" 0)
- (setq TOTAL 0.)
- (print "Please Select blocks")
- (setq SSPICK (ssget))
- SSAMT (sslength SSPICK)
- INDEX 0.)
- )
- (while (< INDEX SSAMT); Selection Set Loop
- (setq ENT-NO (ssname SSPICK INDEX)
- DXF (entget ENT-NO)
- XYZ (cdr (assoc 10 DXF))
- )
- (command "insert" "TESTBLOCK" XYZ 1 "" "") ; TESTBLOCK = Yes...
- (princ)
- (setq INDEX (+ INDEX 1.))
- (princ INDEX) (print ENT-NO)
- ); end while
- (princ)
- )
提前通知。 |