dhl 发表于 2022-7-6 10:07:29

2010 lisp故障

你好
 
这里有谁能告诉我为什么这个惯例在2009年很好地发挥作用,但在2010年却一点也没有。
 
功能描述:
 
从给定的行数和列数中,autocad将任意图元均匀放置在给定空间上
 
尽管如此,这是我第一次编译,所以它相当粗糙。任何需要改进的地方都值得欢迎!
 

(defun c:APLAC (/ oldcmd ss r1 c1 rc pt1 pt2 pt3 basepoint xbase ybase rad deg inspt inspt2)
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(princ "-----Space evenly-----")
(setq aa (getstring "\n Perpendicular space / Twisted Space <T> "))
(setq r1 (getint "\n Number of rows: "))
(setq c1 (getint "\n Number of columns: "))
(setq rc (+ c1 r1))
(if (= aa "") ; Perpendicular space
   (progn
   (setq pt1 (getpoint "\n Upper left corner: "))
   (setq pt3 (getcorner pt1 "\n Lower right corner"))
   (setq pt2 (list (car pt1) (cadr pt3) 0))
   )
   (progn ; Twisted space
   (setq pt1 (getpoint "\n Upper left corner: "))
   (princ "\n Lower left corner: ")
   (command "_.line" pt1 pause "")
   (setq pt2 (getvar "lastpoint"))
   (command "_.erase" pt1 "")
   (princ "\n Lower right corner: ")
   (command "_.line" pt2 pause "")
   (setq pt3 (getvar "lastpoint"))
   (command "_.erase" pt2 "")
   )
)
(setq xbase (/ (distance pt3 pt2) (* c1 2))) ; X-coord for array
(setq ybase (/ (distance pt1 pt2) (* r1 2))) ; Y-coord for array
(setq rad (angle pt2 pt3)) ; Angle for twisted space
(setq deg (* 180.0 (/ rad pi))) ; Angle in degree for twisted space
(setq basepoint(list (+ (car pt2) xbase) (+ (cadr pt2) ybase) 0)) ; Coordinate for array
(while (= ss nil) ; Chose symbol
    (setq ss(entsel))
)
(setq inspt(cdr(assoc 10 (entget (car ss))))) ; Insertion point for chosen symbol
(command "_copy" ss "" inspt basepoint)
(command "_rotate" (ssget "L") "" pt2 deg)
(setq inspt2(cdr(assoc 10 (entget (ssname (ssget "L") 0))))) ; Insertion point for symbol in array
(command "rotate" (ssget "L") "" inspt2 pause) ; Rotates symbol before array
(if (> rc 2) ; Array only if the sum of rows and colums is larger than2
   (progn
   (command "ucs" "3" pt2 pt3 pt1)
   (cond ((= r1 1) ; Array at row=1
   (progn
      (command "_.array" (ssget "L") "" "R" r1 c1 (/ (distance pt3 pt2) c1) )
   )
   )
   ((= c1 1) ; Array at column=1
   (progn
      (command "_.array" (ssget "L") "" "R" r1 c1 (/ (distance pt1 pt2) r1))
   )
   )
   ( ; Array for any combination of rows and columns
   (progn
      (command "_.array" (ssget "L") "" "R" r1 c1 (/ (distance pt1 pt2) r1) (/ (distance pt3 pt2) c1) )
   )
   )
   ) ;end cond
   (command "_.ucs" "w")
   ) ;end progn
) ;end if
(setvar "cmdecho" oldcmd)
(princ)
) ; end defun

Tharwat 发表于 2022-7-6 10:13:27

我用我的Cad 2010版本试过了,它运行正常。
 
运行这些代码时收到的错误消息是什么?
 
有些命令需要是标准的。
 
塔瓦特

ReMark 发表于 2022-7-6 10:15:17

我可以证实上述声明。刚刚在我的家用电脑上试用了2010版的lisp例程,效果很好。

dhl 发表于 2022-7-6 10:19:41

我懂了。感谢您的快速回复!
 
它似乎可以完美地与简单的autocad图元(如圆或其他)配合使用。
 
然而,我使用Autocad Mep,并在2009年能够将其用于Mep设备,而不是在2010年。
 
据我所见,DXF代码结构似乎从2009年更改为2010年,用于收集设备插入点的命令也不同。检查设备的DXF条目甚至不再包括插入点,但在哪里可以找到插入点?

Lee Mac 发表于 2022-7-6 10:21:06

仅供参考,getpoint可以接受多个参数。。。保存您绘制/删除这些线。。。

ReMark 发表于 2022-7-6 10:26:05

所以你用这个例程来插入DXF?你能给我们举一个MEP设备的例子吗?我不熟悉这个术语。

Lee Mac 发表于 2022-7-6 10:27:31

 
他指的是DXF组码,而不是DXF文件。。。

Lee Mac 发表于 2022-7-6 10:30:04

 
您正在查询哪些对象的插入点?

dhl 发表于 2022-7-6 10:33:48

作为Mep电气设备,我试图附加一个包含示例对象的dwg,但有250kb的限制。。。。

Lee Mac 发表于 2022-7-6 10:37:53

 
我没有MEP,所以无论如何都没有帮助-您是否查询了实体的entget数据以确定插入点的DXF代码的可能候选项,或者信息是否未显示?
 
此外,也许可以使用VL来实现这一点,所以可以转储对象以查看您可以看到的内容
页: [1] 2
查看完整版本: 2010 lisp故障