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