cag 发表于 2004-2-26 08:33:00

[求助]获取线两端点的问题

;;;请选择一条块中或嵌套块中的直线,并且该块的插入点不在世界坐标系原点<BR>;;;这样画出来的直线就偏离实际块所在的位置了,它就认为插入点在界坐标系原点,并且没有旋转,缩放,镜像,移动<BR>;;;如果将这个块给旋转,缩放,镜像,移动后再选择也是这样的,线的位置不会随着块的旋转,缩放,镜像,移动而改变<BR>;;;怎么让这根线的位置不会受到影响呢?我要达到的是外观看上去线的位置和样子(角度)<BR>;;;在嵌套块中用的是嵌套块中第一个块的原点<BR>;;;不要用osnap做<BR>;;;我用矩阵转换做过,nentselp可以返回4X4的矩阵,但水平有限,不太理想,现在源程序也找不到了<BR>;;;请教各位高手,该怎么解决?<BR>;;;请最好用ActiveX方法去做,我对纯Lisp不太懂<BR>(defun c:yy (/ mSpace ename vlaobject)<BR>       (vl-load-com)<BR>       (setq mSpace (vla-get-ModelSpace<BR>               (vla-get-ActiveDocument (vlax-get-acad-object))<BR>                                                       )<BR>       )<BR>       (setq ename (car (nentselp "\n拾取线:")))<BR>       (setq vlaobject (vlax-ename-&gt;vla-object ename))<BR>       (vla-addline<BR>                       mspace<BR>                       (vla-get-startpoint vlaobject)<BR>                       (vla-get-endpoint vlaobject)<BR>       )<BR>)

LIULISHENG 发表于 2020-5-20 14:46:06

学到了学到了

BDYCAD 发表于 2004-2-26 09:44:00

不知你樣的是不是這個效果


(defun c:tt(/ bl bp en a b os)<BR>(setq bl(entget (car (entsel))))<BR>(setq bp (cdr (assoc 10 bl)))<BR>(setq en (tblsearch "block" (cdr (assoc 2 bl))))<BR>(setq a (cdr (assoc -2 en)))<BR>(setq b (entnext a))<BR>(if (= (getvar "cmdecho") 1) (setvar "cmdecho" 0))<BR>(if (/= (setq os (getvar "osmode")) 0) (setvar "osmode" 0))<BR>(entmake (entget b))<BR>(command ".move" (entlast) "" '(0 0) bp)<BR>(if (= (getvar "cmdecho") 0) (setvar "cmdecho" 1))<BR>(if (= (getvar "osmode") 0) (setvar "osmode" os))<BR>(princ))

cag 发表于 2004-2-26 14:54:00

要的差不多就是这个效果了,只是用你这个程序在一个无名块中选线时,就会出错,而不是无名块选择时,明明选的是这条线,画出来却又不是这条线,是怎么回事?


麻烦你更新一下,再上传,最好用ActiveX,我看不懂Lisp


谢了

cag 发表于 2004-3-12 17:34:00

没人能解决吗?

meflying 发表于 2004-3-12 17:50:00

你想用什么语言写?

cag 发表于 2004-3-12 18:29:00

当然是用VL写了,最好用ActiveX方法。

晓雨 发表于 2004-3-12 18:32:00

能在lisp程序中插入块和更改块的属性吗?比如,我本来想插入很多块,而且要更改块的属性,我就想把它有程序写出来,就不必一个一个的操作,能吗

无痕 发表于 2004-3-12 18:48:00

看不太明白你要什么效果

meflying 发表于 2004-3-12 20:29:00

对于块引用的矩阵转换,其它的这里没做。。。


(defun chgcs(ptmcs lst / i x y z item)<BR>       (setq i 0<BR>        x 0<BR>        y 0<BR>        z 0<BR>       )<BR>       (repeat 4<BR>                       (setq item (nth i lst))<BR>                       (if (setq xx (nth i ptmcs))<BR>                                       (progn<BR>        (setq x (+ x (* xx (car item))))<BR>        (setq y (+ y (* xx (cadr item))))<BR>        (setq z (+ z (* xx (last item))))<BR>                                       )<BR>                                       (progn<BR>        (setq x (+ x (car item)))<BR>        (setq y (+ y (cadr item)))<BR>        (setq z (+ z (last item)))<BR>                                       )<BR>                       )<BR>                       (setq i (1+ i))<BR>       )<BR>       (list x y z)<BR>)


<BR>(defun c:test( / ent ents pt)<BR>       (setq ent (nentsel))<BR>       (setq ents (entget (car ent)))<BR>       (setq pt (cdr (assoc 10 ents)))<BR>       (chgcs pt (caddr ent))<BR>)

cag 发表于 2004-3-12 20:47:00

谢了,其他能否写一下?(好象得寸进尺哦)
页: [1] 2
查看完整版本: [求助]获取线两端点的问题