iCAx开思网

标题: 一个ACAD的高级应用问题,高手请进!! [打印本页]

作者: husb20    时间: 2006-6-2 09:44
标题: 一个ACAD的高级应用问题,高手请进!!
在autolisp中,要实现加长一根线段,如何让线段在希望加长一的端加长?
如(command "line" (list 0 0) (list 50 40))
     (command "lengthen" "de" 20 (entlast) "")
我希望在终点加长,结果先在线段起点加长几次,然后分别在起点与终点各加长一次,要实现把增量一直加在起点端或终点端,该如何控制?请高手指点!!
作者: husb20    时间: 2006-6-2 17:58
请高手出招!
作者: qomolangma    时间: 2006-6-2 23:37
标题: 回答
1:可以先用(entsel)获得要加长的对象和输入点的坐标,
可以用(car(entsel))获得对象句柄,可以用(cadr(entsel))获得输入点的坐标。
2:用(entget(car(entsel)))获得对象的信息列表,可以(cdr(assoc 10 entlist))获得起点坐标,用(cdr(assoc 11 entlist))获得终点坐标。
3:比较起点和终点分别和输入点的距离(distance p0 p1),那个点的距离近就表示要从那个点延长。
作者: qomolangma    时间: 2006-6-2 23:42
标题: 看法
看样子还是新手,有时间一起交流。
作者: husb20    时间: 2006-6-3 08:33
谢谢高手的指点!可是我要加长的是几千条线段,不能用entsel来一个个地选取,如果直接用(command "lengthen" "de" 200  (cdr( 11 (ssname ss n))"")获得终点来延长,结果每次延长的都不是需要延长的全部,百分之九十左右是正确的,其它百分之十左右的却在起点端延长,我试了好几次都一样,请高手继续指点!
作者: husb20    时间: 2006-6-5 08:20
我试了很多次,每次都不一样,请高手指点,以下程序哪里出了问题?

(defun c:xxc (/ o ob1 ob)
  (setvar "cmdecho" 0)
  (setq o (getvar "osmode"))
  (setvar "osmode" 0)
  (command "line" (list 0 0) (list 500 0) "")
  (setq ob1 (entlast))
  (command "array" ob1 "" "p" (list 0 0) 500 "" "" "")
  (setq ob (entnext))
  (while ob
    (command "lengthen"
             "de"
             200
             (cdr (assoc 11 (entget ob)))
             ""
    )
    (setq ob (entnext ob))
  )
  (command "zoom" "e")
  (setvar "osmode" o)
  (princ)
)
作者: husb20    时间: 2006-6-6 17:41
高手在哪里?快救命哪!!
作者: husb20    时间: 2006-6-7 12:48
不行,这里等得太辛苦了,得换个地方!
作者: husb20    时间: 2006-6-7 18:18
真是怪,今天用每次都很正常,前几天没一次正常,且每次都不一样?倒底是软件不稳定还是系统的问题,哪位高手请指点一下在下的迷津!!!

今天试的代码如下:
(defun c:xxx( / ss ssl n ent end)
  (setq ss(ssget "x" '((0 . "line")))
        ssl(sslength ss))
  (setq n 0)
  (while (<= n ssl)
    (setq ent(entget(ssname ss n))
          end(cdr(assoc 11 ent)))
    (command "lengthen" "de" -200 end "")
    (setq n(1+ n))
    )
  (princ)
  )

和前几天的一模一样,真是怪!!!!!!
作者: husb20    时间: 2006-7-7 08:40
难道这几行东东真的成了段誉的六脉神剑,要靠天吃饭?




欢迎光临 iCAx开思网 (https://www.icax.net/) Powered by Discuz! X3.3