autocad:运行autolisp函数的脚本

时间:2016-03-10 12:37:54

标签: autocad autolisp

我有一个工作批处理文件,它在一堆图纸上运行脚本。

该脚本应该运行一个lisp函数,但该函数似乎只在main函数运行后运行。

因为我对lisps了解不多,所以我会尝试提供我所拥有的信息。

lsp:

<form id="searchform" action="../search4.php" method="post"><input id="Cref" style="height: 20px; width: 140px;" name="Cref" type="text" value="" />

<input id="submit" name="search" type="submit" value="Search" />

</form>

之后是一些其他(不确定)不那么重要的函数,比如ar_dia - 它会打开一个带有按钮的对话框来调用其他函数。 其他一个函数是AR_LIST,它是我需要在脚本中打开批处理文件的每个文件上运行的函数。

ar_list是几个街区,看起来像这样

<?php
$servername = "localhost";
$username='root';
$password = "";
$dbname = "mydb";

$mysqli = new mysqli($servername,$username, Null, $dbname);
// Check connection
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}  


            if(! get_magic_quotes_gpc() ) {
               $Cref = addslashes ($_POST['Cref']);
                }else {
               $Cref = $_POST['Cref'];
              }

session_start();

$results="SELECT * FROM mytable WHERE CRF LIKE CONCAT ('%', $Cref, '%')";   


$resultSet = $mysqli->query($results);
$numRows = $resultSet->num_rows;

if ($numRows > 0) {
    while ($row = $resultSet->fetch_object()) {
        echo "{$row->CRF} {$row->Name} {$row->Description}  <br>";
    }}
else
   {
   echo "No Results";}
?>

脚本只需要运行此命令,关闭图形,不要保存。

所以我试过(test.scr)

(princ "\nLoading AREAS...")

(defun c:areas(); Start the program.
    (setvar "cmdecho" 0)
    (if (= (getvar "tilemode") 1)
        (progn
            (command "_.ucs" "_world")        
            (setq osnp (getvar "osmode"))
            (setq laag (getvar "clayer"))
            (setvar "osmode" 0)
            (setq dimz (getvar "dimzin"))
            (setvar "dimzin" 0)       
            (ge_dellay ladeptmp)
            (if (>= (substr (getvar "acadver") 1 2) "15")
                (ge_convert)
            )
            (setq allsel (list (cons 0 "POLYLINE")'(-4 . "<OR")(cons 8 ladeppoly)(cons 8 ladeptraf)'(-4 . "OR>")'(-3 ("COSBI"))))
            (setq depsel (list (cons 0 "POLYLINE")(cons 8 ladeppoly)'(-3 ("COSBI"))))
            (setq areasel (list (cons 0 "POLYLINE")(cons 8 ladeptraf)'(-3 ("COSBI"))))
            (setq textsel (list (cons 0 "TEXT")(cons 8 ladeptext)'(-3 ("COSBI"))))
            (setq dcl_area (load_dialog "areas"))
            (setq dcl_gen (load_dialog "general"))
            (setq intp nil dparea nil seltot nil)
            (ar_setdep)
            (ar_dia)
            (if (= what_next 1)(ar_setlay))
            (if (= what_next 2)(ar_check))
            (if (= what_next 3)(ar_startcheck))
            (unload_dialog dcl_area)
            (unload_dialog dcl_gen)
            (setvar "osmode" osnp)
            (setvar "clayer" laag)
            (setvar "dimzin" dimz)
            (ge_dellay ladeptmp)
        )
        (alert "Only allowed in original drawing...")
    )
    (princ)
)

但这给了我错误:

命令:(ar_list) 坏参数类型:stringp nil

我认为ar_list需要来自 (defun ar_list(); Make department/areas list. (setq sel (ssget "x" allsel)) (if sel (progn (setq temp (findfile "template.sqm")) (if temp (progn (command "_.zoom" "_all") (setq rowlist nil deplist nil) (setq bestand (open temp "r")) (setq row (read-line bestand)) (while row (setq row (read-line bestand)) (if row (progn (setq rowlist (cons (strcase (strcat (spatie (substr row 23 14)) "_-")) rowlist)) (setq deplist (cons (strcase (spatie (substr row 23 14))) deplist)) ) ) ) (setq country (ge_dir 3 "Country")) (ge_dwg) (if (= (strlen dwgnaam) 9); 3to4storenr (progn (setq store (substr dwgnaam (- (strlen dwgnaam) 3))); 3to4storenr (setq floor (substr dwgnaam (- (strlen dwgnaam) 5) 2)); 3to4storenr (setq num 0) (repeat (sslength sel) (setq depname (cdr (cadadr (assoc -3 (entget (ssname sel num)'("COSBI")))))) (if (not (wcmatch depname "*`island*")) (progn (setq ename (ssname sel num)) (command "_.area" "_a" "_o" ename "") (ge_puntlist ename) (setq numpol 0) (setq selpol (ssget "_wp" puntlist allsel)) (if selpol (repeat (sslength selpol) (setq islname (cdr (cadadr (assoc -3 (entget (ssname selpol numpol)'("COSBI")))))) (if (= islname (strcat depname "-island")) (command "_s" "_o" (ssname selpol numpol) "") ) (setq numpol (1+ numpol)) ) ) (command "") (setq deparea (/ (getvar "area") 1000000)) (if (not (member (strcase depname) deplist)) (progn (setq deplist (cons (strcase depname) deplist)) (setq rowlist (cons (strcase (strcat depname "_-")) rowlist)) ) ) (setq nummem (- (length deplist)(length (member (strcase depname) deplist)))) (setq deptot (nth nummem rowlist)) (vindpos "_" deptot) (setq depareaold (substr deptot (+ pos 1))) (if (/= depareaold "-") (setq deparea (+ (atof depareaold) deparea)) ) (setq rowlist (subst (strcase (strcat depname "_" (rtos deparea 2 1))) (nth nummem rowlist) rowlist)) ) ) (setq num (1+ num)) ) (command "_.zoom" "_previous") (setq rowlist (acad_strlsort rowlist)); 13-10-2014 (setq deplist (acad_strlsort deplist)); 13-10-2014 ;(setq rowlist (reverse rowlist)) ;(setq deplist (reverse deplist)) (ar_write) ) (alert (strcat "Drawing name " dwgnaam " not correct, must be 9 characters.")); 3to4storenr ) ) (alert "File TEMPLATE.SQM not found...") ) ) (alert "No department or traffic found...") ) ) 的内容,但我不知道是什么。 ar_list在命令栏中输入区域后工作。 所以我也试过了

区域 (ar_list) 放弃 Ñ

,但是打开了区域对话框,没有关闭它,阻塞了循环。 此外,当我取消对话框时,ar_list工作,但它再次打开区域对话框。我认为代码会在脚本中重复出现。

非常欢迎任何帮助。我收到了here

的相关帮助

1 个答案:

答案 0 :(得分:0)

stringp nil告诉我们一些应该是文本字符串的变量实际上是nil。可能是因为它从对话框控件中读取值(在对话框未激活时这是不可用的)。

可能会导致此类问题的地方很少:

我们不知道ge_dir ge_dwg ge_puntlist vindpos ar_write

中发生了什么

ar_write也许想写一些对话框?

变量dwgnaam用作字符串但从未在此函数中初始化(可能在其他地方?)

(setq depname (cdr (cadadr (assoc -3 (entget (ssname sel num)'("COSBI")))))) (if (not (wcmatch depname "*island*"))如果选择的实体不包含XData“cosbi”,则可能会出现问题,但如果我没错,则会出现其他错误消息。